[{"data":1,"prerenderedAt":173992},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-shu-zu-de-pin-jie":3,"wiki-doc-nav":1150},{"id":4,"title":5,"body":6,"description":1142,"extension":1143,"meta":1144,"navigation":1145,"path":1146,"seo":1147,"stem":1148,"__hash__":1149},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":8,"toc":1136},"minimark",[9,13,18,22,25,28,122,125,169,172,263,266,272,294,296,301,307,310,313,479,482,688,692,695,698,766,768,773,776,779,859,863,866,868,941,943,948,950,1030,1034,1037,1040,1043,1046,1049,1052,1132],[10,11,5],"h1",{"id":12},"_6数组的拼接",[14,15,17],"h2",{"id":16},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,20,21],"p",{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,23,24],{},"函数内部传两个数列构成的数列或者元组",[19,26,27],{},"①一维数组的拼接",[29,30,35],"pre",{"className":31,"code":32,"language":33,"meta":34,"style":34},"language-python shiki shiki-themes github-light github-dark","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","python","",[36,37,38,72,97,104,110,116],"code",{"__ignoreMap":34},[39,40,43,47,51,54,58,61,64,66,69],"span",{"class":41,"line":42},"line",1,[39,44,46],{"class":45},"sVt8B","a",[39,48,50],{"class":49},"szBVR","=",[39,52,53],{"class":45},"np.array([",[39,55,57],{"class":56},"sj4cs","1",[39,59,60],{"class":45},",",[39,62,63],{"class":56},"2",[39,65,60],{"class":45},[39,67,68],{"class":56},"3",[39,70,71],{"class":45},"])\n",[39,73,75,78,80,82,85,87,90,92,95],{"class":41,"line":74},2,[39,76,77],{"class":45},"b",[39,79,50],{"class":49},[39,81,53],{"class":45},[39,83,84],{"class":56},"4",[39,86,60],{"class":45},[39,88,89],{"class":56},"5",[39,91,60],{"class":45},[39,93,94],{"class":56},"6",[39,96,71],{"class":45},[39,98,100],{"class":41,"line":99},3,[39,101,103],{"class":102},"sJ8bj","#调用concatenate进行数组拼接\n",[39,105,107],{"class":41,"line":106},4,[39,108,109],{"class":45},"np.concatenate((a,b))\n",[39,111,113],{"class":41,"line":112},5,[39,114,115],{"class":102},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[39,117,119],{"class":41,"line":118},6,[39,120,121],{"class":102},"#np.concatenate([a,b])\n",[19,123,124],{},"②一维多个数组拼接",[29,126,128],{"className":31,"code":127,"language":33,"meta":34,"style":34},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[36,129,130,135,159,164],{"__ignoreMap":34},[39,131,132],{"class":41,"line":42},[39,133,134],{"class":102},"#也可以多个数组进行拼接\n",[39,136,137,140,142,144,147,149,152,154,157],{"class":41,"line":74},[39,138,139],{"class":45},"c",[39,141,50],{"class":49},[39,143,53],{"class":45},[39,145,146],{"class":56},"10",[39,148,60],{"class":45},[39,150,151],{"class":56},"11",[39,153,60],{"class":45},[39,155,156],{"class":56},"13",[39,158,71],{"class":45},[39,160,161],{"class":41,"line":99},[39,162,163],{"class":45},"c\n",[39,165,166],{"class":41,"line":106},[39,167,168],{"class":45},"np.concatenate((a,b,c))\n",[19,170,171],{},"③二维数组拼接",[29,173,175],{"className":31,"code":174,"language":33,"meta":34,"style":34},"#二维数组使用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",[36,176,177,182,210,237,242,247],{"__ignoreMap":34},[39,178,179],{"class":41,"line":42},[39,180,181],{"class":102},"#二维数组使用concatenate进行拼接\n",[39,183,184,187,189,192,194,196,198,201,203,205,207],{"class":41,"line":74},[39,185,186],{"class":45},"aa",[39,188,50],{"class":49},[39,190,191],{"class":45},"np.arange(",[39,193,57],{"class":56},[39,195,60],{"class":45},[39,197,156],{"class":56},[39,199,200],{"class":45},").reshape(",[39,202,68],{"class":56},[39,204,60],{"class":45},[39,206,84],{"class":56},[39,208,209],{"class":45},")\n",[39,211,212,215,217,219,222,224,227,229,231,233,235],{"class":41,"line":99},[39,213,214],{"class":45},"bb",[39,216,50],{"class":49},[39,218,191],{"class":45},[39,220,221],{"class":56},"101",[39,223,60],{"class":45},[39,225,226],{"class":56},"113",[39,228,200],{"class":45},[39,230,68],{"class":56},[39,232,60],{"class":45},[39,234,84],{"class":56},[39,236,209],{"class":45},[39,238,239],{"class":41,"line":106},[39,240,241],{"class":102},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[39,243,244],{"class":41,"line":112},[39,245,246],{"class":102},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[39,248,249,252,256,258,261],{"class":41,"line":118},[39,250,251],{"class":45},"np.concatenate((aa,bb),",[39,253,255],{"class":254},"s4XuR","axis",[39,257,50],{"class":49},[39,259,260],{"class":56},"0",[39,262,209],{"class":45},[19,264,265],{},"结果：",[19,267,268],{},[269,270],"img",{"alt":34,"src":271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[29,273,275],{"className":31,"code":274,"language":33,"meta":34,"style":34},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[36,276,277,282],{"__ignoreMap":34},[39,278,279],{"class":41,"line":42},[39,280,281],{"class":102},"#指定axis为1进行拼接\n",[39,283,284,286,288,290,292],{"class":41,"line":74},[39,285,251],{"class":45},[39,287,255],{"class":254},[39,289,50],{"class":49},[39,291,57],{"class":56},[39,293,209],{"class":45},[19,295,265],{},[19,297,298],{},[269,299],{"alt":34,"src":300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,302,303],{},[304,305,306],"strong",{},"二维数组总结：0竖着方向，1横着方向",[19,308,309],{},"④三维数组拼接",[19,311,312],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[29,314,316],{"className":31,"code":315,"language":33,"meta":34,"style":34},"#两个三行六列\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",[36,317,318,323,353,383,388,406,411,417,423,441,447,453,459,473],{"__ignoreMap":34},[39,319,320],{"class":41,"line":42},[39,321,322],{"class":102},"#两个三行六列\n",[39,324,325,328,330,332,334,336,339,341,343,345,347,349,351],{"class":41,"line":74},[39,326,327],{"class":45},"aaa",[39,329,50],{"class":49},[39,331,191],{"class":45},[39,333,57],{"class":56},[39,335,60],{"class":45},[39,337,338],{"class":56},"37",[39,340,200],{"class":45},[39,342,63],{"class":56},[39,344,60],{"class":45},[39,346,68],{"class":56},[39,348,60],{"class":45},[39,350,94],{"class":56},[39,352,209],{"class":45},[39,354,355,358,360,362,364,366,369,371,373,375,377,379,381],{"class":41,"line":99},[39,356,357],{"class":45},"bbb",[39,359,50],{"class":49},[39,361,191],{"class":45},[39,363,221],{"class":56},[39,365,60],{"class":45},[39,367,368],{"class":56},"137",[39,370,200],{"class":45},[39,372,63],{"class":56},[39,374,60],{"class":45},[39,376,68],{"class":56},[39,378,60],{"class":45},[39,380,94],{"class":56},[39,382,209],{"class":45},[39,384,385],{"class":41,"line":106},[39,386,387],{"class":102},"#axis=0\n",[39,389,390,393,395,398,400,402,404],{"class":41,"line":112},[39,391,392],{"class":45},"s",[39,394,50],{"class":49},[39,396,397],{"class":45},"np.concatenate((aaa,bbb),",[39,399,255],{"class":254},[39,401,50],{"class":49},[39,403,260],{"class":56},[39,405,209],{"class":45},[39,407,408],{"class":41,"line":118},[39,409,410],{"class":45},"s.shape\n",[39,412,414],{"class":41,"line":413},7,[39,415,416],{"class":102},"#输出：(4,3,6)\n",[39,418,420],{"class":41,"line":419},8,[39,421,422],{"class":102},"#axis=1\n",[39,424,426,429,431,433,435,437,439],{"class":41,"line":425},9,[39,427,428],{"class":45},"ss",[39,430,50],{"class":49},[39,432,397],{"class":45},[39,434,255],{"class":254},[39,436,50],{"class":49},[39,438,57],{"class":56},[39,440,209],{"class":45},[39,442,444],{"class":41,"line":443},10,[39,445,446],{"class":45},"ss.shape\n",[39,448,450],{"class":41,"line":449},11,[39,451,452],{"class":102},"#输出：(2,6,6)\n",[39,454,456],{"class":41,"line":455},12,[39,457,458],{"class":102},"#axis=2\n",[39,460,462,464,466,468,470],{"class":41,"line":461},13,[39,463,397],{"class":45},[39,465,255],{"class":254},[39,467,50],{"class":49},[39,469,63],{"class":56},[39,471,472],{"class":45},").shape\n",[39,474,476],{"class":41,"line":475},14,[39,477,478],{"class":102},"#输出：（2，3，12）\n",[19,480,481],{},"⑤四维数组拼接",[29,483,485],{"className":31,"code":484,"language":33,"meta":34,"style":34},"#两个三行六列\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",[36,486,487,491,519,547,573,599,603,616,621,625,637,642,646,658,663,669,682],{"__ignoreMap":34},[39,488,489],{"class":41,"line":42},[39,490,322],{"class":102},[39,492,493,495,497,499,501,503,505,507,509,511,513,515,517],{"class":41,"line":74},[39,494,327],{"class":45},[39,496,50],{"class":49},[39,498,191],{"class":45},[39,500,57],{"class":56},[39,502,60],{"class":45},[39,504,338],{"class":56},[39,506,200],{"class":45},[39,508,63],{"class":56},[39,510,60],{"class":45},[39,512,68],{"class":56},[39,514,60],{"class":45},[39,516,94],{"class":56},[39,518,209],{"class":45},[39,520,521,523,525,527,529,531,533,535,537,539,541,543,545],{"class":41,"line":99},[39,522,357],{"class":45},[39,524,50],{"class":49},[39,526,191],{"class":45},[39,528,221],{"class":56},[39,530,60],{"class":45},[39,532,368],{"class":56},[39,534,200],{"class":45},[39,536,63],{"class":56},[39,538,60],{"class":45},[39,540,68],{"class":56},[39,542,60],{"class":45},[39,544,94],{"class":56},[39,546,209],{"class":45},[39,548,549,552,554,557,559,561,563,565,567,569,571],{"class":41,"line":106},[39,550,551],{"class":45},"aaaa",[39,553,50],{"class":49},[39,555,556],{"class":45},"aaa.reshape(",[39,558,63],{"class":56},[39,560,60],{"class":45},[39,562,68],{"class":56},[39,564,60],{"class":45},[39,566,68],{"class":56},[39,568,60],{"class":45},[39,570,63],{"class":56},[39,572,209],{"class":45},[39,574,575,578,580,583,585,587,589,591,593,595,597],{"class":41,"line":112},[39,576,577],{"class":45},"bbbb",[39,579,50],{"class":49},[39,581,582],{"class":45},"bbb.reshape(",[39,584,63],{"class":56},[39,586,60],{"class":45},[39,588,68],{"class":56},[39,590,60],{"class":45},[39,592,68],{"class":56},[39,594,60],{"class":45},[39,596,63],{"class":56},[39,598,209],{"class":45},[39,600,601],{"class":41,"line":118},[39,602,387],{"class":102},[39,604,605,608,610,612,614],{"class":41,"line":413},[39,606,607],{"class":45},"np.concatenate((aaaa,bbbb),",[39,609,255],{"class":254},[39,611,50],{"class":49},[39,613,260],{"class":56},[39,615,472],{"class":45},[39,617,618],{"class":41,"line":419},[39,619,620],{"class":102},"#结果：（4，3，3，2）\n",[39,622,623],{"class":41,"line":425},[39,624,422],{"class":102},[39,626,627,629,631,633,635],{"class":41,"line":443},[39,628,607],{"class":45},[39,630,255],{"class":254},[39,632,50],{"class":49},[39,634,57],{"class":56},[39,636,472],{"class":45},[39,638,639],{"class":41,"line":449},[39,640,641],{"class":102},"#结果：（2，6，3，2）\n",[39,643,644],{"class":41,"line":455},[39,645,458],{"class":102},[39,647,648,650,652,654,656],{"class":41,"line":461},[39,649,607],{"class":45},[39,651,255],{"class":254},[39,653,50],{"class":49},[39,655,63],{"class":56},[39,657,472],{"class":45},[39,659,660],{"class":41,"line":475},[39,661,662],{"class":102},"#结果：（2，3，6，2）\n",[39,664,666],{"class":41,"line":665},15,[39,667,668],{"class":102},"#axis=3\n",[39,670,672,674,676,678,680],{"class":41,"line":671},16,[39,673,607],{"class":45},[39,675,255],{"class":254},[39,677,50],{"class":49},[39,679,68],{"class":56},[39,681,472],{"class":45},[39,683,685],{"class":41,"line":684},17,[39,686,687],{"class":102},"#结果：（2，3，3，4）\n",[14,689,691],{"id":690},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,693,694],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,696,697],{},"①二维数组",[29,699,701],{"className":31,"code":700,"language":33,"meta":34,"style":34},"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",[36,702,703,727,751,756,761],{"__ignoreMap":34},[39,704,705,707,709,711,713,715,717,719,721,723,725],{"class":41,"line":42},[39,706,186],{"class":45},[39,708,50],{"class":49},[39,710,191],{"class":45},[39,712,57],{"class":56},[39,714,60],{"class":45},[39,716,156],{"class":56},[39,718,200],{"class":45},[39,720,68],{"class":56},[39,722,60],{"class":45},[39,724,84],{"class":56},[39,726,209],{"class":45},[39,728,729,731,733,735,737,739,741,743,745,747,749],{"class":41,"line":74},[39,730,214],{"class":45},[39,732,50],{"class":49},[39,734,191],{"class":45},[39,736,221],{"class":56},[39,738,60],{"class":45},[39,740,226],{"class":56},[39,742,200],{"class":45},[39,744,68],{"class":56},[39,746,60],{"class":45},[39,748,84],{"class":56},[39,750,209],{"class":45},[39,752,753],{"class":41,"line":99},[39,754,755],{"class":45},"np.hstack((aa,bb))\n",[39,757,758],{"class":41,"line":106},[39,759,760],{"class":102},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[39,762,763],{"class":41,"line":112},[39,764,765],{"class":102},"#np.hstack([aa,bb])\n",[19,767,265],{},[19,769,770],{},[269,771],{"alt":34,"src":772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,774,775],{},"等效于concatenate()函数中axis=1时的情况",[19,777,778],{},"②三维数组",[29,780,782],{"className":31,"code":781,"language":33,"meta":34,"style":34},"#两个三行六列\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",[36,783,784,788,816,844,849,854],{"__ignoreMap":34},[39,785,786],{"class":41,"line":42},[39,787,322],{"class":102},[39,789,790,792,794,796,798,800,802,804,806,808,810,812,814],{"class":41,"line":74},[39,791,327],{"class":45},[39,793,50],{"class":49},[39,795,191],{"class":45},[39,797,57],{"class":56},[39,799,60],{"class":45},[39,801,338],{"class":56},[39,803,200],{"class":45},[39,805,63],{"class":56},[39,807,60],{"class":45},[39,809,68],{"class":56},[39,811,60],{"class":45},[39,813,94],{"class":56},[39,815,209],{"class":45},[39,817,818,820,822,824,826,828,830,832,834,836,838,840,842],{"class":41,"line":99},[39,819,357],{"class":45},[39,821,50],{"class":49},[39,823,191],{"class":45},[39,825,221],{"class":56},[39,827,60],{"class":45},[39,829,368],{"class":56},[39,831,200],{"class":45},[39,833,63],{"class":56},[39,835,60],{"class":45},[39,837,68],{"class":56},[39,839,60],{"class":45},[39,841,94],{"class":56},[39,843,209],{"class":45},[39,845,846],{"class":41,"line":106},[39,847,848],{"class":102},"#使用hstack\n",[39,850,851],{"class":41,"line":112},[39,852,853],{"class":45},"np.hstack((aaa,bbb)).shape\n",[39,855,856],{"class":41,"line":118},[39,857,858],{"class":102},"#输出：（2，6，6）\n",[14,860,862],{"id":861},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,864,865],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,867,697],{},[29,869,871],{"className":31,"code":870,"language":33,"meta":34,"style":34},"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",[36,872,873,897,921,926,931,936],{"__ignoreMap":34},[39,874,875,877,879,881,883,885,887,889,891,893,895],{"class":41,"line":42},[39,876,186],{"class":45},[39,878,50],{"class":49},[39,880,191],{"class":45},[39,882,57],{"class":56},[39,884,60],{"class":45},[39,886,156],{"class":56},[39,888,200],{"class":45},[39,890,68],{"class":56},[39,892,60],{"class":45},[39,894,84],{"class":56},[39,896,209],{"class":45},[39,898,899,901,903,905,907,909,911,913,915,917,919],{"class":41,"line":74},[39,900,214],{"class":45},[39,902,50],{"class":49},[39,904,191],{"class":45},[39,906,221],{"class":56},[39,908,60],{"class":45},[39,910,226],{"class":56},[39,912,200],{"class":45},[39,914,68],{"class":56},[39,916,60],{"class":45},[39,918,84],{"class":56},[39,920,209],{"class":45},[39,922,923],{"class":41,"line":99},[39,924,925],{"class":102},"#vstack 垂直方向进行堆叠\n",[39,927,928],{"class":41,"line":106},[39,929,930],{"class":45},"np.vstack((aa,bb))\n",[39,932,933],{"class":41,"line":112},[39,934,935],{"class":102},"#与hstack传的参数类似，等价于：\n",[39,937,938],{"class":41,"line":118},[39,939,940],{"class":45},"np.vstack([aa,bb])\n",[19,942,265],{},[19,944,945],{},[269,946],{"alt":34,"src":947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,949,778],{},[29,951,953],{"className":31,"code":952,"language":33,"meta":34,"style":34},"#两个三行六列\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",[36,954,955,959,987,1015,1020,1025],{"__ignoreMap":34},[39,956,957],{"class":41,"line":42},[39,958,322],{"class":102},[39,960,961,963,965,967,969,971,973,975,977,979,981,983,985],{"class":41,"line":74},[39,962,327],{"class":45},[39,964,50],{"class":49},[39,966,191],{"class":45},[39,968,57],{"class":56},[39,970,60],{"class":45},[39,972,338],{"class":56},[39,974,200],{"class":45},[39,976,63],{"class":56},[39,978,60],{"class":45},[39,980,68],{"class":56},[39,982,60],{"class":45},[39,984,94],{"class":56},[39,986,209],{"class":45},[39,988,989,991,993,995,997,999,1001,1003,1005,1007,1009,1011,1013],{"class":41,"line":99},[39,990,357],{"class":45},[39,992,50],{"class":49},[39,994,191],{"class":45},[39,996,221],{"class":56},[39,998,60],{"class":45},[39,1000,368],{"class":56},[39,1002,200],{"class":45},[39,1004,63],{"class":56},[39,1006,60],{"class":45},[39,1008,68],{"class":56},[39,1010,60],{"class":45},[39,1012,94],{"class":56},[39,1014,209],{"class":45},[39,1016,1017],{"class":41,"line":106},[39,1018,1019],{"class":102},"#使用vstack\n",[39,1021,1022],{"class":41,"line":112},[39,1023,1024],{"class":45},"np.vstack((aaa,bbb)).shape\n",[39,1026,1027],{"class":41,"line":118},[39,1028,1029],{"class":102},"#输出：（4，3，6）\n",[14,1031,1033],{"id":1032},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,1035,1036],{},"该方法是三维数组特有的方法",[19,1038,1039],{},"也就是说",[19,1041,1042],{},"一维数组拼接方法用：concatenate()",[19,1044,1045],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,1047,1048],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,1050,1051],{},"四维数组及多维数组只能用concatenate进行拼接",[29,1053,1055],{"className":31,"code":1054,"language":33,"meta":34,"style":34},"#两个三行六列\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",[36,1056,1057,1061,1089,1117,1122,1127],{"__ignoreMap":34},[39,1058,1059],{"class":41,"line":42},[39,1060,322],{"class":102},[39,1062,1063,1065,1067,1069,1071,1073,1075,1077,1079,1081,1083,1085,1087],{"class":41,"line":74},[39,1064,327],{"class":45},[39,1066,50],{"class":49},[39,1068,191],{"class":45},[39,1070,57],{"class":56},[39,1072,60],{"class":45},[39,1074,338],{"class":56},[39,1076,200],{"class":45},[39,1078,63],{"class":56},[39,1080,60],{"class":45},[39,1082,68],{"class":56},[39,1084,60],{"class":45},[39,1086,94],{"class":56},[39,1088,209],{"class":45},[39,1090,1091,1093,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115],{"class":41,"line":99},[39,1092,357],{"class":45},[39,1094,50],{"class":49},[39,1096,191],{"class":45},[39,1098,221],{"class":56},[39,1100,60],{"class":45},[39,1102,368],{"class":56},[39,1104,200],{"class":45},[39,1106,63],{"class":56},[39,1108,60],{"class":45},[39,1110,68],{"class":56},[39,1112,60],{"class":45},[39,1114,94],{"class":56},[39,1116,209],{"class":45},[39,1118,1119],{"class":41,"line":106},[39,1120,1121],{"class":102},"#使用dstack\n",[39,1123,1124],{"class":41,"line":112},[39,1125,1126],{"class":45},"np.dstack((aaa,bbb)).shape\n",[39,1128,1129],{"class":41,"line":118},[39,1130,1131],{"class":102},"#结果：（2，3，12）\n",[1133,1134,1135],"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 .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":34,"searchDepth":74,"depth":74,"links":1137},[1138,1139,1140,1141],{"id":16,"depth":74,"text":17},{"id":690,"depth":74,"text":691},{"id":861,"depth":74,"text":862},{"id":1032,"depth":74,"text":1033},null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":5,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",[1151,6219,7326,8746,11735,13086,14575,15664,24427,24439,25038,25064,25188,25429,25494,25512,25525,25572,25696,25865,26064,26244,26449,26585,26680,26717,26730,27040,27781,28489,28510,29530,31161,31312,31325,31337,31636,51447,51462,51479,51512,54384,77732,93877,93898,94011,94129,94898,95561,95922,95960,96066,96166,96209,96235,96296,97949,98050,98075,98566,99065,100042,100325,101067,101569,101581,103597,105261,106764,108462,110379,112298,114320,117790,118222,118685,119434,122378,122726,122748,123104,126411,126423,126826,126849,126996,127163,127368,127669,128226,128883,130814,132412,133061,134555,135986,137221,138915,140667,143077,143193,144128,144339,145224,146459,146687,146700,147855,150267,152635,155956,158433,160077,161854,163867,166919,169099,171626,173820],{"id":1152,"title":1153,"body":1154,"description":34,"extension":1143,"meta":6214,"navigation":1145,"path":6215,"seo":6216,"stem":6217,"__hash__":6218},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1155,"toc":6186},[1156,1159,1163,1166,1170,1183,1187,1192,1195,1198,1201,1204,1207,1234,1238,1241,1244,1247,1250,1298,1302,1321,1323,1337,1340,1348,1351,2197,2204,2221,2225,2311,2315,2321,2407,2411,2449,2453,2517,2521,2525,2531,2542,2546,2551,2555,2560,2564,2569,2573,2577,2582,2845,2850,2988,2993,3250,3253,3261,3265,3270,3373,3376,3682,3691,3792,3795,3798,3801,3804,4064,4069,4209,4212,4391,4394,4522,4525,4677,4681,4686,4689,4700,4708,4711,4818,4822,4826,4831,4881,4886,4891,4915,4920,4973,4976,4981,5158,5163,5448,5453,5849,5853,5858,5915,5920,5928,5931,6071,6074,6183],[10,1157,1153],{"id":1158},"_1基础入门",[14,1160,1162],{"id":1161},"_11注释","1.1注释",[19,1164,1165],{},"\u002F\u002F或者\u002F* *\u002F",[14,1167,1169],{"id":1168},"_12命名","1.2命名",[1171,1172,1173,1177,1180],"ol",{},[1174,1175,1176],"li",{},"字母数字下划线",[1174,1178,1179],{},"开头必须是字母或_",[1174,1181,1182],{},"不能使用关键词",[14,1184,1186],{"id":1185},"_13数据类型","1.3数据类型",[1188,1189,1191],"h3",{"id":1190},"_131整形","1.3.1整形",[19,1193,1194],{},"short 短整形 2",[19,1196,1197],{},"int 整形 4",[19,1199,1200],{},"long 长整形 win4 linux32位4 linux64位8",[19,1202,1203],{},"long long 长长整形 8",[19,1205,1206],{},"利用sizeof可以求数据类型占用的内存空间大小",[29,1208,1212],{"className":1209,"code":1210,"language":1211,"meta":34,"style":34},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[36,1213,1214,1227],{"__ignoreMap":34},[39,1215,1216,1219,1222,1225],{"class":41,"line":42},[39,1217,1218],{"class":49},"sizeof",[39,1220,1221],{"class":45},"(",[39,1223,1224],{"class":49},"int",[39,1226,209],{"class":45},[39,1228,1229,1231],{"class":41,"line":74},[39,1230,1218],{"class":49},[39,1232,1233],{"class":45},"(num)\n",[1188,1235,1237],{"id":1236},"_132浮点型","1.3.2浮点型",[19,1239,1240],{},"float 单精度 4节 7位有效数字",[19,1242,1243],{},"double 双精度 8节 15-16有效数字",[19,1245,1246],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,1248,1249],{},"注意点：",[29,1251,1253],{"className":1209,"code":1252,"language":1211,"meta":34,"style":34},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[36,1254,1255,1277],{"__ignoreMap":34},[39,1256,1257,1260,1263,1265,1268,1271,1274],{"class":41,"line":42},[39,1258,1259],{"class":49},"float",[39,1261,1262],{"class":45}," f1",[39,1264,50],{"class":49},[39,1266,1267],{"class":56},"3.14",[39,1269,1270],{"class":49},"f",[39,1272,1273],{"class":45},";",[39,1275,1276],{"class":102}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[39,1278,1279,1281,1284,1286,1288,1291,1293,1295],{"class":41,"line":74},[39,1280,1259],{"class":49},[39,1282,1283],{"class":45}," f2",[39,1285,50],{"class":49},[39,1287,68],{"class":56},[39,1289,1290],{"class":49},"e",[39,1292,63],{"class":56},[39,1294,1273],{"class":45},[39,1296,1297],{"class":102}," \u002F\u002F科学记数法\n",[1188,1299,1301],{"id":1300},"_133字符型","1.3.3字符型",[29,1303,1305],{"className":1209,"code":1304,"language":1211,"meta":34,"style":34},"char ch='a'\n",[36,1306,1307],{"__ignoreMap":34},[39,1308,1309,1312,1315,1317],{"class":41,"line":42},[39,1310,1311],{"class":49},"char",[39,1313,1314],{"class":45}," ch",[39,1316,50],{"class":49},[39,1318,1320],{"class":1319},"sZZnC","'a'\n",[19,1322,1249],{},[1171,1324,1325,1328,1331,1334],{},[1174,1326,1327],{},"在显示字符型变量时，只能单引号，双引号x",[1174,1329,1330],{},"单引号内只能一个字符，不能字符串",[1174,1332,1333],{},"c和c++字符型变量只占用一个字符",[1174,1335,1336],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,1338,1339],{},"ASCII码大致由以下两部分组成：",[1171,1341,1342,1345],{},[1174,1343,1344],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[1174,1346,1347],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,1349,1350],{},"ASCII码表格：",[1352,1353,1354,1397],"table",{},[1355,1356,1357],"thead",{},[1358,1359,1360,1367,1372,1376,1381,1385,1389,1393],"tr",{},[1361,1362,1363,1366],"th",{},[304,1364,1365],{},"ASCII","值",[1361,1368,1369],{},[304,1370,1371],{},"控制字符",[1361,1373,1374,1366],{},[304,1375,1365],{},[1361,1377,1378],{},[304,1379,1380],{},"字符",[1361,1382,1383,1366],{},[304,1384,1365],{},[1361,1386,1387],{},[304,1388,1380],{},[1361,1390,1391,1366],{},[304,1392,1365],{},[1361,1394,1395],{},[304,1396,1380],{},[1398,1399,1400,1426,1450,1474,1498,1523,1545,1569,1594,1619,1645,1670,1695,1720,1745,1771,1797,1821,1845,1870,1894,1919,1944,1969,1994,2019,2044,2070,2095,2120,2145,2171],"tbody",{},[1358,1401,1402,1405,1408,1411,1414,1417,1420,1423],{},[1403,1404,260],"td",{},[1403,1406,1407],{},"NUT",[1403,1409,1410],{},"32",[1403,1412,1413],{},"(space)",[1403,1415,1416],{},"64",[1403,1418,1419],{},"@",[1403,1421,1422],{},"96",[1403,1424,1425],{},"、",[1358,1427,1428,1430,1433,1436,1439,1442,1445,1448],{},[1403,1429,57],{},[1403,1431,1432],{},"SOH",[1403,1434,1435],{},"33",[1403,1437,1438],{},"!",[1403,1440,1441],{},"65",[1403,1443,1444],{},"A",[1403,1446,1447],{},"97",[1403,1449,46],{},[1358,1451,1452,1454,1457,1460,1463,1466,1469,1472],{},[1403,1453,63],{},[1403,1455,1456],{},"STX",[1403,1458,1459],{},"34",[1403,1461,1462],{},"\"",[1403,1464,1465],{},"66",[1403,1467,1468],{},"B",[1403,1470,1471],{},"98",[1403,1473,77],{},[1358,1475,1476,1478,1481,1484,1487,1490,1493,1496],{},[1403,1477,68],{},[1403,1479,1480],{},"ETX",[1403,1482,1483],{},"35",[1403,1485,1486],{},"#",[1403,1488,1489],{},"67",[1403,1491,1492],{},"C",[1403,1494,1495],{},"99",[1403,1497,139],{},[1358,1499,1500,1502,1505,1508,1511,1514,1517,1520],{},[1403,1501,84],{},[1403,1503,1504],{},"EOT",[1403,1506,1507],{},"36",[1403,1509,1510],{},"$",[1403,1512,1513],{},"68",[1403,1515,1516],{},"D",[1403,1518,1519],{},"100",[1403,1521,1522],{},"d",[1358,1524,1525,1527,1530,1532,1535,1538,1541,1543],{},[1403,1526,89],{},[1403,1528,1529],{},"ENQ",[1403,1531,338],{},[1403,1533,1534],{},"%",[1403,1536,1537],{},"69",[1403,1539,1540],{},"E",[1403,1542,221],{},[1403,1544,1290],{},[1358,1546,1547,1549,1552,1555,1558,1561,1564,1567],{},[1403,1548,94],{},[1403,1550,1551],{},"ACK",[1403,1553,1554],{},"38",[1403,1556,1557],{},"&",[1403,1559,1560],{},"70",[1403,1562,1563],{},"F",[1403,1565,1566],{},"102",[1403,1568,1270],{},[1358,1570,1571,1574,1577,1580,1582,1585,1588,1591],{},[1403,1572,1573],{},"7",[1403,1575,1576],{},"BEL",[1403,1578,1579],{},"39",[1403,1581,60],{},[1403,1583,1584],{},"71",[1403,1586,1587],{},"G",[1403,1589,1590],{},"103",[1403,1592,1593],{},"g",[1358,1595,1596,1599,1602,1605,1607,1610,1613,1616],{},[1403,1597,1598],{},"8",[1403,1600,1601],{},"BS",[1403,1603,1604],{},"40",[1403,1606,1221],{},[1403,1608,1609],{},"72",[1403,1611,1612],{},"H",[1403,1614,1615],{},"104",[1403,1617,1618],{},"h",[1358,1620,1621,1624,1627,1630,1633,1636,1639,1642],{},[1403,1622,1623],{},"9",[1403,1625,1626],{},"HT",[1403,1628,1629],{},"41",[1403,1631,1632],{},")",[1403,1634,1635],{},"73",[1403,1637,1638],{},"I",[1403,1640,1641],{},"105",[1403,1643,1644],{},"i",[1358,1646,1647,1649,1652,1655,1658,1661,1664,1667],{},[1403,1648,146],{},[1403,1650,1651],{},"LF",[1403,1653,1654],{},"42",[1403,1656,1657],{},"*",[1403,1659,1660],{},"74",[1403,1662,1663],{},"J",[1403,1665,1666],{},"106",[1403,1668,1669],{},"j",[1358,1671,1672,1674,1677,1680,1683,1686,1689,1692],{},[1403,1673,151],{},[1403,1675,1676],{},"VT",[1403,1678,1679],{},"43",[1403,1681,1682],{},"+",[1403,1684,1685],{},"75",[1403,1687,1688],{},"K",[1403,1690,1691],{},"107",[1403,1693,1694],{},"k",[1358,1696,1697,1700,1703,1706,1708,1711,1714,1717],{},[1403,1698,1699],{},"12",[1403,1701,1702],{},"FF",[1403,1704,1705],{},"44",[1403,1707,60],{},[1403,1709,1710],{},"76",[1403,1712,1713],{},"L",[1403,1715,1716],{},"108",[1403,1718,1719],{},"l",[1358,1721,1722,1724,1727,1730,1733,1736,1739,1742],{},[1403,1723,156],{},[1403,1725,1726],{},"CR",[1403,1728,1729],{},"45",[1403,1731,1732],{},"-",[1403,1734,1735],{},"77",[1403,1737,1738],{},"M",[1403,1740,1741],{},"109",[1403,1743,1744],{},"m",[1358,1746,1747,1750,1753,1756,1759,1762,1765,1768],{},[1403,1748,1749],{},"14",[1403,1751,1752],{},"SO",[1403,1754,1755],{},"46",[1403,1757,1758],{},".",[1403,1760,1761],{},"78",[1403,1763,1764],{},"N",[1403,1766,1767],{},"110",[1403,1769,1770],{},"n",[1358,1772,1773,1776,1779,1782,1785,1788,1791,1794],{},[1403,1774,1775],{},"15",[1403,1777,1778],{},"SI",[1403,1780,1781],{},"47",[1403,1783,1784],{},"\u002F",[1403,1786,1787],{},"79",[1403,1789,1790],{},"O",[1403,1792,1793],{},"111",[1403,1795,1796],{},"o",[1358,1798,1799,1802,1805,1808,1810,1813,1816,1819],{},[1403,1800,1801],{},"16",[1403,1803,1804],{},"DLE",[1403,1806,1807],{},"48",[1403,1809,260],{},[1403,1811,1812],{},"80",[1403,1814,1815],{},"P",[1403,1817,1818],{},"112",[1403,1820,19],{},[1358,1822,1823,1826,1829,1832,1834,1837,1840,1842],{},[1403,1824,1825],{},"17",[1403,1827,1828],{},"DCI",[1403,1830,1831],{},"49",[1403,1833,57],{},[1403,1835,1836],{},"81",[1403,1838,1839],{},"Q",[1403,1841,226],{},[1403,1843,1844],{},"q",[1358,1846,1847,1850,1853,1856,1858,1861,1864,1867],{},[1403,1848,1849],{},"18",[1403,1851,1852],{},"DC2",[1403,1854,1855],{},"50",[1403,1857,63],{},[1403,1859,1860],{},"82",[1403,1862,1863],{},"R",[1403,1865,1866],{},"114",[1403,1868,1869],{},"r",[1358,1871,1872,1875,1878,1881,1883,1886,1889,1892],{},[1403,1873,1874],{},"19",[1403,1876,1877],{},"DC3",[1403,1879,1880],{},"51",[1403,1882,68],{},[1403,1884,1885],{},"83",[1403,1887,1888],{},"S",[1403,1890,1891],{},"115",[1403,1893,392],{},[1358,1895,1896,1899,1902,1905,1907,1910,1913,1916],{},[1403,1897,1898],{},"20",[1403,1900,1901],{},"DC4",[1403,1903,1904],{},"52",[1403,1906,84],{},[1403,1908,1909],{},"84",[1403,1911,1912],{},"T",[1403,1914,1915],{},"116",[1403,1917,1918],{},"t",[1358,1920,1921,1924,1927,1930,1932,1935,1938,1941],{},[1403,1922,1923],{},"21",[1403,1925,1926],{},"NAK",[1403,1928,1929],{},"53",[1403,1931,89],{},[1403,1933,1934],{},"85",[1403,1936,1937],{},"U",[1403,1939,1940],{},"117",[1403,1942,1943],{},"u",[1358,1945,1946,1949,1952,1955,1957,1960,1963,1966],{},[1403,1947,1948],{},"22",[1403,1950,1951],{},"SYN",[1403,1953,1954],{},"54",[1403,1956,94],{},[1403,1958,1959],{},"86",[1403,1961,1962],{},"V",[1403,1964,1965],{},"118",[1403,1967,1968],{},"v",[1358,1970,1971,1974,1977,1980,1982,1985,1988,1991],{},[1403,1972,1973],{},"23",[1403,1975,1976],{},"TB",[1403,1978,1979],{},"55",[1403,1981,1573],{},[1403,1983,1984],{},"87",[1403,1986,1987],{},"W",[1403,1989,1990],{},"119",[1403,1992,1993],{},"w",[1358,1995,1996,1999,2002,2005,2007,2010,2013,2016],{},[1403,1997,1998],{},"24",[1403,2000,2001],{},"CAN",[1403,2003,2004],{},"56",[1403,2006,1598],{},[1403,2008,2009],{},"88",[1403,2011,2012],{},"X",[1403,2014,2015],{},"120",[1403,2017,2018],{},"x",[1358,2020,2021,2024,2027,2030,2032,2035,2038,2041],{},[1403,2022,2023],{},"25",[1403,2025,2026],{},"EM",[1403,2028,2029],{},"57",[1403,2031,1623],{},[1403,2033,2034],{},"89",[1403,2036,2037],{},"Y",[1403,2039,2040],{},"121",[1403,2042,2043],{},"y",[1358,2045,2046,2049,2052,2055,2058,2061,2064,2067],{},[1403,2047,2048],{},"26",[1403,2050,2051],{},"SUB",[1403,2053,2054],{},"58",[1403,2056,2057],{},":",[1403,2059,2060],{},"90",[1403,2062,2063],{},"Z",[1403,2065,2066],{},"122",[1403,2068,2069],{},"z",[1358,2071,2072,2075,2078,2081,2083,2086,2089,2092],{},[1403,2073,2074],{},"27",[1403,2076,2077],{},"ESC",[1403,2079,2080],{},"59",[1403,2082,1273],{},[1403,2084,2085],{},"91",[1403,2087,2088],{},"[",[1403,2090,2091],{},"123",[1403,2093,2094],{},"{",[1358,2096,2097,2100,2103,2106,2109,2112,2114,2117],{},[1403,2098,2099],{},"28",[1403,2101,2102],{},"FS",[1403,2104,2105],{},"60",[1403,2107,2108],{},"\u003C",[1403,2110,2111],{},"92",[1403,2113,1784],{},[1403,2115,2116],{},"124",[1403,2118,2119],{},"|",[1358,2121,2122,2125,2128,2131,2133,2136,2139,2142],{},[1403,2123,2124],{},"29",[1403,2126,2127],{},"GS",[1403,2129,2130],{},"61",[1403,2132,50],{},[1403,2134,2135],{},"93",[1403,2137,2138],{},"]",[1403,2140,2141],{},"125",[1403,2143,2144],{},"}",[1358,2146,2147,2150,2153,2156,2159,2162,2165,2168],{},[1403,2148,2149],{},"30",[1403,2151,2152],{},"RS",[1403,2154,2155],{},"62",[1403,2157,2158],{},">",[1403,2160,2161],{},"94",[1403,2163,2164],{},"^",[1403,2166,2167],{},"126",[1403,2169,2170],{},"`",[1358,2172,2173,2176,2179,2182,2185,2188,2191,2194],{},[1403,2174,2175],{},"31",[1403,2177,2178],{},"US",[1403,2180,2181],{},"63",[1403,2183,2184],{},"?",[1403,2186,2187],{},"95",[1403,2189,2190],{},"_",[1403,2192,2193],{},"127",[1403,2195,2196],{},"DEL",[19,2198,2199,2200,2203],{},"ASCII 码大致由以下",[304,2201,2202],{},"两部分组","成：",[2205,2206,2207,2214],"ul",{},[1174,2208,2209,2210,2213],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[304,2211,2212],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[1174,2215,2216,2217,2220],{},"ASCII 打印字符：数字 ",[304,2218,2219],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[1188,2222,2224],{"id":2223},"_134转义字符","1.3.4转义字符",[29,2226,2228],{"className":1209,"code":2227,"language":1211,"meta":34,"style":34},"\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",[36,2229,2230,2235,2251,2265,2270,2283,2288],{"__ignoreMap":34},[39,2231,2232],{"class":41,"line":42},[39,2233,2234],{"class":102},"\u002F\u002F换行符\n",[39,2236,2237,2240,2243,2246,2248],{"class":41,"line":74},[39,2238,2239],{"class":45},"cout ",[39,2241,2242],{"class":49},"\u003C\u003C",[39,2244,2245],{"class":1319},"\"hello world\u002Fn\"",[39,2247,1273],{"class":45},[39,2249,2250],{"class":102}," \u002F\u002F就等同于如下：\n",[39,2252,2253,2255,2257,2260,2262],{"class":41,"line":99},[39,2254,2239],{"class":45},[39,2256,2242],{"class":49},[39,2258,2259],{"class":1319},"\"hello world\"",[39,2261,2242],{"class":49},[39,2263,2264],{"class":45},"endl;\n",[39,2266,2267],{"class":41,"line":106},[39,2268,2269],{"class":102},"\u002F\u002F反斜杠\n",[39,2271,2272,2274,2276,2279,2281],{"class":41,"line":112},[39,2273,2239],{"class":45},[39,2275,2242],{"class":49},[39,2277,2278],{"class":1319},"\"\u002F\u002F\"",[39,2280,2242],{"class":49},[39,2282,2264],{"class":45},[39,2284,2285],{"class":41,"line":118},[39,2286,2287],{"class":102},"\u002F\u002F水平制表符\n",[39,2289,2290,2292,2294,2297,2300,2303,2305,2308],{"class":41,"line":413},[39,2291,2239],{"class":45},[39,2293,2242],{"class":49},[39,2295,2296],{"class":1319},"\"aaaa",[39,2298,2299],{"class":56},"\\t",[39,2301,2302],{"class":1319},"helloworld\"",[39,2304,2242],{"class":49},[39,2306,2307],{"class":45},"endl;",[39,2309,2310],{"class":102}," \u002F\u002F输出窗口时有对齐效果\n",[1188,2312,2314],{"id":2313},"_135字符串型","1.3.5字符串型",[19,2316,2317,2318,2320],{},"char 变量名",[39,2319],{},"=\"字符串值\"",[29,2322,2324],{"className":1209,"code":2323,"language":1211,"meta":34,"style":34},"\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",[36,2325,2326,2331,2336,2341,2346,2360,2373,2378,2383,2394],{"__ignoreMap":34},[39,2327,2328],{"class":41,"line":42},[39,2329,2330],{"class":102},"\u002F\u002Fc风格字符串\n",[39,2332,2333],{"class":41,"line":74},[39,2334,2335],{"class":102},"\u002F\u002F注意事项：\n",[39,2337,2338],{"class":41,"line":99},[39,2339,2340],{"class":102},"\u002F\u002F1.char字符串名[]\n",[39,2342,2343],{"class":41,"line":106},[39,2344,2345],{"class":102},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[39,2347,2348,2350,2353,2355,2357],{"class":41,"line":112},[39,2349,1311],{"class":49},[39,2351,2352],{"class":45}," str[]",[39,2354,50],{"class":49},[39,2356,2259],{"class":1319},[39,2358,2359],{"class":45},";\n",[39,2361,2362,2364,2366,2369,2371],{"class":41,"line":118},[39,2363,2239],{"class":45},[39,2365,2242],{"class":49},[39,2367,2368],{"class":45},"str",[39,2370,2242],{"class":49},[39,2372,2264],{"class":45},[39,2374,2375],{"class":41,"line":413},[39,2376,2377],{"class":102},"\u002F\u002Fc++风格字符串\n",[39,2379,2380],{"class":41,"line":419},[39,2381,2382],{"class":102},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[39,2384,2385,2388,2390,2392],{"class":41,"line":425},[39,2386,2387],{"class":45},"string str2",[39,2389,50],{"class":49},[39,2391,2259],{"class":1319},[39,2393,2359],{"class":45},[39,2395,2396,2398,2400,2403,2405],{"class":41,"line":443},[39,2397,2239],{"class":45},[39,2399,2242],{"class":49},[39,2401,2402],{"class":45},"str2",[39,2404,2242],{"class":49},[39,2406,2264],{"class":45},[1188,2408,2410],{"id":2409},"_136布尔类型bool","1.3.6布尔类型bool",[29,2412,2414],{"className":1209,"code":2413,"language":1211,"meta":34,"style":34},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[36,2415,2416,2431],{"__ignoreMap":34},[39,2417,2418,2421,2424,2426,2429],{"class":41,"line":42},[39,2419,2420],{"class":49},"bool",[39,2422,2423],{"class":45}," flag",[39,2425,50],{"class":49},[39,2427,2428],{"class":56},"true",[39,2430,2359],{"class":45},[39,2432,2433,2436,2439,2442,2444,2446],{"class":41,"line":74},[39,2434,2435],{"class":45},"cout",[39,2437,2438],{"class":49},"\u003C\u003Csizeof",[39,2440,2441],{"class":45},"(flag)",[39,2443,2242],{"class":49},[39,2445,2307],{"class":45},[39,2447,2448],{"class":102}," \u002F\u002F查看布尔占内存空间\n",[14,2450,2452],{"id":2451},"_14键盘输入cin","1.4键盘输入cin",[29,2454,2456],{"className":1209,"code":2455,"language":1211,"meta":34,"style":34},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[36,2457,2458,2471,2488,2499],{"__ignoreMap":34},[39,2459,2460,2462,2465,2467,2469],{"class":41,"line":42},[39,2461,1224],{"class":49},[39,2463,2464],{"class":45}," a",[39,2466,50],{"class":49},[39,2468,260],{"class":56},[39,2470,2359],{"class":45},[39,2472,2473,2475,2477,2480,2482,2484,2486],{"class":41,"line":74},[39,2474,2435],{"class":45},[39,2476,2242],{"class":49},[39,2478,2479],{"class":1319},"\"请给整型变量a赋值\"",[39,2481,2242],{"class":49},[39,2483,46],{"class":45},[39,2485,2242],{"class":49},[39,2487,2264],{"class":45},[39,2489,2490,2493,2496],{"class":41,"line":99},[39,2491,2492],{"class":45},"cin ",[39,2494,2495],{"class":49},">>",[39,2497,2498],{"class":45}," a;\n",[39,2500,2501,2503,2505,2508,2511,2513,2515],{"class":41,"line":106},[39,2502,2239],{"class":45},[39,2504,2242],{"class":49},[39,2506,2507],{"class":1319}," \"整型变量a=\"",[39,2509,2510],{"class":49}," \u003C\u003C",[39,2512,46],{"class":45},[39,2514,2242],{"class":49},[39,2516,2264],{"class":45},[14,2518,2520],{"id":2519},"_15运算符","1.5运算符",[1188,2522,2524],{"id":2523},"_151算术运算符","1.5.1算术运算符",[19,2526,2527,2530],{},[269,2528],{"alt":34,"src":2529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[1171,2532,2533,2536,2539],{},[1174,2534,2535],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[1174,2537,2538],{},"两个小数不可以做取模运算",[1174,2540,2541],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[1188,2543,2545],{"id":2544},"_152赋值运算符","1.5.2赋值运算符",[19,2547,2548],{},[269,2549],{"alt":34,"src":2550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[1188,2552,2554],{"id":2553},"_153比较运算符","1.5.3比较运算符",[19,2556,2557],{},[269,2558],{"alt":34,"src":2559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[1188,2561,2563],{"id":2562},"_154逻辑运算符","1.5.4逻辑运算符",[19,2565,2566],{},[269,2567],{"alt":34,"src":2568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,2570,2572],{"id":2571},"_16程序流程结构","1.6程序流程结构",[1188,2574,2576],{"id":2575},"_161选择结构","1.6.1选择结构",[1171,2578,2579],{},[1174,2580,2581],{},"if语句\n单行、多行、多条件if语句",[29,2583,2585],{"className":1209,"code":2584,"language":1211,"meta":34,"style":34},"\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",[36,2586,2587,2592,2607,2612,2626,2631,2636,2645,2658,2662,2675,2679,2684,2688,2701,2705,2710,2730,2735,2749,2754,2783,2788,2805,2810,2815,2820,2834,2839],{"__ignoreMap":34},[39,2588,2589],{"class":41,"line":42},[39,2590,2591],{"class":102},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[39,2593,2594,2597,2600,2602,2605],{"class":41,"line":74},[39,2595,2596],{"class":49},"if",[39,2598,2599],{"class":45},"(score",[39,2601,2158],{"class":49},[39,2603,2604],{"class":56},"600",[39,2606,209],{"class":45},[39,2608,2609],{"class":41,"line":99},[39,2610,2611],{"class":45},"{\n",[39,2613,2614,2617,2619,2622,2624],{"class":41,"line":106},[39,2615,2616],{"class":45},"    cout",[39,2618,2242],{"class":49},[39,2620,2621],{"class":1319},"'这是单行if语句'",[39,2623,2242],{"class":49},[39,2625,2264],{"class":45},[39,2627,2628],{"class":41,"line":112},[39,2629,2630],{"class":45},"}\n",[39,2632,2633],{"class":41,"line":118},[39,2634,2635],{"class":102},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[39,2637,2638,2640,2642],{"class":41,"line":413},[39,2639,2492],{"class":45},[39,2641,2495],{"class":49},[39,2643,2644],{"class":45}," score\n",[39,2646,2647,2649,2651,2654,2656],{"class":41,"line":419},[39,2648,2596],{"class":49},[39,2650,2599],{"class":45},[39,2652,2653],{"class":49},"\u003C=",[39,2655,2604],{"class":56},[39,2657,209],{"class":45},[39,2659,2660],{"class":41,"line":425},[39,2661,2611],{"class":45},[39,2663,2664,2666,2668,2671,2673],{"class":41,"line":443},[39,2665,2616],{"class":45},[39,2667,2495],{"class":49},[39,2669,2670],{"class":1319},"\"小于等于600\"",[39,2672,2242],{"class":49},[39,2674,2264],{"class":45},[39,2676,2677],{"class":41,"line":449},[39,2678,2630],{"class":45},[39,2680,2681],{"class":41,"line":455},[39,2682,2683],{"class":49},"else\n",[39,2685,2686],{"class":41,"line":461},[39,2687,2611],{"class":45},[39,2689,2690,2692,2694,2697,2699],{"class":41,"line":475},[39,2691,2616],{"class":45},[39,2693,2495],{"class":49},[39,2695,2696],{"class":1319},"\"大于600\"",[39,2698,2495],{"class":49},[39,2700,2264],{"class":45},[39,2702,2703],{"class":41,"line":665},[39,2704,2630],{"class":45},[39,2706,2707],{"class":41,"line":671},[39,2708,2709],{"class":102},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[39,2711,2712,2714,2717,2719,2721,2724,2726,2728],{"class":41,"line":684},[39,2713,2596],{"class":49},[39,2715,2716],{"class":45}," (",[39,2718,260],{"class":56},[39,2720,2108],{"class":49},[39,2722,2723],{"class":45},"num",[39,2725,2108],{"class":49},[39,2727,1519],{"class":56},[39,2729,209],{"class":45},[39,2731,2733],{"class":41,"line":2732},18,[39,2734,2611],{"class":45},[39,2736,2738,2740,2742,2745,2747],{"class":41,"line":2737},19,[39,2739,2616],{"class":45},[39,2741,2242],{"class":49},[39,2743,2744],{"class":1319},"\"小于100\"",[39,2746,2242],{"class":49},[39,2748,2264],{"class":45},[39,2750,2752],{"class":41,"line":2751},20,[39,2753,2630],{"class":45},[39,2755,2757,2760,2763,2766,2769,2771,2774,2776,2778,2781],{"class":41,"line":2756},21,[39,2758,2759],{"class":49},"else",[39,2761,2762],{"class":49}," if",[39,2764,2765],{"class":45}," (nmu",[39,2767,2768],{"class":49},">=",[39,2770,1519],{"class":56},[39,2772,2773],{"class":49},"&&",[39,2775,2723],{"class":45},[39,2777,2108],{"class":49},[39,2779,2780],{"class":56},"200",[39,2782,209],{"class":45},[39,2784,2786],{"class":41,"line":2785},22,[39,2787,2611],{"class":45},[39,2789,2791,2793,2795,2798,2800,2802],{"class":41,"line":2790},23,[39,2792,2616],{"class":45},[39,2794,2242],{"class":49},[39,2796,2797],{"class":1319},"\"不小于100且小于200\"",[39,2799,2242],{"class":49},[39,2801,2307],{"class":45},[39,2803,2804],{"class":102}," \u002F\u002F可以无限else if,python中是elif：\n",[39,2806,2808],{"class":41,"line":2807},24,[39,2809,2630],{"class":45},[39,2811,2813],{"class":41,"line":2812},25,[39,2814,2683],{"class":49},[39,2816,2818],{"class":41,"line":2817},26,[39,2819,2611],{"class":45},[39,2821,2823,2825,2827,2830,2832],{"class":41,"line":2822},27,[39,2824,2616],{"class":45},[39,2826,2242],{"class":49},[39,2828,2829],{"class":1319},"\"不小于200\"",[39,2831,2242],{"class":49},[39,2833,2264],{"class":45},[39,2835,2837],{"class":41,"line":2836},28,[39,2838,2630],{"class":45},[39,2840,2842],{"class":41,"line":2841},29,[39,2843,2844],{"class":102},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[1171,2846,2847],{"start":74},[1174,2848,2849],{},"三目运算符",[29,2851,2853],{"className":1209,"code":2852,"language":1211,"meta":34,"style":34},"\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",[36,2854,2855,2860,2865,2891,2913,2930,2935,2958,2973],{"__ignoreMap":34},[39,2856,2857],{"class":41,"line":42},[39,2858,2859],{"class":102},"\u002F\u002F创建三个变量a,b,c\n",[39,2861,2862],{"class":41,"line":74},[39,2863,2864],{"class":102},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[39,2866,2867,2869,2871,2873,2875,2878,2880,2882,2885,2887,2889],{"class":41,"line":99},[39,2868,1224],{"class":49},[39,2870,2464],{"class":45},[39,2872,50],{"class":49},[39,2874,1898],{"class":56},[39,2876,2877],{"class":45},",b",[39,2879,50],{"class":49},[39,2881,146],{"class":56},[39,2883,2884],{"class":45},",c",[39,2886,50],{"class":49},[39,2888,260],{"class":56},[39,2890,2359],{"class":45},[39,2892,2893,2895,2897,2900,2902,2904,2906,2908,2910],{"class":41,"line":106},[39,2894,139],{"class":45},[39,2896,50],{"class":49},[39,2898,2899],{"class":45},"(a",[39,2901,2158],{"class":49},[39,2903,77],{"class":45},[39,2905,2184],{"class":49},[39,2907,46],{"class":45},[39,2909,2057],{"class":49},[39,2911,2912],{"class":45},"b)\n",[39,2914,2915,2917,2919,2922,2924,2926,2928],{"class":41,"line":112},[39,2916,2435],{"class":45},[39,2918,2242],{"class":49},[39,2920,2921],{"class":1319},"\"c=\"",[39,2923,2242],{"class":49},[39,2925,139],{"class":45},[39,2927,2242],{"class":49},[39,2929,2264],{"class":45},[39,2931,2932],{"class":41,"line":118},[39,2933,2934],{"class":102},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[39,2936,2937,2939,2941,2943,2945,2947,2949,2952,2954,2956],{"class":41,"line":413},[39,2938,2899],{"class":45},[39,2940,2158],{"class":49},[39,2942,77],{"class":45},[39,2944,2184],{"class":49},[39,2946,46],{"class":45},[39,2948,2057],{"class":49},[39,2950,2951],{"class":45},"b)",[39,2953,50],{"class":49},[39,2955,1519],{"class":56},[39,2957,2359],{"class":45},[39,2959,2960,2962,2964,2966,2968,2970],{"class":41,"line":419},[39,2961,2435],{"class":45},[39,2963,2242],{"class":49},[39,2965,46],{"class":45},[39,2967,2242],{"class":49},[39,2969,2307],{"class":45},[39,2971,2972],{"class":102}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[39,2974,2975,2977,2979,2981,2983,2985],{"class":41,"line":425},[39,2976,2435],{"class":45},[39,2978,2242],{"class":49},[39,2980,77],{"class":45},[39,2982,2242],{"class":49},[39,2984,2307],{"class":45},[39,2986,2987],{"class":102}," \u002F\u002F10   a>b,b还是原值\n",[1171,2989,2990],{"start":99},[1174,2991,2992],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[29,2994,2996],{"className":1209,"code":2995,"language":1211,"meta":34,"style":34},"\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",[36,2997,2998,3003,3011,3025,3035,3039,3053,3066,3076,3084,3089,3114,3135,3157,3178,3200,3221,3241,3246],{"__ignoreMap":34},[39,2999,3000],{"class":41,"line":42},[39,3001,3002],{"class":102},"\u002F\u002F案例-电影打分\n",[39,3004,3005,3008],{"class":41,"line":74},[39,3006,3007],{"class":49},"#include",[39,3009,3010],{"class":1319},"\u003Ciostream>\n",[39,3012,3013,3016,3019,3023],{"class":41,"line":99},[39,3014,3015],{"class":49},"using",[39,3017,3018],{"class":49}," namespace",[39,3020,3022],{"class":3021},"sScJk"," std",[39,3024,2359],{"class":45},[39,3026,3027,3029,3032],{"class":41,"line":106},[39,3028,1224],{"class":49},[39,3030,3031],{"class":3021}," main",[39,3033,3034],{"class":45},"()\n",[39,3036,3037],{"class":41,"line":112},[39,3038,2611],{"class":45},[39,3040,3041,3044,3047,3049,3051],{"class":41,"line":118},[39,3042,3043],{"class":49},"    int",[39,3045,3046],{"class":45}," score",[39,3048,50],{"class":49},[39,3050,260],{"class":56},[39,3052,2359],{"class":45},[39,3054,3055,3057,3059,3062,3064],{"class":41,"line":413},[39,3056,2616],{"class":45},[39,3058,2242],{"class":49},[39,3060,3061],{"class":1319},"\"电影打分：\"",[39,3063,2242],{"class":49},[39,3065,2264],{"class":45},[39,3067,3068,3071,3073],{"class":41,"line":419},[39,3069,3070],{"class":45},"    cin",[39,3072,2495],{"class":49},[39,3074,3075],{"class":45},"score;\n",[39,3077,3078,3081],{"class":41,"line":425},[39,3079,3080],{"class":49},"    switch",[39,3082,3083],{"class":45},"(score)\n",[39,3085,3086],{"class":41,"line":443},[39,3087,3088],{"class":45},"    {\n",[39,3090,3091,3094,3097,3100,3102,3105,3107,3109,3112],{"class":41,"line":449},[39,3092,3093],{"class":49},"        case",[39,3095,3096],{"class":56}," 10",[39,3098,3099],{"class":45},":cout",[39,3101,2242],{"class":49},[39,3103,3104],{"class":1319},"\"经典\"",[39,3106,2242],{"class":49},[39,3108,2307],{"class":45},[39,3110,3111],{"class":49},"break",[39,3113,2359],{"class":45},[39,3115,3116,3118,3121,3123,3125,3127,3129,3131,3133],{"class":41,"line":455},[39,3117,3093],{"class":49},[39,3119,3120],{"class":56}," 9",[39,3122,3099],{"class":45},[39,3124,2242],{"class":49},[39,3126,3104],{"class":1319},[39,3128,2242],{"class":49},[39,3130,2307],{"class":45},[39,3132,3111],{"class":49},[39,3134,2359],{"class":45},[39,3136,3137,3139,3142,3144,3146,3149,3151,3153,3155],{"class":41,"line":461},[39,3138,3093],{"class":49},[39,3140,3141],{"class":56}," 8",[39,3143,3099],{"class":45},[39,3145,2242],{"class":49},[39,3147,3148],{"class":1319},"\"非常好\"",[39,3150,2242],{"class":49},[39,3152,2307],{"class":45},[39,3154,3111],{"class":49},[39,3156,2359],{"class":45},[39,3158,3159,3161,3164,3166,3168,3170,3172,3174,3176],{"class":41,"line":475},[39,3160,3093],{"class":49},[39,3162,3163],{"class":56}," 7",[39,3165,3099],{"class":45},[39,3167,2242],{"class":49},[39,3169,3148],{"class":1319},[39,3171,2242],{"class":49},[39,3173,2307],{"class":45},[39,3175,3111],{"class":49},[39,3177,2359],{"class":45},[39,3179,3180,3182,3185,3187,3189,3192,3194,3196,3198],{"class":41,"line":665},[39,3181,3093],{"class":49},[39,3183,3184],{"class":56}," 6",[39,3186,3099],{"class":45},[39,3188,2242],{"class":49},[39,3190,3191],{"class":1319},"\"一般\"",[39,3193,2242],{"class":49},[39,3195,2307],{"class":45},[39,3197,3111],{"class":49},[39,3199,2359],{"class":45},[39,3201,3202,3204,3207,3209,3211,3213,3215,3217,3219],{"class":41,"line":671},[39,3203,3093],{"class":49},[39,3205,3206],{"class":56}," 5",[39,3208,3099],{"class":45},[39,3210,2242],{"class":49},[39,3212,3191],{"class":1319},[39,3214,2242],{"class":49},[39,3216,2307],{"class":45},[39,3218,3111],{"class":49},[39,3220,2359],{"class":45},[39,3222,3223,3226,3228,3230,3233,3235,3237,3239],{"class":41,"line":684},[39,3224,3225],{"class":49},"        default",[39,3227,3099],{"class":45},[39,3229,2242],{"class":49},[39,3231,3232],{"class":1319},"\"烂片\"",[39,3234,2242],{"class":49},[39,3236,2307],{"class":45},[39,3238,3111],{"class":49},[39,3240,2359],{"class":45},[39,3242,3243],{"class":41,"line":2732},[39,3244,3245],{"class":45},"    }\n",[39,3247,3248],{"class":41,"line":2737},[39,3249,2630],{"class":45},[19,3251,3252],{},"if和switch区别：",[2205,3254,3255,3258],{},[1174,3256,3257],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[1174,3259,3260],{},"switch优点：结构清晰，执行效率高",[1188,3262,3264],{"id":3263},"_162循环结构","1.6.2循环结构",[1171,3266,3267],{},[1174,3268,3269],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[29,3271,3273],{"className":1209,"code":3272,"language":1211,"meta":34,"style":34},"\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",[36,3274,3275,3280,3288,3292,3305,3319,3323,3343,3353,3357,3369],{"__ignoreMap":34},[39,3276,3277],{"class":41,"line":42},[39,3278,3279],{"class":102},"\u002F\u002F打印0-9数字\n",[39,3281,3282,3284,3286],{"class":41,"line":74},[39,3283,1224],{"class":49},[39,3285,3031],{"class":3021},[39,3287,3034],{"class":45},[39,3289,3290],{"class":41,"line":99},[39,3291,2611],{"class":45},[39,3293,3294,3296,3299,3301,3303],{"class":41,"line":106},[39,3295,3043],{"class":49},[39,3297,3298],{"class":45}," num",[39,3300,50],{"class":49},[39,3302,260],{"class":56},[39,3304,2359],{"class":45},[39,3306,3307,3310,3313,3315,3317],{"class":41,"line":112},[39,3308,3309],{"class":49},"    while",[39,3311,3312],{"class":45},"(num",[39,3314,2108],{"class":49},[39,3316,146],{"class":56},[39,3318,209],{"class":45},[39,3320,3321],{"class":41,"line":118},[39,3322,3088],{"class":45},[39,3324,3325,3328,3331,3333,3335,3337,3340],{"class":41,"line":413},[39,3326,3327],{"class":3021},"       std",[39,3329,3330],{"class":45},"::cout",[39,3332,2242],{"class":49},[39,3334,2723],{"class":45},[39,3336,2242],{"class":49},[39,3338,3339],{"class":3021},"std",[39,3341,3342],{"class":45},"::endl;\n",[39,3344,3345,3348,3351],{"class":41,"line":419},[39,3346,3347],{"class":45},"        num",[39,3349,3350],{"class":49},"++",[39,3352,2359],{"class":45},[39,3354,3355],{"class":41,"line":425},[39,3356,3245],{"class":45},[39,3358,3359,3362,3364,3367],{"class":41,"line":443},[39,3360,3361],{"class":3021},"    system",[39,3363,1221],{"class":45},[39,3365,3366],{"class":1319},"\"pause\"",[39,3368,209],{"class":45},[39,3370,3371],{"class":41,"line":449},[39,3372,2630],{"class":45},[19,3374,3375],{},"注意：写好循环条件，避免死循环情况",[29,3377,3379],{"className":1209,"code":3378,"language":1211,"meta":34,"style":34},"\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",[36,3380,3381,3386,3393,3400,3410,3418,3422,3427,3454,3459,3464,3472,3499,3504,3509,3522,3532,3536,3546,3551,3564,3569,3583,3588,3603,3607,3620,3624,3629,3633,3647,3655,3660,3666,3672,3677],{"__ignoreMap":34},[39,3382,3383],{"class":41,"line":42},[39,3384,3385],{"class":102},"\u002F\u002F循环结构-猜数字\n",[39,3387,3388,3390],{"class":41,"line":74},[39,3389,3007],{"class":49},[39,3391,3392],{"class":1319}," \u003Ciostream>\n",[39,3394,3395,3397],{"class":41,"line":99},[39,3396,3007],{"class":49},[39,3398,3399],{"class":1319}," \u003Cctime>\n",[39,3401,3402,3404,3406,3408],{"class":41,"line":106},[39,3403,3015],{"class":49},[39,3405,3018],{"class":49},[39,3407,3022],{"class":3021},[39,3409,2359],{"class":45},[39,3411,3412,3414,3416],{"class":41,"line":112},[39,3413,1224],{"class":49},[39,3415,3031],{"class":3021},[39,3417,3034],{"class":45},[39,3419,3420],{"class":41,"line":118},[39,3421,2611],{"class":45},[39,3423,3424],{"class":41,"line":413},[39,3425,3426],{"class":102},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[39,3428,3429,3432,3435,3438,3441,3443,3446,3448,3451],{"class":41,"line":419},[39,3430,3431],{"class":3021},"    srand",[39,3433,3434],{"class":45},"((",[39,3436,3437],{"class":49},"unsigned",[39,3439,3440],{"class":49}," int",[39,3442,1632],{"class":45},[39,3444,3445],{"class":3021},"time",[39,3447,1221],{"class":45},[39,3449,3450],{"class":56},"NULL",[39,3452,3453],{"class":45},"));\n",[39,3455,3456],{"class":41,"line":425},[39,3457,3458],{"emptyLinePlaceholder":1145},"\n",[39,3460,3461],{"class":41,"line":443},[39,3462,3463],{"class":102},"    \u002F\u002F1.系统生成随机数\n",[39,3465,3466,3469],{"class":41,"line":449},[39,3467,3468],{"class":102},"    \u002F\u002Frand()%100",[39,3470,3471],{"class":102}," \u002F\u002F生成0-99的随机数\n",[39,3473,3474,3476,3478,3480,3483,3486,3488,3490,3492,3494,3496],{"class":41,"line":455},[39,3475,3043],{"class":49},[39,3477,3298],{"class":45},[39,3479,50],{"class":49},[39,3481,3482],{"class":3021},"rand",[39,3484,3485],{"class":45},"()",[39,3487,1534],{"class":49},[39,3489,1519],{"class":56},[39,3491,1682],{"class":49},[39,3493,57],{"class":56},[39,3495,1273],{"class":45},[39,3497,3498],{"class":102}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[39,3500,3501],{"class":41,"line":461},[39,3502,3503],{"class":102},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[39,3505,3506],{"class":41,"line":475},[39,3507,3508],{"class":102},"    \u002F\u002F2.玩家猜测\n",[39,3510,3511,3513,3516,3518,3520],{"class":41,"line":665},[39,3512,3043],{"class":49},[39,3514,3515],{"class":45}," val",[39,3517,50],{"class":49},[39,3519,260],{"class":56},[39,3521,2359],{"class":45},[39,3523,3524,3526,3528,3530],{"class":41,"line":671},[39,3525,3309],{"class":49},[39,3527,2716],{"class":45},[39,3529,57],{"class":56},[39,3531,209],{"class":45},[39,3533,3534],{"class":41,"line":684},[39,3535,3088],{"class":45},[39,3537,3538,3541,3543],{"class":41,"line":2732},[39,3539,3540],{"class":45},"        cin",[39,3542,2495],{"class":49},[39,3544,3545],{"class":45},"val;\n",[39,3547,3548],{"class":41,"line":2737},[39,3549,3550],{"class":102},"        \u002F\u002F3.判断玩家猜测\n",[39,3552,3553,3556,3559,3561],{"class":41,"line":2751},[39,3554,3555],{"class":49},"        if",[39,3557,3558],{"class":45},"(val",[39,3560,2108],{"class":49},[39,3562,3563],{"class":45},"num) \n",[39,3565,3566],{"class":41,"line":2756},[39,3567,3568],{"class":45},"        {\n",[39,3570,3571,3574,3576,3579,3581],{"class":41,"line":2785},[39,3572,3573],{"class":45},"            cout",[39,3575,2242],{"class":49},[39,3577,3578],{"class":1319},"\"猜小了！\"",[39,3580,2242],{"class":49},[39,3582,2264],{"class":45},[39,3584,3585],{"class":41,"line":2790},[39,3586,3587],{"class":45},"        }\n",[39,3589,3590,3593,3595,3598,3600],{"class":41,"line":2807},[39,3591,3592],{"class":49},"        else",[39,3594,2762],{"class":49},[39,3596,3597],{"class":45}," (val",[39,3599,2158],{"class":49},[39,3601,3602],{"class":45},"num)\n",[39,3604,3605],{"class":41,"line":2812},[39,3606,3568],{"class":45},[39,3608,3609,3611,3613,3616,3618],{"class":41,"line":2817},[39,3610,3573],{"class":45},[39,3612,2242],{"class":49},[39,3614,3615],{"class":1319},"\"猜大了！\"",[39,3617,2242],{"class":49},[39,3619,2264],{"class":45},[39,3621,3622],{"class":41,"line":2822},[39,3623,3587],{"class":45},[39,3625,3626],{"class":41,"line":2836},[39,3627,3628],{"class":49},"        else\n",[39,3630,3631],{"class":41,"line":2841},[39,3632,3568],{"class":45},[39,3634,3636,3638,3640,3643,3645],{"class":41,"line":3635},30,[39,3637,3573],{"class":45},[39,3639,2242],{"class":49},[39,3641,3642],{"class":1319},"\"猜对了！\"",[39,3644,2242],{"class":49},[39,3646,2264],{"class":45},[39,3648,3650,3653],{"class":41,"line":3649},31,[39,3651,3652],{"class":49},"            break",[39,3654,2359],{"class":45},[39,3656,3658],{"class":41,"line":3657},32,[39,3659,3587],{"class":45},[39,3661,3663],{"class":41,"line":3662},33,[39,3664,3665],{"class":102},"        \u002F\u002F猜对 退出游戏\n",[39,3667,3669],{"class":41,"line":3668},34,[39,3670,3671],{"class":102},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[39,3673,3675],{"class":41,"line":3674},35,[39,3676,3245],{"class":45},[39,3678,3680],{"class":41,"line":3679},36,[39,3681,2630],{"class":45},[1171,3683,3684],{"start":74},[1174,3685,3686,3687,3690],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[304,3688,3689],{},"do...while会先执行一次循环语句","，在判断循环语句",[29,3692,3694],{"className":1209,"code":3693,"language":1211,"meta":34,"style":34},"\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",[36,3695,3696,3701,3709,3713,3725,3733,3737,3754,3761,3765,3778,3788],{"__ignoreMap":34},[39,3697,3698],{"class":41,"line":42},[39,3699,3700],{"class":102},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[39,3702,3703,3705,3707],{"class":41,"line":74},[39,3704,1224],{"class":49},[39,3706,3031],{"class":3021},[39,3708,3034],{"class":45},[39,3710,3711],{"class":41,"line":99},[39,3712,2611],{"class":45},[39,3714,3715,3717,3719,3721,3723],{"class":41,"line":106},[39,3716,3043],{"class":49},[39,3718,3298],{"class":45},[39,3720,50],{"class":49},[39,3722,260],{"class":56},[39,3724,2359],{"class":45},[39,3726,3727,3730],{"class":41,"line":112},[39,3728,3729],{"class":49},"    do",[39,3731,3732],{"class":45}," \n",[39,3734,3735],{"class":41,"line":118},[39,3736,3088],{"class":45},[39,3738,3739,3742,3744,3746,3748,3750,3752],{"class":41,"line":413},[39,3740,3741],{"class":3021},"        std",[39,3743,3330],{"class":45},[39,3745,2242],{"class":49},[39,3747,2723],{"class":45},[39,3749,2242],{"class":49},[39,3751,3339],{"class":3021},[39,3753,3342],{"class":45},[39,3755,3756,3758],{"class":41,"line":419},[39,3757,3347],{"class":45},[39,3759,3760],{"class":49},"++\n",[39,3762,3763],{"class":41,"line":425},[39,3764,3245],{"class":45},[39,3766,3767,3769,3771,3773,3775],{"class":41,"line":443},[39,3768,3309],{"class":49},[39,3770,3312],{"class":45},[39,3772,2108],{"class":49},[39,3774,146],{"class":56},[39,3776,3777],{"class":45},");\n",[39,3779,3780,3782,3784,3786],{"class":41,"line":449},[39,3781,3361],{"class":3021},[39,3783,1221],{"class":45},[39,3785,3366],{"class":1319},[39,3787,3777],{"class":45},[39,3789,3790],{"class":41,"line":455},[39,3791,2630],{"class":45},[19,3793,3794],{},"案例-水仙花数",[19,3796,3797],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,3799,3800],{},"例如：1^3+5^3+3^3=153",[19,3802,3803],{},"请用do...while语句，求出所有3位数的水仙花数",[29,3805,3807],{"className":1209,"code":3806,"language":1211,"meta":34,"style":34},"#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",[36,3808,3809,3815,3825,3833,3837,3842,3854,3860,3864,3869,3885,3901,3917,3932,3951,3966,4014,4018,4030,4034,4042,4046,4060],{"__ignoreMap":34},[39,3810,3811,3813],{"class":41,"line":42},[39,3812,3007],{"class":49},[39,3814,3392],{"class":1319},[39,3816,3817,3819,3821,3823],{"class":41,"line":74},[39,3818,3015],{"class":49},[39,3820,3018],{"class":49},[39,3822,3022],{"class":3021},[39,3824,2359],{"class":45},[39,3826,3827,3829,3831],{"class":41,"line":99},[39,3828,1224],{"class":49},[39,3830,3031],{"class":3021},[39,3832,3034],{"class":45},[39,3834,3835],{"class":41,"line":106},[39,3836,2611],{"class":45},[39,3838,3839],{"class":41,"line":112},[39,3840,3841],{"class":102},"    \u002F\u002F1.先打印所有三位数字\n",[39,3843,3844,3846,3848,3850,3852],{"class":41,"line":118},[39,3845,3043],{"class":49},[39,3847,3298],{"class":45},[39,3849,50],{"class":49},[39,3851,1519],{"class":56},[39,3853,2359],{"class":45},[39,3855,3856,3858],{"class":41,"line":413},[39,3857,3729],{"class":49},[39,3859,3732],{"class":45},[39,3861,3862],{"class":41,"line":419},[39,3863,3088],{"class":45},[39,3865,3866],{"class":41,"line":425},[39,3867,3868],{"class":102},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[39,3870,3871,3874,3876,3878,3880,3882],{"class":41,"line":443},[39,3872,3873],{"class":49},"        int",[39,3875,2464],{"class":45},[39,3877,50],{"class":49},[39,3879,260],{"class":56},[39,3881,1273],{"class":45},[39,3883,3884],{"class":102}," \u002F\u002F个位\n",[39,3886,3887,3889,3892,3894,3896,3898],{"class":41,"line":449},[39,3888,3873],{"class":49},[39,3890,3891],{"class":45}," b",[39,3893,50],{"class":49},[39,3895,260],{"class":56},[39,3897,1273],{"class":45},[39,3899,3900],{"class":102}," \u002F\u002F十位\n",[39,3902,3903,3905,3908,3910,3912,3914],{"class":41,"line":455},[39,3904,3873],{"class":49},[39,3906,3907],{"class":45}," c",[39,3909,50],{"class":49},[39,3911,260],{"class":56},[39,3913,1273],{"class":45},[39,3915,3916],{"class":102}," \u002F\u002F百位\n",[39,3918,3919,3922,3924,3926,3928,3930],{"class":41,"line":461},[39,3920,3921],{"class":45},"        a",[39,3923,50],{"class":49},[39,3925,2723],{"class":45},[39,3927,1534],{"class":49},[39,3929,146],{"class":56},[39,3931,2359],{"class":45},[39,3933,3934,3937,3939,3941,3943,3945,3947,3949],{"class":41,"line":475},[39,3935,3936],{"class":45},"        b",[39,3938,50],{"class":49},[39,3940,2723],{"class":45},[39,3942,1784],{"class":49},[39,3944,146],{"class":56},[39,3946,1534],{"class":49},[39,3948,146],{"class":56},[39,3950,2359],{"class":45},[39,3952,3953,3956,3958,3960,3962,3964],{"class":41,"line":665},[39,3954,3955],{"class":45},"        c",[39,3957,50],{"class":49},[39,3959,2723],{"class":45},[39,3961,1784],{"class":49},[39,3963,1519],{"class":56},[39,3965,2359],{"class":45},[39,3967,3968,3970,3972,3974,3976,3978,3980,3982,3984,3986,3988,3990,3992,3994,3996,3998,4000,4002,4005,4008,4011],{"class":41,"line":671},[39,3969,3555],{"class":49},[39,3971,2899],{"class":45},[39,3973,1657],{"class":49},[39,3975,46],{"class":45},[39,3977,1657],{"class":49},[39,3979,46],{"class":45},[39,3981,1682],{"class":49},[39,3983,77],{"class":45},[39,3985,1657],{"class":49},[39,3987,77],{"class":45},[39,3989,1657],{"class":49},[39,3991,77],{"class":45},[39,3993,1682],{"class":49},[39,3995,139],{"class":45},[39,3997,1657],{"class":49},[39,3999,139],{"class":45},[39,4001,1657],{"class":49},[39,4003,4004],{"class":45},"c ",[39,4006,4007],{"class":49},"==",[39,4009,4010],{"class":45}," num)",[39,4012,4013],{"class":102}," \u002F\u002F如果是水仙花数，才打印\n",[39,4015,4016],{"class":41,"line":684},[39,4017,3568],{"class":45},[39,4019,4020,4022,4024,4026,4028],{"class":41,"line":2732},[39,4021,3573],{"class":45},[39,4023,2242],{"class":49},[39,4025,2723],{"class":45},[39,4027,2242],{"class":49},[39,4029,2264],{"class":45},[39,4031,4032],{"class":41,"line":2737},[39,4033,3587],{"class":45},[39,4035,4036,4038,4040],{"class":41,"line":2751},[39,4037,3347],{"class":45},[39,4039,3350],{"class":49},[39,4041,2359],{"class":45},[39,4043,4044],{"class":41,"line":2756},[39,4045,3245],{"class":45},[39,4047,4048,4050,4053,4055,4058],{"class":41,"line":2785},[39,4049,3309],{"class":49},[39,4051,4052],{"class":45}," (num ",[39,4054,2108],{"class":49},[39,4056,4057],{"class":56}," 1000",[39,4059,3777],{"class":45},[39,4061,4062],{"class":41,"line":2790},[39,4063,2630],{"class":45},[1171,4065,4066],{"start":99},[1174,4067,4068],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[29,4070,4072],{"className":1209,"code":4071,"language":1211,"meta":34,"style":34},"\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",[36,4073,4074,4079,4108,4112,4124,4128,4133,4144,4151,4155,4169,4173,4180,4184,4196,4205],{"__ignoreMap":34},[39,4075,4076],{"class":41,"line":42},[39,4077,4078],{"class":102},"\u002F\u002F从数字0-9打印\n",[39,4080,4081,4084,4086,4088,4091,4093,4095,4098,4100,4102,4104,4106],{"class":41,"line":74},[39,4082,4083],{"class":49},"for",[39,4085,1221],{"class":45},[39,4087,1224],{"class":49},[39,4089,4090],{"class":45}," i",[39,4092,50],{"class":49},[39,4094,260],{"class":56},[39,4096,4097],{"class":45},";i",[39,4099,2108],{"class":49},[39,4101,146],{"class":56},[39,4103,4097],{"class":45},[39,4105,3350],{"class":49},[39,4107,209],{"class":45},[39,4109,4110],{"class":41,"line":99},[39,4111,2611],{"class":45},[39,4113,4114,4116,4118,4120,4122],{"class":41,"line":106},[39,4115,2616],{"class":45},[39,4117,2242],{"class":49},[39,4119,1644],{"class":45},[39,4121,2242],{"class":49},[39,4123,2264],{"class":45},[39,4125,4126],{"class":41,"line":112},[39,4127,2630],{"class":45},[39,4129,4130],{"class":41,"line":118},[39,4131,4132],{"class":102},"\u002F\u002F上式可以进行拆分\n",[39,4134,4135,4137,4139,4141],{"class":41,"line":413},[39,4136,1224],{"class":49},[39,4138,4090],{"class":45},[39,4140,50],{"class":49},[39,4142,4143],{"class":56},"0\n",[39,4145,4146,4148],{"class":41,"line":419},[39,4147,4083],{"class":49},[39,4149,4150],{"class":45},"(;;;)\n",[39,4152,4153],{"class":41,"line":425},[39,4154,2611],{"class":45},[39,4156,4157,4160,4163,4165,4167],{"class":41,"line":443},[39,4158,4159],{"class":49},"    if",[39,4161,4162],{"class":45},"(i",[39,4164,2768],{"class":49},[39,4166,146],{"class":56},[39,4168,209],{"class":45},[39,4170,4171],{"class":41,"line":449},[39,4172,3088],{"class":45},[39,4174,4175,4178],{"class":41,"line":455},[39,4176,4177],{"class":49},"        break",[39,4179,2359],{"class":45},[39,4181,4182],{"class":41,"line":461},[39,4183,3245],{"class":45},[39,4185,4186,4188,4190,4192,4194],{"class":41,"line":475},[39,4187,2616],{"class":45},[39,4189,2242],{"class":49},[39,4191,1644],{"class":45},[39,4193,2242],{"class":49},[39,4195,2264],{"class":45},[39,4197,4198,4201,4203],{"class":41,"line":665},[39,4199,4200],{"class":45},"    i",[39,4202,3350],{"class":49},[39,4204,2359],{"class":45},[39,4206,4207],{"class":41,"line":671},[39,4208,2630],{"class":45},[19,4210,4211],{},"小练习",[29,4213,4215],{"className":1209,"code":4214,"language":1211,"meta":34,"style":34},"#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",[36,4216,4217,4223,4233,4241,4245,4250,4255,4283,4287,4292,4297,4338,4342,4355,4359,4363,4367,4379,4383,4387],{"__ignoreMap":34},[39,4218,4219,4221],{"class":41,"line":42},[39,4220,3007],{"class":49},[39,4222,3010],{"class":1319},[39,4224,4225,4227,4229,4231],{"class":41,"line":74},[39,4226,3015],{"class":49},[39,4228,3018],{"class":49},[39,4230,3022],{"class":3021},[39,4232,2359],{"class":45},[39,4234,4235,4237,4239],{"class":41,"line":99},[39,4236,1224],{"class":49},[39,4238,3031],{"class":3021},[39,4240,3034],{"class":45},[39,4242,4243],{"class":41,"line":106},[39,4244,2611],{"class":45},[39,4246,4247],{"class":41,"line":112},[39,4248,4249],{"class":102},"    \u002F\u002F敲桌子案例\n",[39,4251,4252],{"class":41,"line":118},[39,4253,4254],{"class":102},"    \u002F\u002F1.先输出1-100的数字\n",[39,4256,4257,4260,4262,4264,4266,4268,4270,4273,4275,4277,4279,4281],{"class":41,"line":413},[39,4258,4259],{"class":49},"    for",[39,4261,1221],{"class":45},[39,4263,1224],{"class":49},[39,4265,4090],{"class":45},[39,4267,50],{"class":49},[39,4269,57],{"class":56},[39,4271,4272],{"class":45},"; i",[39,4274,2653],{"class":49},[39,4276,1519],{"class":56},[39,4278,4272],{"class":45},[39,4280,3350],{"class":49},[39,4282,209],{"class":45},[39,4284,4285],{"class":41,"line":419},[39,4286,3088],{"class":45},[39,4288,4289],{"class":41,"line":425},[39,4290,4291],{"class":102},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[39,4293,4294],{"class":41,"line":443},[39,4295,4296],{"class":102},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[39,4298,4299,4301,4303,4305,4307,4309,4311,4314,4316,4318,4320,4322,4324,4326,4328,4330,4332,4334,4336],{"class":41,"line":449},[39,4300,3555],{"class":49},[39,4302,4162],{"class":45},[39,4304,1534],{"class":49},[39,4306,1573],{"class":56},[39,4308,4007],{"class":49},[39,4310,260],{"class":56},[39,4312,4313],{"class":49}," ||",[39,4315,4090],{"class":45},[39,4317,1534],{"class":49},[39,4319,146],{"class":56},[39,4321,4007],{"class":49},[39,4323,1573],{"class":56},[39,4325,4313],{"class":49},[39,4327,4090],{"class":45},[39,4329,1784],{"class":49},[39,4331,146],{"class":56},[39,4333,4007],{"class":49},[39,4335,1573],{"class":56},[39,4337,209],{"class":45},[39,4339,4340],{"class":41,"line":455},[39,4341,3568],{"class":45},[39,4343,4344,4346,4348,4351,4353],{"class":41,"line":461},[39,4345,3573],{"class":45},[39,4347,2242],{"class":49},[39,4349,4350],{"class":1319},"\"敲桌子\"",[39,4352,2242],{"class":49},[39,4354,2264],{"class":45},[39,4356,4357],{"class":41,"line":475},[39,4358,3587],{"class":45},[39,4360,4361],{"class":41,"line":665},[39,4362,3628],{"class":49},[39,4364,4365],{"class":41,"line":671},[39,4366,3568],{"class":45},[39,4368,4369,4371,4373,4375,4377],{"class":41,"line":684},[39,4370,3573],{"class":45},[39,4372,2242],{"class":49},[39,4374,1644],{"class":45},[39,4376,2242],{"class":49},[39,4378,2264],{"class":45},[39,4380,4381],{"class":41,"line":2732},[39,4382,3587],{"class":45},[39,4384,4385],{"class":41,"line":2737},[39,4386,3245],{"class":45},[39,4388,4389],{"class":41,"line":2751},[39,4390,2630],{"class":45},[19,4392,4393],{},"嵌套实现星图",[29,4395,4397],{"className":1209,"code":4396,"language":1211,"meta":34,"style":34},"#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",[36,4398,4399,4405,4415,4423,4427,4453,4457,4486,4490,4501,4505,4514,4518],{"__ignoreMap":34},[39,4400,4401,4403],{"class":41,"line":42},[39,4402,3007],{"class":49},[39,4404,3010],{"class":1319},[39,4406,4407,4409,4411,4413],{"class":41,"line":74},[39,4408,3015],{"class":49},[39,4410,3018],{"class":49},[39,4412,3022],{"class":3021},[39,4414,2359],{"class":45},[39,4416,4417,4419,4421],{"class":41,"line":99},[39,4418,1224],{"class":49},[39,4420,3031],{"class":3021},[39,4422,3034],{"class":45},[39,4424,4425],{"class":41,"line":106},[39,4426,2611],{"class":45},[39,4428,4429,4431,4433,4435,4437,4439,4441,4443,4445,4447,4449,4451],{"class":41,"line":112},[39,4430,4259],{"class":49},[39,4432,2716],{"class":45},[39,4434,1224],{"class":49},[39,4436,4090],{"class":45},[39,4438,50],{"class":49},[39,4440,260],{"class":56},[39,4442,4097],{"class":45},[39,4444,2108],{"class":49},[39,4446,146],{"class":56},[39,4448,4097],{"class":45},[39,4450,3350],{"class":49},[39,4452,209],{"class":45},[39,4454,4455],{"class":41,"line":118},[39,4456,3088],{"class":45},[39,4458,4459,4462,4464,4466,4469,4471,4473,4476,4478,4480,4482,4484],{"class":41,"line":413},[39,4460,4461],{"class":49},"        for",[39,4463,2716],{"class":45},[39,4465,1224],{"class":49},[39,4467,4468],{"class":45}," j",[39,4470,50],{"class":49},[39,4472,260],{"class":56},[39,4474,4475],{"class":45},";j",[39,4477,2108],{"class":49},[39,4479,146],{"class":56},[39,4481,4475],{"class":45},[39,4483,3350],{"class":49},[39,4485,209],{"class":45},[39,4487,4488],{"class":41,"line":419},[39,4489,3568],{"class":45},[39,4491,4492,4494,4496,4499],{"class":41,"line":425},[39,4493,3573],{"class":45},[39,4495,2242],{"class":49},[39,4497,4498],{"class":1319},"\"*\"",[39,4500,2359],{"class":45},[39,4502,4503],{"class":41,"line":443},[39,4504,3587],{"class":45},[39,4506,4507,4510,4512],{"class":41,"line":449},[39,4508,4509],{"class":45},"        cout",[39,4511,2242],{"class":49},[39,4513,2264],{"class":45},[39,4515,4516],{"class":41,"line":455},[39,4517,3245],{"class":45},[39,4519,4520],{"class":41,"line":461},[39,4521,2630],{"class":45},[19,4523,4524],{},"乘法口诀表",[29,4526,4528],{"className":1209,"code":4527,"language":1211,"meta":34,"style":34},"#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",[36,4529,4530,4536,4546,4554,4558,4584,4588,4613,4617,4657,4661,4669,4673],{"__ignoreMap":34},[39,4531,4532,4534],{"class":41,"line":42},[39,4533,3007],{"class":49},[39,4535,3392],{"class":1319},[39,4537,4538,4540,4542,4544],{"class":41,"line":74},[39,4539,3015],{"class":49},[39,4541,3018],{"class":49},[39,4543,3022],{"class":3021},[39,4545,2359],{"class":45},[39,4547,4548,4550,4552],{"class":41,"line":99},[39,4549,1224],{"class":49},[39,4551,3031],{"class":3021},[39,4553,3034],{"class":45},[39,4555,4556],{"class":41,"line":106},[39,4557,2611],{"class":45},[39,4559,4560,4562,4564,4566,4568,4570,4572,4574,4576,4578,4580,4582],{"class":41,"line":112},[39,4561,4259],{"class":49},[39,4563,1221],{"class":45},[39,4565,1224],{"class":49},[39,4567,4090],{"class":45},[39,4569,50],{"class":49},[39,4571,57],{"class":56},[39,4573,4097],{"class":45},[39,4575,2108],{"class":49},[39,4577,146],{"class":56},[39,4579,4097],{"class":45},[39,4581,3350],{"class":49},[39,4583,209],{"class":45},[39,4585,4586],{"class":41,"line":118},[39,4587,3088],{"class":45},[39,4589,4590,4592,4594,4596,4598,4600,4602,4604,4606,4609,4611],{"class":41,"line":413},[39,4591,4461],{"class":49},[39,4593,1221],{"class":45},[39,4595,1224],{"class":49},[39,4597,4468],{"class":45},[39,4599,50],{"class":49},[39,4601,57],{"class":56},[39,4603,4475],{"class":45},[39,4605,2653],{"class":49},[39,4607,4608],{"class":45},"i;j",[39,4610,3350],{"class":49},[39,4612,209],{"class":45},[39,4614,4615],{"class":41,"line":419},[39,4616,3568],{"class":45},[39,4618,4619,4621,4623,4625,4627,4629,4631,4633,4635,4638,4640,4642,4644,4646,4648,4651,4653,4655],{"class":41,"line":425},[39,4620,3573],{"class":45},[39,4622,2242],{"class":49},[39,4624,1669],{"class":45},[39,4626,2242],{"class":49},[39,4628,4498],{"class":1319},[39,4630,2242],{"class":49},[39,4632,1644],{"class":45},[39,4634,2242],{"class":49},[39,4636,4637],{"class":1319},"\"=\"",[39,4639,2242],{"class":49},[39,4641,1644],{"class":45},[39,4643,1657],{"class":49},[39,4645,1669],{"class":45},[39,4647,2242],{"class":49},[39,4649,4650],{"class":1319},"'",[39,4652,2299],{"class":56},[39,4654,4650],{"class":1319},[39,4656,2359],{"class":45},[39,4658,4659],{"class":41,"line":443},[39,4660,3587],{"class":45},[39,4662,4663,4665,4667],{"class":41,"line":449},[39,4664,4509],{"class":45},[39,4666,2242],{"class":49},[39,4668,2264],{"class":45},[39,4670,4671],{"class":41,"line":455},[39,4672,3245],{"class":45},[39,4674,4675],{"class":41,"line":461},[39,4676,2630],{"class":45},[1188,4678,4680],{"id":4679},"_163跳出语句","1.6.3跳出语句",[1171,4682,4683],{},[1174,4684,4685],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,4687,4688],{},"break使用时机：",[2205,4690,4691,4694,4697],{},[1174,4692,4693],{},"出现在switch条件语句中，作用是终止case并跳出switch",[1174,4695,4696],{},"出现在循环结构中，作用是跳出当前的循环结构",[1174,4698,4699],{},"出现在嵌套循环中，跳出最近的内层循环语句",[1171,4701,4702,4705],{"start":74},[1174,4703,4704],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[1174,4706,4707],{},"goto语句\n语法：goto 标记;",[19,4709,4710],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[29,4712,4714],{"className":1209,"code":4713,"language":1211,"meta":34,"style":34},"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",[36,4715,4716,4724,4728,4741,4751,4764,4777,4790,4798,4814],{"__ignoreMap":34},[39,4717,4718,4720,4722],{"class":41,"line":42},[39,4719,1224],{"class":49},[39,4721,3031],{"class":3021},[39,4723,3034],{"class":45},[39,4725,4726],{"class":41,"line":74},[39,4727,2611],{"class":45},[39,4729,4730,4732,4734,4737,4739],{"class":41,"line":99},[39,4731,2616],{"class":45},[39,4733,2242],{"class":49},[39,4735,4736],{"class":1319},"\"1\"",[39,4738,2242],{"class":49},[39,4740,2264],{"class":45},[39,4742,4743,4746,4749],{"class":41,"line":106},[39,4744,4745],{"class":49},"    goto",[39,4747,4748],{"class":3021}," FLAG",[39,4750,2359],{"class":45},[39,4752,4753,4755,4757,4760,4762],{"class":41,"line":112},[39,4754,2616],{"class":45},[39,4756,2242],{"class":49},[39,4758,4759],{"class":1319},"\"2\"",[39,4761,2242],{"class":49},[39,4763,2264],{"class":45},[39,4765,4766,4768,4770,4773,4775],{"class":41,"line":118},[39,4767,2616],{"class":45},[39,4769,2242],{"class":49},[39,4771,4772],{"class":1319},"\"3\"",[39,4774,2242],{"class":49},[39,4776,2264],{"class":45},[39,4778,4779,4781,4783,4786,4788],{"class":41,"line":413},[39,4780,2616],{"class":45},[39,4782,2242],{"class":49},[39,4784,4785],{"class":1319},"\"4\"",[39,4787,2242],{"class":49},[39,4789,2264],{"class":45},[39,4791,4792,4795],{"class":41,"line":419},[39,4793,4794],{"class":3021},"    FLAG",[39,4796,4797],{"class":45},":\n",[39,4799,4800,4802,4804,4807,4809,4811],{"class":41,"line":425},[39,4801,2616],{"class":45},[39,4803,2242],{"class":49},[39,4805,4806],{"class":1319},"\"5\"",[39,4808,2242],{"class":49},[39,4810,2307],{"class":45},[39,4812,4813],{"class":102},"\u002F\u002F跳过了2,3,4,直接到5\n",[39,4815,4816],{"class":41,"line":443},[39,4817,2630],{"class":45},[14,4819,4821],{"id":4820},"_17数组","1.7数组",[1188,4823,4825],{"id":4824},"_171一维数组","1.7.1一维数组",[1171,4827,4828],{},[1174,4829,4830],{},"一维数组定义方式",[1352,4832,4833,4843],{},[1355,4834,4835],{},[1358,4836,4837,4840],{},[1361,4838,4839],{},"方式",[1361,4841,4842],{},"注意事项",[1398,4844,4845,4859,4869],{},[1358,4846,4847,4853],{},[1403,4848,4849,4850,1273],{},"数据类型 数组名",[39,4851,4852],{},"数组长度",[1403,4854,4855,4856,4858],{},"这种方式是先定义再arr",[39,4857,1644],{},"赋值",[1358,4860,4861,4866],{},[1403,4862,4849,4863,4865],{},[39,4864,4852],{},"={值1,值2....};",[1403,4867,4868],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[1358,4870,4871,4875],{},[1403,4872,4849,4873,4865],{},[39,4874],{},[1403,4876,4877,4878,4880],{},"int arr",[39,4879],{},";这是不正确的，按照这样的方式定义必须有初始长度",[1171,4882,4883],{"start":74},[1174,4884,4885],{},"一维数组数组名\n用途：",[2205,4887,4888],{},[1174,4889,4890],{},"1.可以统计整个数组在内存中的长度：",[29,4892,4894],{"className":1209,"code":4893,"language":1211,"meta":34,"style":34},"sizeof(arr);\nsizeof(arr[0]);\n",[36,4895,4896,4903],{"__ignoreMap":34},[39,4897,4898,4900],{"class":41,"line":42},[39,4899,1218],{"class":49},[39,4901,4902],{"class":45},"(arr);\n",[39,4904,4905,4907,4910,4912],{"class":41,"line":74},[39,4906,1218],{"class":49},[39,4908,4909],{"class":45},"(arr[",[39,4911,260],{"class":56},[39,4913,4914],{"class":45},"]);\n",[2205,4916,4917],{},[1174,4918,4919],{},"2.可以获取数组在内存中的首地址:",[29,4921,4923],{"className":1209,"code":4922,"language":1211,"meta":34,"style":34},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[36,4924,4925,4930,4943,4948],{"__ignoreMap":34},[39,4926,4927],{"class":41,"line":42},[39,4928,4929],{"class":102},"\u002F\u002F查看16进制的首地址\n",[39,4931,4932,4934,4936,4939,4941],{"class":41,"line":74},[39,4933,2435],{"class":45},[39,4935,2242],{"class":49},[39,4937,4938],{"class":45},"arr",[39,4940,2242],{"class":49},[39,4942,2264],{"class":45},[39,4944,4945],{"class":41,"line":99},[39,4946,4947],{"class":102},"\u002F\u002F看10进制数\n",[39,4949,4950,4952,4954,4956,4958,4960,4962,4965,4967,4969,4971],{"class":41,"line":106},[39,4951,2435],{"class":45},[39,4953,2242],{"class":49},[39,4955,1221],{"class":45},[39,4957,1224],{"class":49},[39,4959,1632],{"class":45},[39,4961,1557],{"class":49},[39,4963,4964],{"class":45},"arr[",[39,4966,260],{"class":56},[39,4968,2138],{"class":45},[39,4970,2242],{"class":49},[39,4972,2264],{"class":45},[19,4974,4975],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[2205,4977,4978],{},[1174,4979,4980],{},"1️⃣五只小猪称体重",[29,4982,4984],{"className":1209,"code":4983,"language":1211,"meta":34,"style":34},"#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",[36,4985,4986,4992,5002,5010,5014,5054,5067,5093,5097,5109,5113,5123,5127,5131,5144,5154],{"__ignoreMap":34},[39,4987,4988,4990],{"class":41,"line":42},[39,4989,3007],{"class":49},[39,4991,3010],{"class":1319},[39,4993,4994,4996,4998,5000],{"class":41,"line":74},[39,4995,3015],{"class":49},[39,4997,3018],{"class":49},[39,4999,3022],{"class":3021},[39,5001,2359],{"class":45},[39,5003,5004,5006,5008],{"class":41,"line":99},[39,5005,1224],{"class":49},[39,5007,3031],{"class":3021},[39,5009,3034],{"class":45},[39,5011,5012],{"class":41,"line":106},[39,5013,2611],{"class":45},[39,5015,5016,5018,5021,5023,5025,5027,5029,5032,5034,5037,5039,5041,5043,5046,5048,5051],{"class":41,"line":112},[39,5017,3043],{"class":49},[39,5019,5020],{"class":45}," arr[",[39,5022,89],{"class":56},[39,5024,2138],{"class":45},[39,5026,50],{"class":49},[39,5028,2094],{"class":45},[39,5030,5031],{"class":56},"300",[39,5033,60],{"class":45},[39,5035,5036],{"class":56},"350",[39,5038,60],{"class":45},[39,5040,2780],{"class":56},[39,5042,60],{"class":45},[39,5044,5045],{"class":56},"400",[39,5047,60],{"class":45},[39,5049,5050],{"class":56},"250",[39,5052,5053],{"class":45},"};\n",[39,5055,5056,5058,5061,5063,5065],{"class":41,"line":118},[39,5057,3043],{"class":49},[39,5059,5060],{"class":45}," tmp",[39,5062,50],{"class":49},[39,5064,260],{"class":56},[39,5066,2359],{"class":45},[39,5068,5069,5071,5073,5075,5077,5079,5081,5083,5085,5087,5089,5091],{"class":41,"line":413},[39,5070,4259],{"class":49},[39,5072,2716],{"class":45},[39,5074,1224],{"class":49},[39,5076,4090],{"class":45},[39,5078,50],{"class":49},[39,5080,260],{"class":56},[39,5082,4097],{"class":45},[39,5084,2108],{"class":49},[39,5086,89],{"class":56},[39,5088,4097],{"class":45},[39,5090,3350],{"class":49},[39,5092,209],{"class":45},[39,5094,5095],{"class":41,"line":419},[39,5096,3088],{"class":45},[39,5098,5099,5101,5104,5106],{"class":41,"line":425},[39,5100,3555],{"class":49},[39,5102,5103],{"class":45},"(tmp",[39,5105,2108],{"class":49},[39,5107,5108],{"class":45},"arr[i])\n",[39,5110,5111],{"class":41,"line":443},[39,5112,3568],{"class":45},[39,5114,5115,5118,5120],{"class":41,"line":449},[39,5116,5117],{"class":45},"            tmp",[39,5119,50],{"class":49},[39,5121,5122],{"class":45},"arr[i];\n",[39,5124,5125],{"class":41,"line":455},[39,5126,3587],{"class":45},[39,5128,5129],{"class":41,"line":461},[39,5130,3245],{"class":45},[39,5132,5133,5135,5137,5140,5142],{"class":41,"line":475},[39,5134,2616],{"class":45},[39,5136,2242],{"class":49},[39,5138,5139],{"class":45},"tmp",[39,5141,2242],{"class":49},[39,5143,2264],{"class":45},[39,5145,5146,5149,5152],{"class":41,"line":665},[39,5147,5148],{"class":49},"    return",[39,5150,5151],{"class":56}," 0",[39,5153,2359],{"class":45},[39,5155,5156],{"class":41,"line":671},[39,5157,2630],{"class":45},[2205,5159,5160],{},[1174,5161,5162],{},"2️⃣数组元素逆置",[29,5164,5166],{"className":1209,"code":5165,"language":1211,"meta":34,"style":34},"\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",[36,5167,5168,5173,5179,5189,5197,5201,5236,5252,5284,5297,5302,5307,5319,5329,5339,5344,5353,5363,5368,5373,5400,5404,5420,5424,5435,5444],{"__ignoreMap":34},[39,5169,5170],{"class":41,"line":42},[39,5171,5172],{"class":102},"\u002F\u002F元素逆置\n",[39,5174,5175,5177],{"class":41,"line":74},[39,5176,3007],{"class":49},[39,5178,3010],{"class":1319},[39,5180,5181,5183,5185,5187],{"class":41,"line":99},[39,5182,3015],{"class":49},[39,5184,3018],{"class":49},[39,5186,3022],{"class":3021},[39,5188,2359],{"class":45},[39,5190,5191,5193,5195],{"class":41,"line":106},[39,5192,1224],{"class":49},[39,5194,3031],{"class":3021},[39,5196,3034],{"class":45},[39,5198,5199],{"class":41,"line":112},[39,5200,2611],{"class":45},[39,5202,5203,5206,5208,5210,5212,5214,5216,5218,5220,5222,5224,5226,5228,5230,5232,5234],{"class":41,"line":118},[39,5204,5205],{"class":49},"   int",[39,5207,5020],{"class":45},[39,5209,89],{"class":56},[39,5211,2138],{"class":45},[39,5213,50],{"class":49},[39,5215,2094],{"class":45},[39,5217,57],{"class":56},[39,5219,60],{"class":45},[39,5221,63],{"class":56},[39,5223,60],{"class":45},[39,5225,68],{"class":56},[39,5227,60],{"class":45},[39,5229,84],{"class":56},[39,5231,60],{"class":45},[39,5233,89],{"class":56},[39,5235,5053],{"class":45},[39,5237,5238,5240,5243,5245,5247,5249],{"class":41,"line":413},[39,5239,5205],{"class":49},[39,5241,5242],{"class":45}," start",[39,5244,50],{"class":49},[39,5246,260],{"class":56},[39,5248,1273],{"class":45},[39,5250,5251],{"class":102},"\u002F\u002F起始下标\n",[39,5253,5254,5256,5259,5262,5265,5268,5270,5272,5275,5277,5279,5281],{"class":41,"line":419},[39,5255,5205],{"class":49},[39,5257,5258],{"class":45}," end",[39,5260,5261],{"class":49},"=sizeof",[39,5263,5264],{"class":45},"(arr)",[39,5266,5267],{"class":49},"\u002Fsizeof",[39,5269,4909],{"class":45},[39,5271,260],{"class":56},[39,5273,5274],{"class":45},"])",[39,5276,1732],{"class":49},[39,5278,57],{"class":56},[39,5280,1273],{"class":45},[39,5282,5283],{"class":102},"\u002F\u002F结束下标\n",[39,5285,5286,5289,5292,5294],{"class":41,"line":425},[39,5287,5288],{"class":49},"   while",[39,5290,5291],{"class":45}," (start",[39,5293,2108],{"class":49},[39,5295,5296],{"class":45},"end)\n",[39,5298,5299],{"class":41,"line":443},[39,5300,5301],{"class":45},"   {\n",[39,5303,5304],{"class":41,"line":449},[39,5305,5306],{"class":102},"    \u002F\u002F实现元素互换代码\n",[39,5308,5309,5311,5314,5316],{"class":41,"line":455},[39,5310,3043],{"class":49},[39,5312,5313],{"class":45}," temp",[39,5315,50],{"class":49},[39,5317,5318],{"class":45},"arr[start];\n",[39,5320,5321,5324,5326],{"class":41,"line":461},[39,5322,5323],{"class":45},"    arr[start]",[39,5325,50],{"class":49},[39,5327,5328],{"class":45},"arr[end];\n",[39,5330,5331,5334,5336],{"class":41,"line":475},[39,5332,5333],{"class":45},"    arr[end]",[39,5335,50],{"class":49},[39,5337,5338],{"class":45},"temp;\n",[39,5340,5341],{"class":41,"line":665},[39,5342,5343],{"class":102},"    \u002F\u002F下标更新\n",[39,5345,5346,5349,5351],{"class":41,"line":671},[39,5347,5348],{"class":45},"    start",[39,5350,3350],{"class":49},[39,5352,2359],{"class":45},[39,5354,5355,5358,5361],{"class":41,"line":684},[39,5356,5357],{"class":45},"    end",[39,5359,5360],{"class":49},"--",[39,5362,2359],{"class":45},[39,5364,5365],{"class":41,"line":2732},[39,5366,5367],{"class":45},"   }\n",[39,5369,5370],{"class":41,"line":2737},[39,5371,5372],{"class":102},"   \u002F\u002F输出逆置后的数组\n",[39,5374,5375,5378,5380,5382,5384,5386,5388,5390,5392,5394,5396,5398],{"class":41,"line":2751},[39,5376,5377],{"class":49},"   for",[39,5379,2716],{"class":45},[39,5381,1224],{"class":49},[39,5383,4090],{"class":45},[39,5385,50],{"class":49},[39,5387,260],{"class":56},[39,5389,4097],{"class":45},[39,5391,2108],{"class":49},[39,5393,89],{"class":56},[39,5395,4097],{"class":45},[39,5397,3350],{"class":49},[39,5399,209],{"class":45},[39,5401,5402],{"class":41,"line":2756},[39,5403,5301],{"class":45},[39,5405,5406,5408,5410,5413,5415,5418],{"class":41,"line":2785},[39,5407,2616],{"class":45},[39,5409,2242],{"class":49},[39,5411,5412],{"class":45},"arr[i]",[39,5414,2242],{"class":49},[39,5416,5417],{"class":1319},"\" \"",[39,5419,2359],{"class":45},[39,5421,5422],{"class":41,"line":2790},[39,5423,5367],{"class":45},[39,5425,5426,5429,5431,5433],{"class":41,"line":2807},[39,5427,5428],{"class":3021},"   system",[39,5430,1221],{"class":45},[39,5432,3366],{"class":1319},[39,5434,3777],{"class":45},[39,5436,5437,5440,5442],{"class":41,"line":2812},[39,5438,5439],{"class":49},"   return",[39,5441,5151],{"class":56},[39,5443,2359],{"class":45},[39,5445,5446],{"class":41,"line":2817},[39,5447,2630],{"class":45},[2205,5449,5450],{},[1174,5451,5452],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[29,5454,5456],{"className":1209,"code":5455,"language":1211,"meta":34,"style":34},"\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",[36,5457,5458,5463,5469,5479,5487,5491,5543,5556,5582,5586,5600,5604,5609,5614,5644,5648,5653,5687,5691,5696,5715,5720,5732,5748,5763,5768,5772,5776,5789,5815,5819,5833,5837,5845],{"__ignoreMap":34},[39,5459,5460],{"class":41,"line":42},[39,5461,5462],{"class":102},"\u002F\u002F冒泡排序,升序\n",[39,5464,5465,5467],{"class":41,"line":74},[39,5466,3007],{"class":49},[39,5468,3010],{"class":1319},[39,5470,5471,5473,5475,5477],{"class":41,"line":99},[39,5472,3015],{"class":49},[39,5474,3018],{"class":49},[39,5476,3022],{"class":3021},[39,5478,2359],{"class":45},[39,5480,5481,5483,5485],{"class":41,"line":106},[39,5482,1224],{"class":49},[39,5484,3031],{"class":3021},[39,5486,3034],{"class":45},[39,5488,5489],{"class":41,"line":112},[39,5490,2611],{"class":45},[39,5492,5493,5495,5497,5499,5502,5504,5507,5509,5511,5513,5515,5517,5519,5521,5523,5525,5527,5529,5531,5533,5535,5537,5539,5541],{"class":41,"line":118},[39,5494,3043],{"class":49},[39,5496,5020],{"class":45},[39,5498,1623],{"class":56},[39,5500,5501],{"class":45},"] ",[39,5503,50],{"class":49},[39,5505,5506],{"class":45}," {",[39,5508,84],{"class":56},[39,5510,60],{"class":45},[39,5512,63],{"class":56},[39,5514,60],{"class":45},[39,5516,1598],{"class":56},[39,5518,60],{"class":45},[39,5520,260],{"class":56},[39,5522,60],{"class":45},[39,5524,89],{"class":56},[39,5526,60],{"class":45},[39,5528,1573],{"class":56},[39,5530,60],{"class":45},[39,5532,57],{"class":56},[39,5534,60],{"class":45},[39,5536,68],{"class":56},[39,5538,60],{"class":45},[39,5540,1623],{"class":56},[39,5542,5053],{"class":45},[39,5544,5545,5547,5549,5552,5554],{"class":41,"line":413},[39,5546,2616],{"class":45},[39,5548,2242],{"class":49},[39,5550,5551],{"class":1319},"\"排序前：\"",[39,5553,2242],{"class":49},[39,5555,2264],{"class":45},[39,5557,5558,5560,5562,5564,5566,5568,5570,5572,5574,5576,5578,5580],{"class":41,"line":419},[39,5559,4259],{"class":49},[39,5561,2716],{"class":45},[39,5563,1224],{"class":49},[39,5565,4090],{"class":45},[39,5567,50],{"class":49},[39,5569,260],{"class":56},[39,5571,4097],{"class":45},[39,5573,2108],{"class":49},[39,5575,1623],{"class":56},[39,5577,4097],{"class":45},[39,5579,3350],{"class":49},[39,5581,209],{"class":45},[39,5583,5584],{"class":41,"line":425},[39,5585,3088],{"class":45},[39,5587,5588,5590,5592,5594,5596,5598],{"class":41,"line":443},[39,5589,4509],{"class":45},[39,5591,2242],{"class":49},[39,5593,5412],{"class":45},[39,5595,2242],{"class":49},[39,5597,5417],{"class":1319},[39,5599,2359],{"class":45},[39,5601,5602],{"class":41,"line":449},[39,5603,3245],{"class":45},[39,5605,5606],{"class":41,"line":455},[39,5607,5608],{"class":102},"    \u002F\u002F开始冒泡排序\n",[39,5610,5611],{"class":41,"line":461},[39,5612,5613],{"class":102},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[39,5615,5616,5618,5620,5622,5624,5626,5628,5630,5632,5634,5636,5638,5640,5642],{"class":41,"line":475},[39,5617,4259],{"class":49},[39,5619,2716],{"class":45},[39,5621,1224],{"class":49},[39,5623,4090],{"class":45},[39,5625,50],{"class":49},[39,5627,260],{"class":56},[39,5629,4097],{"class":45},[39,5631,2108],{"class":49},[39,5633,1623],{"class":56},[39,5635,1732],{"class":49},[39,5637,57],{"class":56},[39,5639,4097],{"class":45},[39,5641,3350],{"class":49},[39,5643,209],{"class":45},[39,5645,5646],{"class":41,"line":665},[39,5647,3088],{"class":45},[39,5649,5650],{"class":41,"line":671},[39,5651,5652],{"class":102},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[39,5654,5655,5657,5659,5661,5663,5665,5667,5669,5671,5673,5675,5677,5679,5681,5683,5685],{"class":41,"line":684},[39,5656,4461],{"class":49},[39,5658,2716],{"class":45},[39,5660,1224],{"class":49},[39,5662,4468],{"class":45},[39,5664,50],{"class":49},[39,5666,260],{"class":56},[39,5668,4475],{"class":45},[39,5670,2108],{"class":49},[39,5672,1623],{"class":56},[39,5674,1732],{"class":49},[39,5676,1644],{"class":45},[39,5678,1732],{"class":49},[39,5680,57],{"class":56},[39,5682,4475],{"class":45},[39,5684,3350],{"class":49},[39,5686,209],{"class":45},[39,5688,5689],{"class":41,"line":2732},[39,5690,3568],{"class":45},[39,5692,5693],{"class":41,"line":2737},[39,5694,5695],{"class":102},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[39,5697,5698,5701,5704,5706,5709,5711,5713],{"class":41,"line":2751},[39,5699,5700],{"class":49},"            if",[39,5702,5703],{"class":45},"(arr[j]",[39,5705,2158],{"class":49},[39,5707,5708],{"class":45},"arr[j",[39,5710,1682],{"class":49},[39,5712,57],{"class":56},[39,5714,71],{"class":45},[39,5716,5717],{"class":41,"line":2756},[39,5718,5719],{"class":45},"            {\n",[39,5721,5722,5725,5727,5729],{"class":41,"line":2785},[39,5723,5724],{"class":49},"                int",[39,5726,5313],{"class":45},[39,5728,50],{"class":49},[39,5730,5731],{"class":45},"arr[j];\n",[39,5733,5734,5737,5739,5741,5743,5745],{"class":41,"line":2790},[39,5735,5736],{"class":45},"                arr[j]",[39,5738,50],{"class":49},[39,5740,5708],{"class":45},[39,5742,1682],{"class":49},[39,5744,57],{"class":56},[39,5746,5747],{"class":45},"];\n",[39,5749,5750,5753,5755,5757,5759,5761],{"class":41,"line":2807},[39,5751,5752],{"class":45},"                arr[j",[39,5754,1682],{"class":49},[39,5756,57],{"class":56},[39,5758,2138],{"class":45},[39,5760,50],{"class":49},[39,5762,5338],{"class":45},[39,5764,5765],{"class":41,"line":2812},[39,5766,5767],{"class":45},"            }\n",[39,5769,5770],{"class":41,"line":2817},[39,5771,3587],{"class":45},[39,5773,5774],{"class":41,"line":2822},[39,5775,3245],{"class":45},[39,5777,5778,5780,5782,5785,5787],{"class":41,"line":2836},[39,5779,2616],{"class":45},[39,5781,2242],{"class":49},[39,5783,5784],{"class":1319},"\"排序后：\"",[39,5786,2242],{"class":49},[39,5788,2264],{"class":45},[39,5790,5791,5793,5795,5797,5799,5801,5803,5805,5807,5809,5811,5813],{"class":41,"line":2841},[39,5792,4259],{"class":49},[39,5794,2716],{"class":45},[39,5796,1224],{"class":49},[39,5798,4090],{"class":45},[39,5800,50],{"class":49},[39,5802,260],{"class":56},[39,5804,4097],{"class":45},[39,5806,2108],{"class":49},[39,5808,1623],{"class":56},[39,5810,4097],{"class":45},[39,5812,3350],{"class":49},[39,5814,209],{"class":45},[39,5816,5817],{"class":41,"line":3635},[39,5818,3088],{"class":45},[39,5820,5821,5823,5825,5827,5829,5831],{"class":41,"line":3649},[39,5822,4509],{"class":45},[39,5824,2242],{"class":49},[39,5826,5412],{"class":45},[39,5828,2242],{"class":49},[39,5830,5417],{"class":1319},[39,5832,2359],{"class":45},[39,5834,5835],{"class":41,"line":3657},[39,5836,3245],{"class":45},[39,5838,5839,5841,5843],{"class":41,"line":3662},[39,5840,5148],{"class":49},[39,5842,5151],{"class":56},[39,5844,2359],{"class":45},[39,5846,5847],{"class":41,"line":3668},[39,5848,2630],{"class":45},[1188,5850,5852],{"id":5851},"_172二维数组","1.7.2二维数组",[1171,5854,5855],{},[1174,5856,5857],{},"二维数组的四种定义方式",[1352,5859,5860,5869],{},[1355,5861,5862],{},[1358,5863,5864,5867],{},[1361,5865,5866],{},"序号",[1361,5868,4839],{},[1398,5870,5871,5881,5890,5899,5908],{},[1358,5872,5873,5875],{},[1403,5874,57],{},[1403,5876,5877,5878,1273],{},"数据类型 数组名[行数]",[39,5879,5880],{},"列数",[1358,5882,5883,5885],{},[1403,5884,63],{},[1403,5886,5877,5887,5889],{},[39,5888,5880],{},"={ {数据1,数据2}，{数据3，数据4}... }",[1358,5891,5892,5894],{},[1403,5893,68],{},[1403,5895,5877,5896,5898],{},[39,5897,5880],{},"={数据1,数据2,数据3...}",[1358,5900,5901,5903],{},[1403,5902,84],{},[1403,5904,5905,5906,5898],{},"数据类型 数组名[]",[39,5907,5880],{},[1358,5909,5910,5913],{},[1403,5911,5912],{},"注意：不能只省略列数",[1403,5914],{},[1171,5916,5917],{"start":74},[1174,5918,5919],{},"二维数组数组名",[2205,5921,5922,5925],{},[1174,5923,5924],{},"1.查看二维数组所占内存空间",[1174,5926,5927],{},"2.获取二维数组首地址",[19,5929,5930],{},"已知二维数组，求二维数组的行数与列数",[29,5932,5934],{"className":1209,"code":5933,"language":1211,"meta":34,"style":34},"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",[36,5935,5936,5944,5948,5966,5970,5988,6004,6009,6034,6067],{"__ignoreMap":34},[39,5937,5938,5940,5942],{"class":41,"line":42},[39,5939,1224],{"class":49},[39,5941,3031],{"class":3021},[39,5943,3034],{"class":45},[39,5945,5946],{"class":41,"line":74},[39,5947,2611],{"class":45},[39,5949,5950,5952,5954,5956,5959,5961,5963],{"class":41,"line":99},[39,5951,3043],{"class":49},[39,5953,5020],{"class":45},[39,5955,63],{"class":56},[39,5957,5958],{"class":45},"][",[39,5960,68],{"class":56},[39,5962,2138],{"class":45},[39,5964,5965],{"class":49},"=\n",[39,5967,5968],{"class":41,"line":106},[39,5969,3088],{"class":45},[39,5971,5972,5975,5977,5979,5981,5983,5985],{"class":41,"line":112},[39,5973,5974],{"class":45},"        {",[39,5976,57],{"class":56},[39,5978,60],{"class":45},[39,5980,63],{"class":56},[39,5982,60],{"class":45},[39,5984,68],{"class":56},[39,5986,5987],{"class":45},"},\n",[39,5989,5990,5992,5994,5996,5998,6000,6002],{"class":41,"line":118},[39,5991,5974],{"class":45},[39,5993,84],{"class":56},[39,5995,60],{"class":45},[39,5997,89],{"class":56},[39,5999,60],{"class":45},[39,6001,94],{"class":56},[39,6003,2630],{"class":45},[39,6005,6006],{"class":41,"line":413},[39,6007,6008],{"class":45},"    };\n",[39,6010,6011,6013,6015,6018,6020,6022,6024,6026,6028,6030,6032],{"class":41,"line":419},[39,6012,2616],{"class":45},[39,6014,2242],{"class":49},[39,6016,6017],{"class":1319},"\"二维数组的行数\"",[39,6019,2438],{"class":49},[39,6021,5264],{"class":45},[39,6023,5267],{"class":49},[39,6025,4909],{"class":45},[39,6027,260],{"class":56},[39,6029,5274],{"class":45},[39,6031,2242],{"class":49},[39,6033,2264],{"class":45},[39,6035,6036,6038,6040,6043,6045,6047,6049,6051,6053,6055,6057,6059,6061,6063,6065],{"class":41,"line":425},[39,6037,2616],{"class":45},[39,6039,2242],{"class":49},[39,6041,6042],{"class":1319},"\"二维数组的列数\"",[39,6044,2438],{"class":49},[39,6046,4909],{"class":45},[39,6048,260],{"class":56},[39,6050,5274],{"class":45},[39,6052,5267],{"class":49},[39,6054,4909],{"class":45},[39,6056,260],{"class":56},[39,6058,5958],{"class":45},[39,6060,260],{"class":56},[39,6062,5274],{"class":45},[39,6064,2242],{"class":49},[39,6066,2264],{"class":45},[39,6068,6069],{"class":41,"line":443},[39,6070,2630],{"class":45},[19,6072,6073],{},"查看二维数组首地址",[29,6075,6077],{"className":1209,"code":6076,"language":1211,"meta":34,"style":34},"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",[36,6078,6079,6096,6122,6147],{"__ignoreMap":34},[39,6080,6081,6083,6085,6088,6090,6092,6094],{"class":41,"line":42},[39,6082,2435],{"class":45},[39,6084,2242],{"class":49},[39,6086,6087],{"class":1319},"\"二维数组首地址：\"",[39,6089,2242],{"class":49},[39,6091,4938],{"class":45},[39,6093,2242],{"class":49},[39,6095,2264],{"class":45},[39,6097,6098,6100,6102,6105,6107,6109,6111,6114,6116,6118,6120],{"class":41,"line":74},[39,6099,2435],{"class":45},[39,6101,2242],{"class":49},[39,6103,6104],{"class":1319},"\"二维数组第一行的首地址：\"",[39,6106,2242],{"class":49},[39,6108,1221],{"class":45},[39,6110,1224],{"class":49},[39,6112,6113],{"class":45},")arr[",[39,6115,260],{"class":56},[39,6117,2138],{"class":45},[39,6119,2242],{"class":49},[39,6121,2264],{"class":45},[39,6123,6124,6126,6128,6131,6133,6135,6137,6139,6141,6143,6145],{"class":41,"line":99},[39,6125,2435],{"class":45},[39,6127,2242],{"class":49},[39,6129,6130],{"class":1319},"\"二维数组第二行的首地址：\"",[39,6132,2242],{"class":49},[39,6134,1221],{"class":45},[39,6136,1224],{"class":49},[39,6138,6113],{"class":45},[39,6140,57],{"class":56},[39,6142,2138],{"class":45},[39,6144,2242],{"class":49},[39,6146,2264],{"class":45},[39,6148,6149,6151,6153,6156,6158,6160,6162,6164,6166,6168,6170,6172,6174,6176,6178,6180],{"class":41,"line":106},[39,6150,2435],{"class":45},[39,6152,2242],{"class":49},[39,6154,6155],{"class":1319},"\"二维数组第一个元素的首地址:\"",[39,6157,2242],{"class":49},[39,6159,1221],{"class":45},[39,6161,1224],{"class":49},[39,6163,1632],{"class":45},[39,6165,1557],{"class":49},[39,6167,4964],{"class":45},[39,6169,260],{"class":56},[39,6171,5958],{"class":45},[39,6173,260],{"class":56},[39,6175,2138],{"class":45},[39,6177,2242],{"class":49},[39,6179,2307],{"class":45},[39,6181,6182],{"class":102},"\u002F\u002F对于数，要加取址符\n",[1133,6184,6185],{},"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":34,"searchDepth":74,"depth":74,"links":6187},[6188,6189,6190,6198,6199,6205,6210],{"id":1161,"depth":74,"text":1162},{"id":1168,"depth":74,"text":1169},{"id":1185,"depth":74,"text":1186,"children":6191},[6192,6193,6194,6195,6196,6197],{"id":1190,"depth":99,"text":1191},{"id":1236,"depth":99,"text":1237},{"id":1300,"depth":99,"text":1301},{"id":2223,"depth":99,"text":2224},{"id":2313,"depth":99,"text":2314},{"id":2409,"depth":99,"text":2410},{"id":2451,"depth":74,"text":2452},{"id":2519,"depth":74,"text":2520,"children":6200},[6201,6202,6203,6204],{"id":2523,"depth":99,"text":2524},{"id":2544,"depth":99,"text":2545},{"id":2553,"depth":99,"text":2554},{"id":2562,"depth":99,"text":2563},{"id":2571,"depth":74,"text":2572,"children":6206},[6207,6208,6209],{"id":2575,"depth":99,"text":2576},{"id":3263,"depth":99,"text":3264},{"id":4679,"depth":99,"text":4680},{"id":4820,"depth":74,"text":4821,"children":6211},[6212,6213],{"id":4824,"depth":99,"text":4825},{"id":5851,"depth":99,"text":5852},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1153,"description":34},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6220,"title":6221,"body":6222,"description":34,"extension":1143,"meta":7321,"navigation":1145,"path":7322,"seo":7323,"stem":7324,"__hash__":7325},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6223,"toc":7313},[6224,6227,6231,6239,6247,6250,6315,6319,6322,6398,6402,6405,6408,6411,6624,6628,6633,6697,6702,6769,6774,6865,6868,6973,6977,6980,6986,7130,7134,7137,7151,7154,7199,7202,7310],[10,6225,6221],{"id":6226},"_2函数",[14,6228,6230],{"id":6229},"_21函数概述","2.1函数概述",[1171,6232,6233,6236],{},[1174,6234,6235],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[1174,6237,6238],{},"语法：",[29,6240,6245],{"className":6241,"code":6243,"language":6244,"meta":34},[6242],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[36,6246,6243],{"__ignoreMap":34},[19,6248,6249],{},"小案例",[29,6251,6253],{"className":1209,"code":6252,"language":1211,"meta":34,"style":34},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[36,6254,6255,6260,6283,6287,6304,6311],{"__ignoreMap":34},[39,6256,6257],{"class":41,"line":42},[39,6258,6259],{"class":102},"\u002F\u002Fnum1,num2形参\n",[39,6261,6262,6264,6267,6269,6271,6274,6276,6278,6281],{"class":41,"line":74},[39,6263,1224],{"class":49},[39,6265,6266],{"class":3021}," add",[39,6268,1221],{"class":45},[39,6270,1224],{"class":49},[39,6272,6273],{"class":254}," num1",[39,6275,60],{"class":45},[39,6277,1224],{"class":49},[39,6279,6280],{"class":254}," num2",[39,6282,209],{"class":45},[39,6284,6285],{"class":41,"line":99},[39,6286,2611],{"class":45},[39,6288,6289,6291,6294,6296,6299,6301],{"class":41,"line":106},[39,6290,3043],{"class":49},[39,6292,6293],{"class":45}," sum",[39,6295,50],{"class":49},[39,6297,6298],{"class":45},"num1",[39,6300,1682],{"class":49},[39,6302,6303],{"class":45},"num2;\n",[39,6305,6306,6308],{"class":41,"line":112},[39,6307,5148],{"class":49},[39,6309,6310],{"class":45}," sum;\n",[39,6312,6313],{"class":41,"line":118},[39,6314,2630],{"class":45},[14,6316,6318],{"id":6317},"_22函数调用","2.2函数调用",[19,6320,6321],{},"调用刚刚写的求和函数",[29,6323,6325],{"className":1209,"code":6324,"language":1211,"meta":34,"style":34},"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",[36,6326,6327,6335,6339,6344,6356,6368,6377,6382,6394],{"__ignoreMap":34},[39,6328,6329,6331,6333],{"class":41,"line":42},[39,6330,1224],{"class":49},[39,6332,3031],{"class":3021},[39,6334,3034],{"class":45},[39,6336,6337],{"class":41,"line":74},[39,6338,2611],{"class":45},[39,6340,6341],{"class":41,"line":99},[39,6342,6343],{"class":102},"    \u002F\u002Fa,b实参\n",[39,6345,6346,6348,6350,6352,6354],{"class":41,"line":106},[39,6347,3043],{"class":49},[39,6349,2464],{"class":45},[39,6351,50],{"class":49},[39,6353,260],{"class":56},[39,6355,2359],{"class":45},[39,6357,6358,6360,6362,6364,6366],{"class":41,"line":112},[39,6359,3043],{"class":49},[39,6361,3891],{"class":45},[39,6363,50],{"class":49},[39,6365,260],{"class":56},[39,6367,2359],{"class":45},[39,6369,6370,6372,6374],{"class":41,"line":118},[39,6371,3070],{"class":45},[39,6373,2495],{"class":49},[39,6375,6376],{"class":45},"a,b;\n",[39,6378,6379],{"class":41,"line":413},[39,6380,6381],{"class":102},"    \u002F\u002F调用函数时，实参值传给了形参\n",[39,6383,6384,6386,6388,6391],{"class":41,"line":419},[39,6385,2616],{"class":45},[39,6387,2242],{"class":49},[39,6389,6390],{"class":3021},"add",[39,6392,6393],{"class":45},"(a,b);\n",[39,6395,6396],{"class":41,"line":425},[39,6397,2630],{"class":45},[14,6399,6401],{"id":6400},"_23值传递","2.3值传递",[19,6403,6404],{},"值传递就是函数调用时实参将数值传给形参",[19,6406,6407],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,6409,6410],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[29,6412,6414],{"className":1209,"code":6413,"language":1211,"meta":34,"style":34},"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",[36,6415,6416,6438,6442,6455,6472,6490,6501,6510,6519,6532,6548,6564,6573,6577,6585,6589,6601,6613,6620],{"__ignoreMap":34},[39,6417,6418,6421,6424,6426,6428,6430,6432,6434,6436],{"class":41,"line":42},[39,6419,6420],{"class":49},"void",[39,6422,6423],{"class":3021}," swap",[39,6425,1221],{"class":45},[39,6427,1224],{"class":49},[39,6429,6273],{"class":254},[39,6431,60],{"class":45},[39,6433,1224],{"class":49},[39,6435,6280],{"class":254},[39,6437,209],{"class":45},[39,6439,6440],{"class":41,"line":74},[39,6441,2611],{"class":45},[39,6443,6444,6446,6448,6451,6453],{"class":41,"line":99},[39,6445,2616],{"class":45},[39,6447,2242],{"class":49},[39,6449,6450],{"class":1319},"\"交换前：\"",[39,6452,2242],{"class":49},[39,6454,2264],{"class":45},[39,6456,6457,6459,6461,6464,6466,6468,6470],{"class":41,"line":106},[39,6458,2616],{"class":45},[39,6460,2242],{"class":49},[39,6462,6463],{"class":1319},"\"num1=\"",[39,6465,2242],{"class":49},[39,6467,6298],{"class":45},[39,6469,2242],{"class":49},[39,6471,2264],{"class":45},[39,6473,6474,6476,6478,6481,6483,6486,6488],{"class":41,"line":112},[39,6475,2616],{"class":45},[39,6477,2242],{"class":49},[39,6479,6480],{"class":1319},"\"num2=\"",[39,6482,2242],{"class":49},[39,6484,6485],{"class":45},"num2",[39,6487,2242],{"class":49},[39,6489,2264],{"class":45},[39,6491,6492,6494,6496,6498],{"class":41,"line":118},[39,6493,3043],{"class":49},[39,6495,5313],{"class":45},[39,6497,50],{"class":49},[39,6499,6500],{"class":45},"num1;\n",[39,6502,6503,6506,6508],{"class":41,"line":413},[39,6504,6505],{"class":45},"    num1",[39,6507,50],{"class":49},[39,6509,6303],{"class":45},[39,6511,6512,6515,6517],{"class":41,"line":419},[39,6513,6514],{"class":45},"    num2",[39,6516,50],{"class":49},[39,6518,5338],{"class":45},[39,6520,6521,6523,6525,6528,6530],{"class":41,"line":425},[39,6522,2616],{"class":45},[39,6524,2242],{"class":49},[39,6526,6527],{"class":1319},"\"交换后：\"",[39,6529,2242],{"class":49},[39,6531,2264],{"class":45},[39,6533,6534,6536,6538,6540,6542,6544,6546],{"class":41,"line":443},[39,6535,2616],{"class":45},[39,6537,2242],{"class":49},[39,6539,6463],{"class":1319},[39,6541,2242],{"class":49},[39,6543,6298],{"class":45},[39,6545,2242],{"class":49},[39,6547,2264],{"class":45},[39,6549,6550,6552,6554,6556,6558,6560,6562],{"class":41,"line":449},[39,6551,2616],{"class":45},[39,6553,2242],{"class":49},[39,6555,6480],{"class":1319},[39,6557,2242],{"class":49},[39,6559,6485],{"class":45},[39,6561,2242],{"class":49},[39,6563,2264],{"class":45},[39,6565,6566,6568,6570],{"class":41,"line":455},[39,6567,5148],{"class":49},[39,6569,1273],{"class":45},[39,6571,6572],{"class":102},"\u002F\u002F或者不写\n",[39,6574,6575],{"class":41,"line":461},[39,6576,2630],{"class":45},[39,6578,6579,6581,6583],{"class":41,"line":475},[39,6580,1224],{"class":49},[39,6582,3031],{"class":3021},[39,6584,3034],{"class":45},[39,6586,6587],{"class":41,"line":665},[39,6588,2611],{"class":45},[39,6590,6591,6593,6595,6597,6599],{"class":41,"line":671},[39,6592,3043],{"class":49},[39,6594,2464],{"class":45},[39,6596,50],{"class":49},[39,6598,146],{"class":56},[39,6600,2359],{"class":45},[39,6602,6603,6605,6607,6609,6611],{"class":41,"line":684},[39,6604,3043],{"class":49},[39,6606,3891],{"class":45},[39,6608,50],{"class":49},[39,6610,1898],{"class":56},[39,6612,2359],{"class":45},[39,6614,6615,6618],{"class":41,"line":2732},[39,6616,6617],{"class":3021},"    swap",[39,6619,6393],{"class":45},[39,6621,6622],{"class":41,"line":2737},[39,6623,2630],{"class":45},[14,6625,6627],{"id":6626},"_24函数的常见形式","2.4函数的常见形式",[1171,6629,6630],{},[1174,6631,6632],{},"无参无返",[29,6634,6636],{"className":1209,"code":6635,"language":1211,"meta":34,"style":34},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[36,6637,6638,6647,6651,6664,6668,6676,6680,6685,6693],{"__ignoreMap":34},[39,6639,6640,6642,6645],{"class":41,"line":42},[39,6641,6420],{"class":49},[39,6643,6644],{"class":3021}," test01",[39,6646,3034],{"class":45},[39,6648,6649],{"class":41,"line":74},[39,6650,2611],{"class":45},[39,6652,6653,6655,6657,6660,6662],{"class":41,"line":99},[39,6654,2616],{"class":45},[39,6656,2242],{"class":49},[39,6658,6659],{"class":1319},"\"你好\"",[39,6661,2242],{"class":49},[39,6663,2264],{"class":45},[39,6665,6666],{"class":41,"line":106},[39,6667,2630],{"class":45},[39,6669,6670,6672,6674],{"class":41,"line":112},[39,6671,1224],{"class":49},[39,6673,3031],{"class":3021},[39,6675,3034],{"class":45},[39,6677,6678],{"class":41,"line":118},[39,6679,2611],{"class":45},[39,6681,6682],{"class":41,"line":413},[39,6683,6684],{"class":102},"    \u002F\u002F函数调用\n",[39,6686,6687,6690],{"class":41,"line":419},[39,6688,6689],{"class":3021},"    test01",[39,6691,6692],{"class":45},"();\n",[39,6694,6695],{"class":41,"line":425},[39,6696,2630],{"class":45},[1171,6698,6699],{"start":74},[1174,6700,6701],{},"有参无返",[29,6703,6705],{"className":1209,"code":6704,"language":1211,"meta":34,"style":34},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[36,6706,6707,6722,6726,6738,6742,6750,6754,6765],{"__ignoreMap":34},[39,6708,6709,6711,6714,6716,6718,6720],{"class":41,"line":42},[39,6710,6420],{"class":49},[39,6712,6713],{"class":3021}," test02",[39,6715,1221],{"class":45},[39,6717,1224],{"class":49},[39,6719,2464],{"class":254},[39,6721,209],{"class":45},[39,6723,6724],{"class":41,"line":74},[39,6725,2611],{"class":45},[39,6727,6728,6730,6732,6734,6736],{"class":41,"line":99},[39,6729,2616],{"class":45},[39,6731,2242],{"class":49},[39,6733,6659],{"class":1319},[39,6735,2242],{"class":49},[39,6737,2264],{"class":45},[39,6739,6740],{"class":41,"line":106},[39,6741,2630],{"class":45},[39,6743,6744,6746,6748],{"class":41,"line":112},[39,6745,1224],{"class":49},[39,6747,3031],{"class":3021},[39,6749,3034],{"class":45},[39,6751,6752],{"class":41,"line":118},[39,6753,2611],{"class":45},[39,6755,6756,6759,6761,6763],{"class":41,"line":413},[39,6757,6758],{"class":3021},"    test02",[39,6760,1221],{"class":45},[39,6762,1519],{"class":56},[39,6764,3777],{"class":45},[39,6766,6767],{"class":41,"line":419},[39,6768,2630],{"class":45},[1171,6770,6771],{"start":99},[1174,6772,6773],{},"无参有返",[29,6775,6777],{"className":1209,"code":6776,"language":1211,"meta":34,"style":34},"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",[36,6778,6779,6788,6792,6804,6813,6817,6825,6829,6842,6861],{"__ignoreMap":34},[39,6780,6781,6783,6786],{"class":41,"line":42},[39,6782,1224],{"class":49},[39,6784,6785],{"class":3021}," test03",[39,6787,3034],{"class":45},[39,6789,6790],{"class":41,"line":74},[39,6791,2611],{"class":45},[39,6793,6794,6796,6798,6800,6802],{"class":41,"line":99},[39,6795,2616],{"class":45},[39,6797,2242],{"class":49},[39,6799,6659],{"class":1319},[39,6801,2242],{"class":49},[39,6803,2264],{"class":45},[39,6805,6806,6808,6811],{"class":41,"line":106},[39,6807,5148],{"class":49},[39,6809,6810],{"class":56}," 100",[39,6812,2359],{"class":45},[39,6814,6815],{"class":41,"line":112},[39,6816,2630],{"class":45},[39,6818,6819,6821,6823],{"class":41,"line":118},[39,6820,1224],{"class":49},[39,6822,3031],{"class":3021},[39,6824,3034],{"class":45},[39,6826,6827],{"class":41,"line":413},[39,6828,2611],{"class":45},[39,6830,6831,6833,6835,6837,6840],{"class":41,"line":419},[39,6832,3043],{"class":49},[39,6834,6273],{"class":45},[39,6836,50],{"class":49},[39,6838,6839],{"class":3021},"test03",[39,6841,6692],{"class":45},[39,6843,6844,6846,6848,6850,6852,6854,6856,6858],{"class":41,"line":425},[39,6845,2616],{"class":45},[39,6847,2242],{"class":49},[39,6849,6463],{"class":1319},[39,6851,2242],{"class":49},[39,6853,6298],{"class":45},[39,6855,2242],{"class":49},[39,6857,2307],{"class":45},[39,6859,6860],{"class":102}," \u002F\u002F100\n",[39,6862,6863],{"class":41,"line":443},[39,6864,2630],{"class":45},[19,6866,6867],{},"4.有参有返",[29,6869,6871],{"className":1209,"code":6870,"language":1211,"meta":34,"style":34},"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",[36,6872,6873,6888,6892,6905,6911,6915,6924,6928,6940,6954,6969],{"__ignoreMap":34},[39,6874,6875,6877,6880,6882,6884,6886],{"class":41,"line":42},[39,6876,1224],{"class":49},[39,6878,6879],{"class":3021}," test04",[39,6881,1221],{"class":45},[39,6883,1224],{"class":49},[39,6885,2464],{"class":254},[39,6887,209],{"class":45},[39,6889,6890],{"class":41,"line":74},[39,6891,2611],{"class":45},[39,6893,6894,6896,6898,6901,6903],{"class":41,"line":99},[39,6895,2616],{"class":45},[39,6897,2242],{"class":49},[39,6899,6900],{"class":1319},"\"hello\"",[39,6902,2242],{"class":49},[39,6904,2264],{"class":45},[39,6906,6907,6909],{"class":41,"line":106},[39,6908,5148],{"class":49},[39,6910,2498],{"class":45},[39,6912,6913],{"class":41,"line":112},[39,6914,2630],{"class":45},[39,6916,6917,6919,6922],{"class":41,"line":118},[39,6918,1224],{"class":49},[39,6920,6921],{"class":3021}," mian",[39,6923,3034],{"class":45},[39,6925,6926],{"class":41,"line":413},[39,6927,2611],{"class":45},[39,6929,6930,6932,6934,6936,6938],{"class":41,"line":419},[39,6931,3043],{"class":49},[39,6933,3891],{"class":45},[39,6935,50],{"class":49},[39,6937,57],{"class":56},[39,6939,2359],{"class":45},[39,6941,6942,6944,6946,6948,6951],{"class":41,"line":425},[39,6943,3043],{"class":49},[39,6945,3907],{"class":45},[39,6947,50],{"class":49},[39,6949,6950],{"class":3021},"test04",[39,6952,6953],{"class":45},"(b);\n",[39,6955,6956,6958,6960,6962,6964,6966],{"class":41,"line":443},[39,6957,2616],{"class":45},[39,6959,2242],{"class":49},[39,6961,139],{"class":45},[39,6963,2242],{"class":49},[39,6965,2307],{"class":45},[39,6967,6968],{"class":102}," \u002F\u002F1\n",[39,6970,6971],{"class":41,"line":449},[39,6972,2630],{"class":45},[14,6974,6976],{"id":6975},"_25函数的声明","2.5函数的声明",[19,6978,6979],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6981,6982,6983],{},"函数的",[304,6984,6985],{},"声明可以多次，但是函数的定义只能有一次",[29,6987,6989],{"className":1209,"code":6988,"language":1211,"meta":34,"style":34},"\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",[36,6990,6991,6996,7001,7026,7035,7039,7051,7063,7079,7083,7103,7107,7126],{"__ignoreMap":34},[39,6992,6993],{"class":41,"line":42},[39,6994,6995],{"class":102},"\u002F\u002F函数声明\n",[39,6997,6998],{"class":41,"line":74},[39,6999,7000],{"class":102},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[39,7002,7003,7005,7008,7010,7012,7014,7016,7018,7020,7023],{"class":41,"line":99},[39,7004,1224],{"class":49},[39,7006,7007],{"class":3021}," max",[39,7009,1221],{"class":45},[39,7011,1224],{"class":49},[39,7013,2464],{"class":254},[39,7015,60],{"class":45},[39,7017,1224],{"class":49},[39,7019,3891],{"class":254},[39,7021,7022],{"class":45},");",[39,7024,7025],{"class":102},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[39,7027,7028,7030,7032],{"class":41,"line":106},[39,7029,1224],{"class":49},[39,7031,3031],{"class":3021},[39,7033,7034],{"class":45},"() \n",[39,7036,7037],{"class":41,"line":112},[39,7038,2611],{"class":45},[39,7040,7041,7043,7045,7047,7049],{"class":41,"line":118},[39,7042,3043],{"class":49},[39,7044,2464],{"class":45},[39,7046,50],{"class":49},[39,7048,146],{"class":56},[39,7050,2359],{"class":45},[39,7052,7053,7055,7057,7059,7061],{"class":41,"line":413},[39,7054,3043],{"class":49},[39,7056,3891],{"class":45},[39,7058,50],{"class":49},[39,7060,1898],{"class":56},[39,7062,2359],{"class":45},[39,7064,7065,7067,7069,7072,7075,7077],{"class":41,"line":419},[39,7066,2616],{"class":45},[39,7068,2242],{"class":49},[39,7070,7071],{"class":3021},"max",[39,7073,7074],{"class":45},"(a,b)",[39,7076,2242],{"class":49},[39,7078,2264],{"class":45},[39,7080,7081],{"class":41,"line":425},[39,7082,2630],{"class":45},[39,7084,7085,7087,7089,7091,7093,7095,7097,7099,7101],{"class":41,"line":443},[39,7086,1224],{"class":49},[39,7088,7007],{"class":3021},[39,7090,1221],{"class":45},[39,7092,1224],{"class":49},[39,7094,2464],{"class":254},[39,7096,60],{"class":45},[39,7098,1224],{"class":49},[39,7100,3891],{"class":254},[39,7102,209],{"class":45},[39,7104,7105],{"class":41,"line":449},[39,7106,2611],{"class":45},[39,7108,7109,7111,7113,7115,7117,7119,7121,7123],{"class":41,"line":455},[39,7110,5148],{"class":49},[39,7112,2464],{"class":45},[39,7114,2158],{"class":49},[39,7116,77],{"class":45},[39,7118,2184],{"class":49},[39,7120,46],{"class":45},[39,7122,2057],{"class":49},[39,7124,7125],{"class":45},"b;\n",[39,7127,7128],{"class":41,"line":461},[39,7129,2630],{"class":45},[14,7131,7133],{"id":7132},"_26函数的分文件编写","2.6函数的分文件编写",[19,7135,7136],{},"4个步骤：",[2205,7138,7139,7142,7145,7148],{},[1174,7140,7141],{},"1.创建后缀名为.h的头文件",[1174,7143,7144],{},"2.创建后缀名为.cpp的源文件",[1174,7146,7147],{},"3.在头文件中写函数的定义",[1174,7149,7150],{},"4.在源文件中写函数的定义\n示例：",[19,7152,7153],{},"头文件：swap.h",[29,7155,7157],{"className":1209,"code":7156,"language":1211,"meta":34,"style":34},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[36,7158,7159,7165,7175,7179],{"__ignoreMap":34},[39,7160,7161,7163],{"class":41,"line":42},[39,7162,3007],{"class":49},[39,7164,3010],{"class":1319},[39,7166,7167,7169,7171,7173],{"class":41,"line":74},[39,7168,3015],{"class":49},[39,7170,3018],{"class":49},[39,7172,3022],{"class":3021},[39,7174,2359],{"class":45},[39,7176,7177],{"class":41,"line":99},[39,7178,6995],{"class":102},[39,7180,7181,7183,7185,7187,7189,7191,7193,7195,7197],{"class":41,"line":106},[39,7182,6420],{"class":49},[39,7184,6423],{"class":3021},[39,7186,1221],{"class":45},[39,7188,1224],{"class":49},[39,7190,2464],{"class":254},[39,7192,60],{"class":45},[39,7194,1224],{"class":49},[39,7196,3891],{"class":254},[39,7198,3777],{"class":45},[19,7200,7201],{},"源文件：swap.cpp",[29,7203,7205],{"className":1209,"code":7204,"language":1211,"meta":34,"style":34},"#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",[36,7206,7207,7214,7219,7239,7243,7254,7263,7272,7289,7306],{"__ignoreMap":34},[39,7208,7209,7211],{"class":41,"line":42},[39,7210,3007],{"class":49},[39,7212,7213],{"class":1319}," \"swap.h\"\n",[39,7215,7216],{"class":41,"line":74},[39,7217,7218],{"class":102},"\u002F\u002F函数的定义\n",[39,7220,7221,7223,7225,7227,7229,7231,7233,7235,7237],{"class":41,"line":99},[39,7222,6420],{"class":49},[39,7224,6423],{"class":3021},[39,7226,1221],{"class":45},[39,7228,1224],{"class":49},[39,7230,2464],{"class":254},[39,7232,60],{"class":45},[39,7234,1224],{"class":49},[39,7236,3891],{"class":254},[39,7238,209],{"class":45},[39,7240,7241],{"class":41,"line":106},[39,7242,2611],{"class":45},[39,7244,7245,7247,7249,7251],{"class":41,"line":112},[39,7246,3043],{"class":49},[39,7248,5313],{"class":45},[39,7250,50],{"class":49},[39,7252,7253],{"class":45},"a;\n",[39,7255,7256,7259,7261],{"class":41,"line":118},[39,7257,7258],{"class":45},"    a",[39,7260,50],{"class":49},[39,7262,7125],{"class":45},[39,7264,7265,7268,7270],{"class":41,"line":413},[39,7266,7267],{"class":45},"    b",[39,7269,50],{"class":49},[39,7271,5338],{"class":45},[39,7273,7274,7276,7278,7281,7283,7285,7287],{"class":41,"line":419},[39,7275,2616],{"class":45},[39,7277,2242],{"class":49},[39,7279,7280],{"class":1319},"\"a=\"",[39,7282,2242],{"class":49},[39,7284,46],{"class":45},[39,7286,2242],{"class":49},[39,7288,2264],{"class":45},[39,7290,7291,7293,7295,7298,7300,7302,7304],{"class":41,"line":425},[39,7292,2616],{"class":45},[39,7294,2242],{"class":49},[39,7296,7297],{"class":1319},"\"b=\"",[39,7299,2242],{"class":49},[39,7301,77],{"class":45},[39,7303,2242],{"class":49},[39,7305,2264],{"class":45},[39,7307,7308],{"class":41,"line":443},[39,7309,2630],{"class":45},[1133,7311,7312],{},"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":34,"searchDepth":74,"depth":74,"links":7314},[7315,7316,7317,7318,7319,7320],{"id":6229,"depth":74,"text":6230},{"id":6317,"depth":74,"text":6318},{"id":6400,"depth":74,"text":6401},{"id":6626,"depth":74,"text":6627},{"id":6975,"depth":74,"text":6976},{"id":7132,"depth":74,"text":7133},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6221,"description":34},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":7327,"title":7328,"body":7329,"description":7336,"extension":1143,"meta":8741,"navigation":1145,"path":8742,"seo":8743,"stem":8744,"__hash__":8745},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":7330,"toc":8731},[7331,7334,7337,7341,7503,7507,7510,7513,7516,7519,7659,7663,7666,7669,7672,7737,7741,7746,7813,7816,7820,7823,7834,7839,7859,7862,7867,7886,7889,7893,7912,7915,7919,8154,8158,8161,8164,8167,8329,8332,8336,8339,8345,8728],[10,7332,7328],{"id":7333},"_3指针",[19,7335,7336],{},"通过指针保存一个地址，指针就是个地址",[14,7338,7340],{"id":7339},"_31定义指针","3.1定义指针",[29,7342,7344],{"className":1209,"code":7343,"language":1211,"meta":34,"style":34},"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",[36,7345,7346,7354,7358,7363,7375,7380,7388,7398,7416,7436,7440,7445,7450,7455,7469,7485,7499],{"__ignoreMap":34},[39,7347,7348,7350,7352],{"class":41,"line":42},[39,7349,1224],{"class":49},[39,7351,3031],{"class":3021},[39,7353,3034],{"class":45},[39,7355,7356],{"class":41,"line":74},[39,7357,2611],{"class":45},[39,7359,7360],{"class":41,"line":99},[39,7361,7362],{"class":102},"    \u002F\u002F1.定义指针\n",[39,7364,7365,7367,7369,7371,7373],{"class":41,"line":106},[39,7366,3043],{"class":49},[39,7368,2464],{"class":45},[39,7370,50],{"class":49},[39,7372,146],{"class":56},[39,7374,2359],{"class":45},[39,7376,7377],{"class":41,"line":112},[39,7378,7379],{"class":102},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[39,7381,7382,7385],{"class":41,"line":118},[39,7383,7384],{"class":49},"    int*",[39,7386,7387],{"class":45},"p;\n",[39,7389,7390,7393,7396],{"class":41,"line":413},[39,7391,7392],{"class":45},"    p",[39,7394,7395],{"class":49},"=&",[39,7397,7253],{"class":45},[39,7399,7400,7402,7404,7407,7410,7412,7414],{"class":41,"line":419},[39,7401,2616],{"class":45},[39,7403,2242],{"class":49},[39,7405,7406],{"class":1319},"\"a的地址为：\"",[39,7408,7409],{"class":49},"\u003C\u003C&",[39,7411,46],{"class":45},[39,7413,2242],{"class":49},[39,7415,2264],{"class":45},[39,7417,7418,7420,7422,7425,7427,7429,7431,7433],{"class":41,"line":425},[39,7419,2616],{"class":45},[39,7421,2242],{"class":49},[39,7423,7424],{"class":1319},"\"指针p为：\"",[39,7426,2242],{"class":49},[39,7428,19],{"class":45},[39,7430,2242],{"class":49},[39,7432,2307],{"class":45},[39,7434,7435],{"class":102},"\u002F\u002F指针p表示的就是a的地址\n",[39,7437,7438],{"class":41,"line":443},[39,7439,3458],{"emptyLinePlaceholder":1145},[39,7441,7442],{"class":41,"line":449},[39,7443,7444],{"class":102},"    \u002F\u002F2.使用指针\n",[39,7446,7447],{"class":41,"line":455},[39,7448,7449],{"class":102},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[39,7451,7452],{"class":41,"line":461},[39,7453,7454],{"class":102},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[39,7456,7457,7460,7462,7464,7467],{"class":41,"line":475},[39,7458,7459],{"class":49},"    *",[39,7461,19],{"class":45},[39,7463,50],{"class":49},[39,7465,7466],{"class":56},"1000",[39,7468,2359],{"class":45},[39,7470,7471,7473,7476,7478,7480,7482],{"class":41,"line":665},[39,7472,2616],{"class":45},[39,7474,7475],{"class":49},"\u003C\u003C*",[39,7477,19],{"class":45},[39,7479,2242],{"class":49},[39,7481,2307],{"class":45},[39,7483,7484],{"class":102},"\u002F\u002F1000\n",[39,7486,7487,7489,7491,7493,7495,7497],{"class":41,"line":671},[39,7488,2616],{"class":45},[39,7490,2242],{"class":49},[39,7492,46],{"class":45},[39,7494,2242],{"class":49},[39,7496,2307],{"class":45},[39,7498,7484],{"class":102},[39,7500,7501],{"class":41,"line":684},[39,7502,2630],{"class":45},[14,7504,7506],{"id":7505},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,7508,7509],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,7511,7512],{},"在32位操作系统下：占用4个字节空间",[19,7514,7515],{},"在64位操作系统下：占用8个字节空间",[19,7517,7518],{},"上方是不管啥数据类型的",[29,7520,7522],{"className":1209,"code":7521,"language":1211,"meta":34,"style":34},"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",[36,7523,7524,7532,7536,7541,7553,7558,7563,7568,7581,7603,7629,7655],{"__ignoreMap":34},[39,7525,7526,7528,7530],{"class":41,"line":42},[39,7527,1224],{"class":49},[39,7529,3031],{"class":3021},[39,7531,3034],{"class":45},[39,7533,7534],{"class":41,"line":74},[39,7535,2611],{"class":45},[39,7537,7538],{"class":41,"line":99},[39,7539,7540],{"class":102},"    \u002F\u002F指针所占内存空间\n",[39,7542,7543,7545,7547,7549,7551],{"class":41,"line":106},[39,7544,3043],{"class":49},[39,7546,2464],{"class":45},[39,7548,50],{"class":49},[39,7550,146],{"class":56},[39,7552,2359],{"class":45},[39,7554,7555],{"class":41,"line":112},[39,7556,7557],{"class":102},"    \u002F\u002Fint *p;\n",[39,7559,7560],{"class":41,"line":118},[39,7561,7562],{"class":102},"    \u002F\u002Fp=&a;\n",[39,7564,7565],{"class":41,"line":413},[39,7566,7567],{"class":102},"    \u002F\u002F上述可以写为以下：\n",[39,7569,7570,7572,7575,7577,7579],{"class":41,"line":419},[39,7571,3043],{"class":49},[39,7573,7574],{"class":49}," *",[39,7576,19],{"class":45},[39,7578,7395],{"class":49},[39,7580,7253],{"class":45},[39,7582,7583,7586,7588,7591,7593,7596,7598,7600],{"class":41,"line":425},[39,7584,7585],{"class":45},"    cout ",[39,7587,2242],{"class":49},[39,7589,7590],{"class":1319},"\"sizeof(int *)\"",[39,7592,2438],{"class":49},[39,7594,7595],{"class":45},"(p)",[39,7597,2242],{"class":49},[39,7599,2307],{"class":45},[39,7601,7602],{"class":102},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[39,7604,7605,7607,7609,7611,7613,7615,7617,7619,7621,7623,7626],{"class":41,"line":443},[39,7606,7585],{"class":45},[39,7608,2242],{"class":49},[39,7610,7590],{"class":1319},[39,7612,2438],{"class":49},[39,7614,1221],{"class":45},[39,7616,1224],{"class":49},[39,7618,7574],{"class":49},[39,7620,1632],{"class":45},[39,7622,2242],{"class":49},[39,7624,7625],{"class":45},"endl",[39,7627,7628],{"class":102},"  \u002F\u002F4字节(32位的话)\n",[39,7630,7631,7633,7635,7638,7640,7642,7644,7646,7648,7650,7652],{"class":41,"line":449},[39,7632,7585],{"class":45},[39,7634,2242],{"class":49},[39,7636,7637],{"class":1319},"\"sizeof(char *)\"",[39,7639,2438],{"class":49},[39,7641,1221],{"class":45},[39,7643,1311],{"class":49},[39,7645,7574],{"class":49},[39,7647,1632],{"class":45},[39,7649,2242],{"class":49},[39,7651,2307],{"class":45},[39,7653,7654],{"class":102}," \u002F\u002F4字节(32位的话)\n",[39,7656,7657],{"class":41,"line":455},[39,7658,2630],{"class":45},[14,7660,7662],{"id":7661},"_33空指针","3.3空指针",[19,7664,7665],{},"空指针：指针变量指向内存中编号为0的空间",[19,7667,7668],{},"用途：初始化指针变量",[19,7670,7671],{},"注意：空指针指向的内存是不可以访问的",[29,7673,7675],{"className":1209,"code":7674,"language":1211,"meta":34,"style":34},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[36,7676,7677,7685,7689,7694,7708,7713,7728,7733],{"__ignoreMap":34},[39,7678,7679,7681,7683],{"class":41,"line":42},[39,7680,1224],{"class":49},[39,7682,3031],{"class":3021},[39,7684,3034],{"class":45},[39,7686,7687],{"class":41,"line":74},[39,7688,2611],{"class":45},[39,7690,7691],{"class":41,"line":99},[39,7692,7693],{"class":102},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[39,7695,7696,7698,7700,7702,7704,7706],{"class":41,"line":106},[39,7697,3043],{"class":49},[39,7699,7574],{"class":49},[39,7701,19],{"class":45},[39,7703,50],{"class":49},[39,7705,3450],{"class":56},[39,7707,2359],{"class":45},[39,7709,7710],{"class":41,"line":112},[39,7711,7712],{"class":102},"    \u002F\u002F2.空指针不能进行访问\n",[39,7714,7715,7717,7719,7721,7723,7725],{"class":41,"line":118},[39,7716,7459],{"class":49},[39,7718,19],{"class":45},[39,7720,50],{"class":49},[39,7722,1519],{"class":56},[39,7724,1273],{"class":45},[39,7726,7727],{"class":102},"\u002F\u002F直接报错，压根不能访问\n",[39,7729,7730],{"class":41,"line":413},[39,7731,7732],{"class":102},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[39,7734,7735],{"class":41,"line":419},[39,7736,2630],{"class":45},[14,7738,7740],{"id":7739},"_34野指针","3.4野指针",[19,7742,7743],{},[304,7744,7745],{},"指针变量指向非法的内存空间",[29,7747,7749],{"className":1209,"code":7748,"language":1211,"meta":34,"style":34},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[36,7750,7751,7759,7763,7792,7797,7809],{"__ignoreMap":34},[39,7752,7753,7755,7757],{"class":41,"line":42},[39,7754,1224],{"class":49},[39,7756,3031],{"class":3021},[39,7758,3034],{"class":45},[39,7760,7761],{"class":41,"line":74},[39,7762,2611],{"class":45},[39,7764,7765,7767,7769,7771,7773,7775,7777,7779,7781,7784,7787,7789],{"class":41,"line":99},[39,7766,3043],{"class":49},[39,7768,7574],{"class":49},[39,7770,19],{"class":45},[39,7772,50],{"class":49},[39,7774,1221],{"class":45},[39,7776,1224],{"class":49},[39,7778,7574],{"class":49},[39,7780,1632],{"class":45},[39,7782,7783],{"class":49},"0x",[39,7785,7786],{"class":56},"1100",[39,7788,1273],{"class":45},[39,7790,7791],{"class":102}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[39,7793,7794],{"class":41,"line":106},[39,7795,7796],{"class":102},"    \u002F\u002F访问野指针报错\n",[39,7798,7799,7801,7803,7805,7807],{"class":41,"line":112},[39,7800,2616],{"class":45},[39,7802,7475],{"class":49},[39,7804,19],{"class":45},[39,7806,2242],{"class":49},[39,7808,2264],{"class":45},[39,7810,7811],{"class":41,"line":118},[39,7812,2630],{"class":45},[19,7814,7815],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,7817,7819],{"id":7818},"_35const修饰指针","3.5const修饰指针",[19,7821,7822],{},"三种情况：",[2205,7824,7825,7828,7831],{},[1174,7826,7827],{},"const修饰指针 常量指针",[1174,7829,7830],{},"const修饰常量 指针常量",[1174,7832,7833],{},"const即修饰指针，又修饰常量",[1171,7835,7836],{},[1174,7837,7838],{},"常量指针",[29,7840,7842],{"className":1209,"code":7841,"language":1211,"meta":34,"style":34},"const int *p=&a;\n",[36,7843,7844],{"__ignoreMap":34},[39,7845,7846,7849,7851,7853,7855,7857],{"class":41,"line":42},[39,7847,7848],{"class":49},"const",[39,7850,3440],{"class":49},[39,7852,7574],{"class":49},[39,7854,19],{"class":45},[39,7856,7395],{"class":49},[39,7858,7253],{"class":45},[19,7860,7861],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[1171,7863,7864],{"start":74},[1174,7865,7866],{},"指针常量",[29,7868,7870],{"className":1209,"code":7869,"language":1211,"meta":34,"style":34},"int *const p=&a;\n",[36,7871,7872],{"__ignoreMap":34},[39,7873,7874,7876,7879,7882,7884],{"class":41,"line":42},[39,7875,1224],{"class":49},[39,7877,7878],{"class":49}," *const",[39,7880,7881],{"class":45}," p",[39,7883,7395],{"class":49},[39,7885,7253],{"class":45},[19,7887,7888],{},"指针的指向不可以改，指针指向的值可以改",[1171,7890,7891],{"start":99},[1174,7892,7833],{},[29,7894,7896],{"className":1209,"code":7895,"language":1211,"meta":34,"style":34},"const int *const p=&a;\n",[36,7897,7898],{"__ignoreMap":34},[39,7899,7900,7902,7904,7906,7908,7910],{"class":41,"line":42},[39,7901,7848],{"class":49},[39,7903,3440],{"class":49},[39,7905,7878],{"class":49},[39,7907,7881],{"class":45},[39,7909,7395],{"class":49},[39,7911,7253],{"class":45},[19,7913,7914],{},"指针的指向和指针指向的值都不可以改变",[14,7916,7918],{"id":7917},"_36指针和数组","3.6指针和数组",[29,7920,7922],{"className":1209,"code":7921,"language":1211,"meta":34,"style":34},"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",[36,7923,7924,7932,7936,7941,7995,8016,8032,8048,8059,8076,8081,8095,8121,8125,8137,8146,8150],{"__ignoreMap":34},[39,7925,7926,7928,7930],{"class":41,"line":42},[39,7927,1224],{"class":49},[39,7929,3031],{"class":3021},[39,7931,3034],{"class":45},[39,7933,7934],{"class":41,"line":74},[39,7935,2611],{"class":45},[39,7937,7938],{"class":41,"line":99},[39,7939,7940],{"class":102},"    \u002F\u002F利用指针访问数组中的元素\n",[39,7942,7943,7945,7947,7949,7951,7953,7955,7957,7959,7961,7963,7965,7967,7969,7971,7973,7975,7977,7979,7981,7983,7985,7987,7989,7991,7993],{"class":41,"line":106},[39,7944,3043],{"class":49},[39,7946,5020],{"class":45},[39,7948,146],{"class":56},[39,7950,2138],{"class":45},[39,7952,50],{"class":49},[39,7954,2094],{"class":45},[39,7956,57],{"class":56},[39,7958,60],{"class":45},[39,7960,63],{"class":56},[39,7962,60],{"class":45},[39,7964,68],{"class":56},[39,7966,60],{"class":45},[39,7968,84],{"class":56},[39,7970,60],{"class":45},[39,7972,89],{"class":56},[39,7974,60],{"class":45},[39,7976,94],{"class":56},[39,7978,60],{"class":45},[39,7980,1573],{"class":56},[39,7982,60],{"class":45},[39,7984,1598],{"class":56},[39,7986,60],{"class":45},[39,7988,1623],{"class":56},[39,7990,60],{"class":45},[39,7992,146],{"class":56},[39,7994,5053],{"class":45},[39,7996,7997,7999,8001,8004,8006,8008,8010,8012,8014],{"class":41,"line":112},[39,7998,2616],{"class":45},[39,8000,2242],{"class":49},[39,8002,8003],{"class":1319},"\"数组的第一个元素为：\"",[39,8005,2242],{"class":49},[39,8007,4964],{"class":45},[39,8009,260],{"class":56},[39,8011,2138],{"class":45},[39,8013,2242],{"class":49},[39,8015,2264],{"class":45},[39,8017,8018,8020,8022,8024,8026,8029],{"class":41,"line":118},[39,8019,3043],{"class":49},[39,8021,7574],{"class":49},[39,8023,19],{"class":45},[39,8025,50],{"class":49},[39,8027,8028],{"class":45},"arr;",[39,8030,8031],{"class":102},"\u002F\u002F注意数才要加取地址符号&\n",[39,8033,8034,8036,8038,8040,8042,8044,8046],{"class":41,"line":413},[39,8035,2616],{"class":45},[39,8037,2242],{"class":49},[39,8039,8003],{"class":1319},[39,8041,7475],{"class":49},[39,8043,19],{"class":45},[39,8045,2242],{"class":49},[39,8047,2264],{"class":45},[39,8049,8050,8052,8054,8056],{"class":41,"line":419},[39,8051,7392],{"class":45},[39,8053,3350],{"class":49},[39,8055,1273],{"class":45},[39,8057,8058],{"class":102}," \u002F\u002F让指针向后偏移4个字节\n",[39,8060,8061,8063,8065,8068,8070,8072,8074],{"class":41,"line":425},[39,8062,2616],{"class":45},[39,8064,2242],{"class":49},[39,8066,8067],{"class":1319},"\"数组的第二个元素为：\"",[39,8069,7475],{"class":49},[39,8071,19],{"class":45},[39,8073,2242],{"class":49},[39,8075,2264],{"class":45},[39,8077,8078],{"class":41,"line":443},[39,8079,8080],{"class":102},"    \u002F\u002F利用指针遍历数组\n",[39,8082,8083,8085,8087,8090,8092],{"class":41,"line":449},[39,8084,3043],{"class":49},[39,8086,7574],{"class":49},[39,8088,8089],{"class":45},"p2",[39,8091,50],{"class":49},[39,8093,8094],{"class":45},"arr;\n",[39,8096,8097,8099,8101,8103,8105,8107,8109,8111,8113,8115,8117,8119],{"class":41,"line":455},[39,8098,4259],{"class":49},[39,8100,2716],{"class":45},[39,8102,1224],{"class":49},[39,8104,4090],{"class":45},[39,8106,50],{"class":49},[39,8108,260],{"class":56},[39,8110,4097],{"class":45},[39,8112,2108],{"class":49},[39,8114,146],{"class":56},[39,8116,4097],{"class":45},[39,8118,3350],{"class":49},[39,8120,209],{"class":45},[39,8122,8123],{"class":41,"line":461},[39,8124,3088],{"class":45},[39,8126,8127,8129,8131,8133,8135],{"class":41,"line":475},[39,8128,4509],{"class":45},[39,8130,7475],{"class":49},[39,8132,8089],{"class":45},[39,8134,2242],{"class":49},[39,8136,2264],{"class":45},[39,8138,8139,8142,8144],{"class":41,"line":665},[39,8140,8141],{"class":45},"        p2",[39,8143,3350],{"class":49},[39,8145,2359],{"class":45},[39,8147,8148],{"class":41,"line":671},[39,8149,3245],{"class":45},[39,8151,8152],{"class":41,"line":684},[39,8153,2630],{"class":45},[14,8155,8157],{"id":8156},"_37指针和函数","3.7指针和函数",[19,8159,8160],{},"利用指针做函数参数，可以修改实参的值",[19,8162,8163],{},"值传递：只改变形参，不改变实参",[19,8165,8166],{},"地址传递：",[29,8168,8170],{"className":1209,"code":8169,"language":1211,"meta":34,"style":34},"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",[36,8171,8172,8197,8201,8213,8224,8234,8238,8246,8250,8262,8274,8279,8295,8310,8325],{"__ignoreMap":34},[39,8173,8174,8176,8178,8180,8182,8184,8187,8189,8191,8193,8195],{"class":41,"line":42},[39,8175,6420],{"class":49},[39,8177,6423],{"class":3021},[39,8179,1221],{"class":45},[39,8181,1224],{"class":49},[39,8183,7574],{"class":49},[39,8185,8186],{"class":254},"p1",[39,8188,60],{"class":45},[39,8190,1224],{"class":49},[39,8192,7574],{"class":49},[39,8194,8089],{"class":254},[39,8196,209],{"class":45},[39,8198,8199],{"class":41,"line":74},[39,8200,2611],{"class":45},[39,8202,8203,8205,8207,8210],{"class":41,"line":99},[39,8204,3043],{"class":49},[39,8206,5313],{"class":45},[39,8208,8209],{"class":49},"=*",[39,8211,8212],{"class":45},"p1;\n",[39,8214,8215,8217,8219,8221],{"class":41,"line":106},[39,8216,7459],{"class":49},[39,8218,8186],{"class":45},[39,8220,8209],{"class":49},[39,8222,8223],{"class":45},"p2;\n",[39,8225,8226,8228,8230,8232],{"class":41,"line":112},[39,8227,7459],{"class":49},[39,8229,8089],{"class":45},[39,8231,50],{"class":49},[39,8233,5338],{"class":45},[39,8235,8236],{"class":41,"line":118},[39,8237,2630],{"class":45},[39,8239,8240,8242,8244],{"class":41,"line":413},[39,8241,1224],{"class":49},[39,8243,3031],{"class":3021},[39,8245,3034],{"class":45},[39,8247,8248],{"class":41,"line":419},[39,8249,2611],{"class":45},[39,8251,8252,8254,8256,8258,8260],{"class":41,"line":425},[39,8253,3043],{"class":49},[39,8255,2464],{"class":45},[39,8257,50],{"class":49},[39,8259,146],{"class":56},[39,8261,2359],{"class":45},[39,8263,8264,8266,8268,8270,8272],{"class":41,"line":443},[39,8265,3043],{"class":49},[39,8267,3891],{"class":45},[39,8269,50],{"class":49},[39,8271,1898],{"class":56},[39,8273,2359],{"class":45},[39,8275,8276],{"class":41,"line":449},[39,8277,8278],{"class":102},"    \u002F\u002F地址传递\n",[39,8280,8281,8283,8285,8287,8290,8292],{"class":41,"line":455},[39,8282,6617],{"class":3021},[39,8284,1221],{"class":45},[39,8286,1557],{"class":49},[39,8288,8289],{"class":45},"a,",[39,8291,1557],{"class":49},[39,8293,8294],{"class":45},"b);\n",[39,8296,8297,8299,8301,8303,8305,8307],{"class":41,"line":461},[39,8298,2616],{"class":45},[39,8300,2242],{"class":49},[39,8302,46],{"class":45},[39,8304,2242],{"class":49},[39,8306,2307],{"class":45},[39,8308,8309],{"class":102},"\u002F\u002F20\n",[39,8311,8312,8314,8316,8318,8320,8322],{"class":41,"line":475},[39,8313,2616],{"class":45},[39,8315,2242],{"class":49},[39,8317,77],{"class":45},[39,8319,2242],{"class":49},[39,8321,2307],{"class":45},[39,8323,8324],{"class":102},"\u002F\u002F10\n",[39,8326,8327],{"class":41,"line":665},[39,8328,2630],{"class":45},[19,8330,8331],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,8333,8335],{"id":8334},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,8337,8338],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,8340,8341,8342,8344],{},"例如数组：int arr",[39,8343,146],{},"={4,3,6,9,1,2,10,8,7,5}",[29,8346,8348],{"className":1209,"code":8347,"language":1211,"meta":34,"style":34},"#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",[36,8349,8350,8356,8366,8390,8394,8425,8429,8463,8467,8485,8489,8500,8515,8530,8534,8538,8542,8546,8550,8558,8562,8567,8621,8633,8645,8650,8658,8662,8667,8692,8696,8711,8720,8724],{"__ignoreMap":34},[39,8351,8352,8354],{"class":41,"line":42},[39,8353,3007],{"class":49},[39,8355,3010],{"class":1319},[39,8357,8358,8360,8362,8364],{"class":41,"line":74},[39,8359,3015],{"class":49},[39,8361,3018],{"class":49},[39,8363,3022],{"class":3021},[39,8365,2359],{"class":45},[39,8367,8368,8370,8373,8375,8377,8379,8381,8383,8385,8388],{"class":41,"line":99},[39,8369,6420],{"class":49},[39,8371,8372],{"class":3021}," bubbleSort",[39,8374,1221],{"class":45},[39,8376,1224],{"class":49},[39,8378,7574],{"class":49},[39,8380,19],{"class":254},[39,8382,60],{"class":45},[39,8384,1224],{"class":49},[39,8386,8387],{"class":254}," len",[39,8389,209],{"class":45},[39,8391,8392],{"class":41,"line":106},[39,8393,2611],{"class":45},[39,8395,8396,8398,8400,8402,8404,8406,8408,8410,8412,8415,8417,8419,8421,8423],{"class":41,"line":112},[39,8397,4259],{"class":49},[39,8399,1221],{"class":45},[39,8401,1224],{"class":49},[39,8403,4090],{"class":45},[39,8405,50],{"class":49},[39,8407,260],{"class":56},[39,8409,4097],{"class":45},[39,8411,2108],{"class":49},[39,8413,8414],{"class":45},"len",[39,8416,1732],{"class":49},[39,8418,57],{"class":56},[39,8420,4097],{"class":45},[39,8422,3350],{"class":49},[39,8424,209],{"class":45},[39,8426,8427],{"class":41,"line":118},[39,8428,3088],{"class":45},[39,8430,8431,8433,8435,8437,8439,8441,8443,8445,8447,8449,8451,8453,8455,8457,8459,8461],{"class":41,"line":413},[39,8432,4461],{"class":49},[39,8434,1221],{"class":45},[39,8436,1224],{"class":49},[39,8438,4468],{"class":45},[39,8440,50],{"class":49},[39,8442,260],{"class":56},[39,8444,4475],{"class":45},[39,8446,2108],{"class":49},[39,8448,8414],{"class":45},[39,8450,1732],{"class":49},[39,8452,1644],{"class":45},[39,8454,1732],{"class":49},[39,8456,57],{"class":56},[39,8458,4475],{"class":45},[39,8460,3350],{"class":49},[39,8462,209],{"class":45},[39,8464,8465],{"class":41,"line":419},[39,8466,3568],{"class":45},[39,8468,8469,8471,8474,8476,8479,8481,8483],{"class":41,"line":425},[39,8470,5700],{"class":49},[39,8472,8473],{"class":45},"(p[j]",[39,8475,2158],{"class":49},[39,8477,8478],{"class":45},"p[j",[39,8480,1682],{"class":49},[39,8482,57],{"class":56},[39,8484,71],{"class":45},[39,8486,8487],{"class":41,"line":443},[39,8488,5719],{"class":45},[39,8490,8491,8493,8495,8497],{"class":41,"line":449},[39,8492,5724],{"class":49},[39,8494,5313],{"class":45},[39,8496,50],{"class":49},[39,8498,8499],{"class":45},"p[j];\n",[39,8501,8502,8505,8507,8509,8511,8513],{"class":41,"line":455},[39,8503,8504],{"class":45},"                p[j]",[39,8506,50],{"class":49},[39,8508,8478],{"class":45},[39,8510,1682],{"class":49},[39,8512,57],{"class":56},[39,8514,5747],{"class":45},[39,8516,8517,8520,8522,8524,8526,8528],{"class":41,"line":461},[39,8518,8519],{"class":45},"                p[j",[39,8521,1682],{"class":49},[39,8523,57],{"class":56},[39,8525,2138],{"class":45},[39,8527,50],{"class":49},[39,8529,5338],{"class":45},[39,8531,8532],{"class":41,"line":475},[39,8533,5767],{"class":45},[39,8535,8536],{"class":41,"line":665},[39,8537,3587],{"class":45},[39,8539,8540],{"class":41,"line":671},[39,8541,3245],{"class":45},[39,8543,8544],{"class":41,"line":684},[39,8545,2630],{"class":45},[39,8547,8548],{"class":41,"line":2732},[39,8549,3458],{"emptyLinePlaceholder":1145},[39,8551,8552,8554,8556],{"class":41,"line":2737},[39,8553,1224],{"class":49},[39,8555,3031],{"class":3021},[39,8557,3034],{"class":45},[39,8559,8560],{"class":41,"line":2751},[39,8561,2611],{"class":45},[39,8563,8564],{"class":41,"line":2756},[39,8565,8566],{"class":102},"    \u002F\u002F 1.创建数组\n",[39,8568,8569,8571,8573,8575,8577,8579,8581,8583,8585,8587,8589,8591,8593,8595,8597,8599,8601,8603,8605,8607,8609,8611,8613,8615,8617,8619],{"class":41,"line":2785},[39,8570,3043],{"class":49},[39,8572,5020],{"class":45},[39,8574,146],{"class":56},[39,8576,2138],{"class":45},[39,8578,50],{"class":49},[39,8580,2094],{"class":45},[39,8582,84],{"class":56},[39,8584,60],{"class":45},[39,8586,68],{"class":56},[39,8588,60],{"class":45},[39,8590,94],{"class":56},[39,8592,60],{"class":45},[39,8594,1623],{"class":56},[39,8596,60],{"class":45},[39,8598,57],{"class":56},[39,8600,60],{"class":45},[39,8602,63],{"class":56},[39,8604,60],{"class":45},[39,8606,146],{"class":56},[39,8608,60],{"class":45},[39,8610,1598],{"class":56},[39,8612,60],{"class":45},[39,8614,1573],{"class":56},[39,8616,60],{"class":45},[39,8618,89],{"class":56},[39,8620,5053],{"class":45},[39,8622,8623,8625,8627,8629,8631],{"class":41,"line":2790},[39,8624,3043],{"class":49},[39,8626,8387],{"class":45},[39,8628,50],{"class":49},[39,8630,146],{"class":56},[39,8632,2359],{"class":45},[39,8634,8635,8637,8639,8641,8643],{"class":41,"line":2807},[39,8636,3043],{"class":49},[39,8638,7574],{"class":49},[39,8640,19],{"class":45},[39,8642,50],{"class":49},[39,8644,8094],{"class":45},[39,8646,8647],{"class":41,"line":2812},[39,8648,8649],{"class":102},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[39,8651,8652,8655],{"class":41,"line":2817},[39,8653,8654],{"class":3021},"    bubbleSort",[39,8656,8657],{"class":45},"(p,len);\n",[39,8659,8660],{"class":41,"line":2822},[39,8661,3458],{"emptyLinePlaceholder":1145},[39,8663,8664],{"class":41,"line":2836},[39,8665,8666],{"class":102},"    \u002F\u002F 3.打印排序后的数组\n",[39,8668,8669,8671,8673,8675,8677,8679,8681,8683,8685,8688,8690],{"class":41,"line":2841},[39,8670,4259],{"class":49},[39,8672,2716],{"class":45},[39,8674,1224],{"class":49},[39,8676,4090],{"class":45},[39,8678,50],{"class":49},[39,8680,260],{"class":56},[39,8682,4272],{"class":45},[39,8684,2108],{"class":49},[39,8686,8687],{"class":45},"len; i",[39,8689,3350],{"class":49},[39,8691,209],{"class":45},[39,8693,8694],{"class":41,"line":3635},[39,8695,3088],{"class":45},[39,8697,8698,8700,8702,8704,8706,8709],{"class":41,"line":3649},[39,8699,4509],{"class":45},[39,8701,7475],{"class":49},[39,8703,19],{"class":45},[39,8705,2242],{"class":49},[39,8707,8708],{"class":1319},"\"\"",[39,8710,2359],{"class":45},[39,8712,8713,8716,8718],{"class":41,"line":3657},[39,8714,8715],{"class":45},"        p",[39,8717,3350],{"class":49},[39,8719,2359],{"class":45},[39,8721,8722],{"class":41,"line":3662},[39,8723,3245],{"class":45},[39,8725,8726],{"class":41,"line":3668},[39,8727,2630],{"class":45},[1133,8729,8730],{},"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":34,"searchDepth":74,"depth":74,"links":8732},[8733,8734,8735,8736,8737,8738,8739,8740],{"id":7339,"depth":74,"text":7340},{"id":7505,"depth":74,"text":7506},{"id":7661,"depth":74,"text":7662},{"id":7739,"depth":74,"text":7740},{"id":7818,"depth":74,"text":7819},{"id":7917,"depth":74,"text":7918},{"id":8156,"depth":74,"text":8157},{"id":8334,"depth":74,"text":8335},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":7328,"description":7336},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8747,"title":8748,"body":8749,"description":8756,"extension":1143,"meta":11730,"navigation":1145,"path":11731,"seo":11732,"stem":11733,"__hash__":11734},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8750,"toc":11721},[8751,8754,8757,8761,8764,8767,8778,9116,9119,9123,9126,9133,9388,9392,9395,9398,9553,9557,9560,9563,9769,9773,9776,10079,10082,10090,10094,10097,10248,10250,10261,10318,10322,10327,10984,10992,10995,11089,11092,11712,11718],[10,8752,8748],{"id":8753},"_4结构体",[19,8755,8756],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,8758,8760],{"id":8759},"_41结构体定义与使用","4.1结构体定义与使用",[19,8762,8763],{},"语法：struct 结构体名 {结构体成员列表}；",[19,8765,8766],{},"通过结构体创建变量的方式：",[2205,8768,8769,8772,8775],{},[1174,8770,8771],{},"struct 结构体名 变量名",[1174,8773,8774],{},"struct 结构体名 变量名={成员1值，成员2值...}",[1174,8776,8777],{},"定义结构体时顺便创建变量",[29,8779,8781],{"className":1209,"code":8780,"language":1211,"meta":34,"style":34},"#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",[36,8782,8783,8789,8799,8806,8811,8819,8823,8828,8832,8837,8842,8847,8854,8859,8866,8870,8877,8881,8885,8889,8893,8897,8901,8907,8911,8917,8925,8933,8937,8942,8947,8958,8963,8975,8986,8997,9002,9026,9031,9037,9064,9069,9075,9087,9099,9111],{"__ignoreMap":34},[39,8784,8785,8787],{"class":41,"line":42},[39,8786,3007],{"class":49},[39,8788,3010],{"class":1319},[39,8790,8791,8793,8795,8797],{"class":41,"line":74},[39,8792,3015],{"class":49},[39,8794,3018],{"class":49},[39,8796,3022],{"class":3021},[39,8798,2359],{"class":45},[39,8800,8801,8803],{"class":41,"line":99},[39,8802,3007],{"class":49},[39,8804,8805],{"class":1319},"\u003Cstring>\n",[39,8807,8808],{"class":41,"line":106},[39,8809,8810],{"class":102},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[39,8812,8813,8816],{"class":41,"line":112},[39,8814,8815],{"class":49},"struct",[39,8817,8818],{"class":3021}," Student\n",[39,8820,8821],{"class":41,"line":118},[39,8822,2611],{"class":45},[39,8824,8825],{"class":41,"line":413},[39,8826,8827],{"class":102},"    \u002F\u002F成员列表\n",[39,8829,8830],{"class":41,"line":419},[39,8831,3458],{"emptyLinePlaceholder":1145},[39,8833,8834],{"class":41,"line":425},[39,8835,8836],{"class":102},"    \u002F\u002F姓名\n",[39,8838,8839],{"class":41,"line":443},[39,8840,8841],{"class":45},"    string name;\n",[39,8843,8844],{"class":41,"line":449},[39,8845,8846],{"class":102},"    \u002F\u002F年龄\n",[39,8848,8849,8851],{"class":41,"line":455},[39,8850,3043],{"class":49},[39,8852,8853],{"class":45}," age;\n",[39,8855,8856],{"class":41,"line":461},[39,8857,8858],{"class":102},"    \u002F\u002F分数\n",[39,8860,8861,8863],{"class":41,"line":475},[39,8862,3043],{"class":49},[39,8864,8865],{"class":45}," score;\n",[39,8867,8868],{"class":41,"line":665},[39,8869,5053],{"class":45},[39,8871,8872,8874],{"class":41,"line":671},[39,8873,8815],{"class":49},[39,8875,8876],{"class":3021}," School\n",[39,8878,8879],{"class":41,"line":684},[39,8880,2611],{"class":45},[39,8882,8883],{"class":41,"line":2732},[39,8884,8827],{"class":102},[39,8886,8887],{"class":41,"line":2737},[39,8888,3458],{"emptyLinePlaceholder":1145},[39,8890,8891],{"class":41,"line":2751},[39,8892,8836],{"class":102},[39,8894,8895],{"class":41,"line":2756},[39,8896,8841],{"class":45},[39,8898,8899],{"class":41,"line":2785},[39,8900,8846],{"class":102},[39,8902,8903,8905],{"class":41,"line":2790},[39,8904,3043],{"class":49},[39,8906,8853],{"class":45},[39,8908,8909],{"class":41,"line":2807},[39,8910,8858],{"class":102},[39,8912,8913,8915],{"class":41,"line":2812},[39,8914,3043],{"class":49},[39,8916,8865],{"class":45},[39,8918,8919,8922],{"class":41,"line":2817},[39,8920,8921],{"class":45},"} s3;",[39,8923,8924],{"class":102}," \u002F\u002F创建结构体时就创建了变量\n",[39,8926,8927,8929,8931],{"class":41,"line":2822},[39,8928,1224],{"class":49},[39,8930,3031],{"class":3021},[39,8932,3034],{"class":45},[39,8934,8935],{"class":41,"line":2836},[39,8936,2611],{"class":45},[39,8938,8939],{"class":41,"line":2841},[39,8940,8941],{"class":102},"    \u002F\u002F2.通过学生类型创建具体学生\n",[39,8943,8944],{"class":41,"line":3635},[39,8945,8946],{"class":102},"    \u002F\u002F2.1 struct Student s1;\n",[39,8948,8949,8952,8955],{"class":41,"line":3649},[39,8950,8951],{"class":49},"    struct",[39,8953,8954],{"class":3021}," Student",[39,8956,8957],{"class":45}," s1;\n",[39,8959,8960],{"class":41,"line":3657},[39,8961,8962],{"class":102},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[39,8964,8965,8968,8970,8973],{"class":41,"line":3662},[39,8966,8967],{"class":45},"    s1.name",[39,8969,50],{"class":49},[39,8971,8972],{"class":1319},"\"张三\"",[39,8974,2359],{"class":45},[39,8976,8977,8980,8982,8984],{"class":41,"line":3668},[39,8978,8979],{"class":45},"    s1.age",[39,8981,50],{"class":49},[39,8983,1849],{"class":56},[39,8985,2359],{"class":45},[39,8987,8988,8991,8993,8995],{"class":41,"line":3674},[39,8989,8990],{"class":45},"    s1.score",[39,8992,50],{"class":49},[39,8994,1465],{"class":56},[39,8996,2359],{"class":45},[39,8998,8999],{"class":41,"line":3679},[39,9000,9001],{"class":102},"    \u002F\u002F输出结果\n",[39,9003,9005,9007,9009,9012,9014,9017,9019,9022,9024],{"class":41,"line":9004},37,[39,9006,2616],{"class":45},[39,9008,2242],{"class":49},[39,9010,9011],{"class":45},"s1.name",[39,9013,2242],{"class":49},[39,9015,9016],{"class":45},"s1.age",[39,9018,2242],{"class":49},[39,9020,9021],{"class":45},"s1.score",[39,9023,2242],{"class":49},[39,9025,2264],{"class":45},[39,9027,9029],{"class":41,"line":9028},38,[39,9030,3458],{"emptyLinePlaceholder":1145},[39,9032,9034],{"class":41,"line":9033},39,[39,9035,9036],{"class":102},"    \u002F\u002F2.2 struct Student s2={...}\n",[39,9038,9040,9042,9044,9047,9049,9051,9054,9056,9058,9060,9062],{"class":41,"line":9039},40,[39,9041,8951],{"class":49},[39,9043,8954],{"class":3021},[39,9045,9046],{"class":45}," s2",[39,9048,50],{"class":49},[39,9050,2094],{"class":45},[39,9052,9053],{"class":1319},"\"王五\"",[39,9055,60],{"class":45},[39,9057,1849],{"class":56},[39,9059,60],{"class":45},[39,9061,1465],{"class":56},[39,9063,5053],{"class":45},[39,9065,9067],{"class":41,"line":9066},41,[39,9068,3458],{"emptyLinePlaceholder":1145},[39,9070,9072],{"class":41,"line":9071},42,[39,9073,9074],{"class":102},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[39,9076,9078,9081,9083,9085],{"class":41,"line":9077},43,[39,9079,9080],{"class":45},"    s3.name",[39,9082,50],{"class":49},[39,9084,4736],{"class":1319},[39,9086,2359],{"class":45},[39,9088,9090,9093,9095,9097],{"class":41,"line":9089},44,[39,9091,9092],{"class":45},"    s3.age",[39,9094,50],{"class":49},[39,9096,1849],{"class":56},[39,9098,2359],{"class":45},[39,9100,9102,9105,9107,9109],{"class":41,"line":9101},45,[39,9103,9104],{"class":45},"    s3.score",[39,9106,50],{"class":49},[39,9108,1898],{"class":56},[39,9110,2359],{"class":45},[39,9112,9114],{"class":41,"line":9113},46,[39,9115,2630],{"class":45},[19,9117,9118],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9120,9122],{"id":9121},"_42结构体数组","4.2结构体数组",[19,9124,9125],{},"将自定义的结构体放入到数组中方便维护",[19,9127,9128,9129,9132],{},"语法：struct 结构体名 数组名",[39,9130,9131],{},"元素个数","={ {}，{},...{} };",[29,9134,9136],{"className":1209,"code":9135,"language":1211,"meta":34,"style":34},"#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",[36,9137,9138,9144,9154,9160,9165,9171,9175,9179,9185,9191,9195,9199,9207,9211,9216,9231,9235,9251,9267,9271,9276,9292,9307,9322,9327,9353,9357,9380,9384],{"__ignoreMap":34},[39,9139,9140,9142],{"class":41,"line":42},[39,9141,3007],{"class":49},[39,9143,3010],{"class":1319},[39,9145,9146,9148,9150,9152],{"class":41,"line":74},[39,9147,3015],{"class":49},[39,9149,3018],{"class":49},[39,9151,3022],{"class":3021},[39,9153,2359],{"class":45},[39,9155,9156,9158],{"class":41,"line":99},[39,9157,3007],{"class":49},[39,9159,8805],{"class":1319},[39,9161,9162],{"class":41,"line":106},[39,9163,9164],{"class":102},"\u002F\u002F1.定义结构体\n",[39,9166,9167,9169],{"class":41,"line":112},[39,9168,8815],{"class":49},[39,9170,8818],{"class":3021},[39,9172,9173],{"class":41,"line":118},[39,9174,2611],{"class":45},[39,9176,9177],{"class":41,"line":413},[39,9178,8841],{"class":45},[39,9180,9181,9183],{"class":41,"line":419},[39,9182,3043],{"class":49},[39,9184,8853],{"class":45},[39,9186,9187,9189],{"class":41,"line":425},[39,9188,3043],{"class":49},[39,9190,8865],{"class":45},[39,9192,9193],{"class":41,"line":443},[39,9194,3458],{"emptyLinePlaceholder":1145},[39,9196,9197],{"class":41,"line":449},[39,9198,5053],{"class":45},[39,9200,9201,9203,9205],{"class":41,"line":455},[39,9202,1224],{"class":49},[39,9204,3031],{"class":3021},[39,9206,3034],{"class":45},[39,9208,9209],{"class":41,"line":461},[39,9210,2611],{"class":45},[39,9212,9213],{"class":41,"line":475},[39,9214,9215],{"class":102},"    \u002F\u002F2.创建结构体数组\n",[39,9217,9218,9220,9222,9225,9227,9229],{"class":41,"line":665},[39,9219,8951],{"class":49},[39,9221,8954],{"class":3021},[39,9223,9224],{"class":45}," stuArray[",[39,9226,63],{"class":56},[39,9228,2138],{"class":45},[39,9230,5965],{"class":49},[39,9232,9233],{"class":41,"line":671},[39,9234,3088],{"class":45},[39,9236,9237,9239,9241,9243,9245,9247,9249],{"class":41,"line":684},[39,9238,5974],{"class":45},[39,9240,8972],{"class":1319},[39,9242,60],{"class":45},[39,9244,1849],{"class":56},[39,9246,60],{"class":45},[39,9248,1519],{"class":56},[39,9250,5987],{"class":45},[39,9252,9253,9255,9257,9259,9261,9263,9265],{"class":41,"line":2732},[39,9254,5974],{"class":45},[39,9256,4736],{"class":1319},[39,9258,60],{"class":45},[39,9260,1775],{"class":56},[39,9262,60],{"class":45},[39,9264,1775],{"class":56},[39,9266,2630],{"class":45},[39,9268,9269],{"class":41,"line":2737},[39,9270,3245],{"class":45},[39,9272,9273],{"class":41,"line":2751},[39,9274,9275],{"class":102},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[39,9277,9278,9281,9283,9286,9288,9290],{"class":41,"line":2756},[39,9279,9280],{"class":45},"    stuArray[",[39,9282,57],{"class":56},[39,9284,9285],{"class":45},"].name",[39,9287,50],{"class":49},[39,9289,4759],{"class":1319},[39,9291,2359],{"class":45},[39,9293,9294,9296,9298,9301,9303,9305],{"class":41,"line":2785},[39,9295,9280],{"class":45},[39,9297,57],{"class":56},[39,9299,9300],{"class":45},"].age",[39,9302,50],{"class":49},[39,9304,63],{"class":56},[39,9306,2359],{"class":45},[39,9308,9309,9311,9313,9316,9318,9320],{"class":41,"line":2790},[39,9310,9280],{"class":45},[39,9312,57],{"class":56},[39,9314,9315],{"class":45},"].score",[39,9317,50],{"class":49},[39,9319,63],{"class":56},[39,9321,2359],{"class":45},[39,9323,9324],{"class":41,"line":2807},[39,9325,9326],{"class":102},"    \u002F\u002F4.遍历结构体数组\n",[39,9328,9329,9331,9333,9335,9337,9339,9341,9343,9345,9347,9349,9351],{"class":41,"line":2812},[39,9330,4259],{"class":49},[39,9332,2716],{"class":45},[39,9334,1224],{"class":49},[39,9336,4090],{"class":45},[39,9338,50],{"class":49},[39,9340,260],{"class":56},[39,9342,4097],{"class":45},[39,9344,2108],{"class":49},[39,9346,63],{"class":56},[39,9348,4097],{"class":45},[39,9350,3350],{"class":49},[39,9352,209],{"class":45},[39,9354,9355],{"class":41,"line":2817},[39,9356,3088],{"class":45},[39,9358,9359,9361,9363,9366,9368,9371,9373,9376,9378],{"class":41,"line":2822},[39,9360,4509],{"class":45},[39,9362,2242],{"class":49},[39,9364,9365],{"class":45},"stuArray[i].name",[39,9367,2242],{"class":49},[39,9369,9370],{"class":45},"stuArray[i].age",[39,9372,2242],{"class":49},[39,9374,9375],{"class":45},"stuArray[i].score",[39,9377,2242],{"class":49},[39,9379,2264],{"class":45},[39,9381,9382],{"class":41,"line":2836},[39,9383,3245],{"class":45},[39,9385,9386],{"class":41,"line":2841},[39,9387,2630],{"class":45},[14,9389,9391],{"id":9390},"_43结构体指针","4.3结构体指针",[19,9393,9394],{},"作用：通过指针访问结构体中的成员",[19,9396,9397],{},"利用操作符->可以通过结构体指针访问结构体属性",[29,9399,9401],{"className":1209,"code":9400,"language":1211,"meta":34,"style":34},"#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",[36,9402,9403,9409,9419,9425,9429,9435,9439,9443,9449,9455,9459,9467,9471,9476,9501,9506,9521,9526,9549],{"__ignoreMap":34},[39,9404,9405,9407],{"class":41,"line":42},[39,9406,3007],{"class":49},[39,9408,3010],{"class":1319},[39,9410,9411,9413,9415,9417],{"class":41,"line":74},[39,9412,3015],{"class":49},[39,9414,3018],{"class":49},[39,9416,3022],{"class":3021},[39,9418,2359],{"class":45},[39,9420,9421,9423],{"class":41,"line":99},[39,9422,3007],{"class":49},[39,9424,8805],{"class":1319},[39,9426,9427],{"class":41,"line":106},[39,9428,9164],{"class":102},[39,9430,9431,9433],{"class":41,"line":112},[39,9432,8815],{"class":49},[39,9434,8818],{"class":3021},[39,9436,9437],{"class":41,"line":118},[39,9438,2611],{"class":45},[39,9440,9441],{"class":41,"line":413},[39,9442,8841],{"class":45},[39,9444,9445,9447],{"class":41,"line":419},[39,9446,3043],{"class":49},[39,9448,8853],{"class":45},[39,9450,9451,9453],{"class":41,"line":425},[39,9452,3043],{"class":49},[39,9454,8865],{"class":45},[39,9456,9457],{"class":41,"line":443},[39,9458,5053],{"class":45},[39,9460,9461,9463,9465],{"class":41,"line":449},[39,9462,1224],{"class":49},[39,9464,3031],{"class":3021},[39,9466,3034],{"class":45},[39,9468,9469],{"class":41,"line":455},[39,9470,2611],{"class":45},[39,9472,9473],{"class":41,"line":461},[39,9474,9475],{"class":102},"    \u002F\u002F创建学生结构体变量\n",[39,9477,9478,9480,9482,9485,9487,9489,9491,9493,9495,9497,9499],{"class":41,"line":475},[39,9479,8951],{"class":49},[39,9481,8954],{"class":3021},[39,9483,9484],{"class":45}," s",[39,9486,50],{"class":49},[39,9488,2094],{"class":45},[39,9490,8972],{"class":1319},[39,9492,60],{"class":45},[39,9494,1849],{"class":56},[39,9496,60],{"class":45},[39,9498,2780],{"class":56},[39,9500,5053],{"class":45},[39,9502,9503],{"class":41,"line":665},[39,9504,9505],{"class":102},"    \u002F\u002F通过指针指向结构体变量\n",[39,9507,9508,9510,9512,9514,9516,9518],{"class":41,"line":671},[39,9509,8951],{"class":49},[39,9511,8954],{"class":3021},[39,9513,7574],{"class":49},[39,9515,19],{"class":45},[39,9517,7395],{"class":49},[39,9519,9520],{"class":45},"s\n",[39,9522,9523],{"class":41,"line":684},[39,9524,9525],{"class":102},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[39,9527,9528,9530,9532,9535,9537,9540,9542,9545,9547],{"class":41,"line":2732},[39,9529,2616],{"class":45},[39,9531,2242],{"class":49},[39,9533,9534],{"class":45},"p->name",[39,9536,2242],{"class":49},[39,9538,9539],{"class":45},"p->age",[39,9541,2242],{"class":49},[39,9543,9544],{"class":45},"p->score",[39,9546,2242],{"class":49},[39,9548,2264],{"class":45},[39,9550,9551],{"class":41,"line":2737},[39,9552,2630],{"class":45},[14,9554,9556],{"id":9555},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,9558,9559],{},"作用：结构体中的成员可以是另一个结构体",[19,9561,9562],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[29,9564,9566],{"className":1209,"code":9565,"language":1211,"meta":34,"style":34},"#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",[36,9567,9568,9574,9584,9590,9595,9603,9607,9611,9617,9623,9627,9632,9639,9643,9650,9654,9660,9665,9669,9677,9681,9686,9691,9696,9707,9719,9730,9743,9754,9765],{"__ignoreMap":34},[39,9569,9570,9572],{"class":41,"line":42},[39,9571,3007],{"class":49},[39,9573,3010],{"class":1319},[39,9575,9576,9578,9580,9582],{"class":41,"line":74},[39,9577,3015],{"class":49},[39,9579,3018],{"class":49},[39,9581,3022],{"class":3021},[39,9583,2359],{"class":45},[39,9585,9586,9588],{"class":41,"line":99},[39,9587,3007],{"class":49},[39,9589,8805],{"class":1319},[39,9591,9592],{"class":41,"line":106},[39,9593,9594],{"class":102},"\u002F\u002F定义学生结构体\n",[39,9596,9597,9599,9601],{"class":41,"line":112},[39,9598,8815],{"class":49},[39,9600,8954],{"class":3021},[39,9602,3732],{"class":45},[39,9604,9605],{"class":41,"line":118},[39,9606,2611],{"class":45},[39,9608,9609],{"class":41,"line":413},[39,9610,8841],{"class":45},[39,9612,9613,9615],{"class":41,"line":419},[39,9614,3043],{"class":49},[39,9616,8853],{"class":45},[39,9618,9619,9621],{"class":41,"line":425},[39,9620,3043],{"class":49},[39,9622,8865],{"class":45},[39,9624,9625],{"class":41,"line":443},[39,9626,2630],{"class":45},[39,9628,9629],{"class":41,"line":449},[39,9630,9631],{"class":102},"\u002F\u002F定义老师结构体\n",[39,9633,9634,9636],{"class":41,"line":455},[39,9635,8815],{"class":49},[39,9637,9638],{"class":3021}," Teacher\n",[39,9640,9641],{"class":41,"line":461},[39,9642,2611],{"class":45},[39,9644,9645,9647],{"class":41,"line":475},[39,9646,3043],{"class":49},[39,9648,9649],{"class":45}," id;\n",[39,9651,9652],{"class":41,"line":665},[39,9653,8841],{"class":45},[39,9655,9656,9658],{"class":41,"line":671},[39,9657,3043],{"class":49},[39,9659,8853],{"class":45},[39,9661,9662],{"class":41,"line":684},[39,9663,9664],{"class":45},"    Student stu;\n",[39,9666,9667],{"class":41,"line":2732},[39,9668,2630],{"class":45},[39,9670,9671,9673,9675],{"class":41,"line":2737},[39,9672,1224],{"class":49},[39,9674,3031],{"class":3021},[39,9676,7034],{"class":45},[39,9678,9679],{"class":41,"line":2751},[39,9680,2611],{"class":45},[39,9682,9683],{"class":41,"line":2756},[39,9684,9685],{"class":102},"    \u002F\u002F结构体嵌套结构体\n",[39,9687,9688],{"class":41,"line":2785},[39,9689,9690],{"class":102},"    \u002F\u002F创建老师\n",[39,9692,9693],{"class":41,"line":2790},[39,9694,9695],{"class":45},"    Teacher t;\n",[39,9697,9698,9701,9703,9705],{"class":41,"line":2807},[39,9699,9700],{"class":45},"    t.id",[39,9702,50],{"class":49},[39,9704,1519],{"class":56},[39,9706,2359],{"class":45},[39,9708,9709,9712,9714,9717],{"class":41,"line":2812},[39,9710,9711],{"class":45},"    t.name",[39,9713,50],{"class":49},[39,9715,9716],{"class":1319},"\"老王\"",[39,9718,2359],{"class":45},[39,9720,9721,9724,9726,9728],{"class":41,"line":2817},[39,9722,9723],{"class":45},"    t.age",[39,9725,50],{"class":49},[39,9727,1849],{"class":56},[39,9729,2359],{"class":45},[39,9731,9732,9735,9737,9740],{"class":41,"line":2822},[39,9733,9734],{"class":45},"    t.stu.name",[39,9736,50],{"class":49},[39,9738,9739],{"class":1319},"\"小王\"",[39,9741,9742],{"class":45},"；\n",[39,9744,9745,9748,9750,9752],{"class":41,"line":2836},[39,9746,9747],{"class":45},"    t.stu.age",[39,9749,50],{"class":49},[39,9751,1898],{"class":56},[39,9753,2359],{"class":45},[39,9755,9756,9759,9761,9763],{"class":41,"line":2841},[39,9757,9758],{"class":45},"    t.stu.score",[39,9760,50],{"class":49},[39,9762,94],{"class":56},[39,9764,2359],{"class":45},[39,9766,9767],{"class":41,"line":3635},[39,9768,2630],{"class":45},[14,9770,9772],{"id":9771},"_45结构体做函数参数","4.5结构体做函数参数",[19,9774,9775],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[29,9777,9779],{"className":1209,"code":9778,"language":1211,"meta":34,"style":34},"#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",[36,9780,9781,9787,9797,9803,9809,9813,9817,9823,9829,9833,9838,9843,9860,9864,9897,9901,9906,9925,9929,9960,9964,9972,9976,9985,9997,10009,10021,10034,10042,10055,10067,10075],{"__ignoreMap":34},[39,9782,9783,9785],{"class":41,"line":42},[39,9784,3007],{"class":49},[39,9786,3010],{"class":1319},[39,9788,9789,9791,9793,9795],{"class":41,"line":74},[39,9790,3015],{"class":49},[39,9792,3018],{"class":49},[39,9794,3022],{"class":3021},[39,9796,2359],{"class":45},[39,9798,9799,9801],{"class":41,"line":99},[39,9800,3007],{"class":49},[39,9802,8805],{"class":1319},[39,9804,9805,9807],{"class":41,"line":106},[39,9806,8815],{"class":49},[39,9808,8818],{"class":3021},[39,9810,9811],{"class":41,"line":112},[39,9812,2611],{"class":45},[39,9814,9815],{"class":41,"line":118},[39,9816,8841],{"class":45},[39,9818,9819,9821],{"class":41,"line":413},[39,9820,3043],{"class":49},[39,9822,8853],{"class":45},[39,9824,9825,9827],{"class":41,"line":419},[39,9826,3043],{"class":49},[39,9828,8865],{"class":45},[39,9830,9831],{"class":41,"line":425},[39,9832,5053],{"class":45},[39,9834,9835],{"class":41,"line":443},[39,9836,9837],{"class":102},"\u002F\u002F打印学生信息的函数\n",[39,9839,9840],{"class":41,"line":449},[39,9841,9842],{"class":102},"\u002F\u002F值传递\n",[39,9844,9845,9847,9850,9852,9854,9856,9858],{"class":41,"line":455},[39,9846,6420],{"class":49},[39,9848,9849],{"class":3021}," printStudent1",[39,9851,1221],{"class":45},[39,9853,8815],{"class":49},[39,9855,8954],{"class":3021},[39,9857,9484],{"class":254},[39,9859,209],{"class":45},[39,9861,9862],{"class":41,"line":461},[39,9863,2611],{"class":45},[39,9865,9866,9868,9870,9873,9875,9878,9880,9883,9885,9887,9889,9892,9894],{"class":41,"line":475},[39,9867,7585],{"class":45},[39,9869,2242],{"class":49},[39,9871,9872],{"class":45}," s.name ",[39,9874,2242],{"class":49},[39,9876,9877],{"class":1319}," \" \"",[39,9879,2510],{"class":49},[39,9881,9882],{"class":45}," s.age ",[39,9884,2242],{"class":49},[39,9886,9877],{"class":1319},[39,9888,2510],{"class":49},[39,9890,9891],{"class":45}," s.score ",[39,9893,2242],{"class":49},[39,9895,9896],{"class":45}," endl;\n",[39,9898,9899],{"class":41,"line":665},[39,9900,2630],{"class":45},[39,9902,9903],{"class":41,"line":671},[39,9904,9905],{"class":102},"\u002F\u002F地址传递\n",[39,9907,9908,9910,9913,9915,9917,9919,9921,9923],{"class":41,"line":684},[39,9909,6420],{"class":49},[39,9911,9912],{"class":3021}," printStudent2",[39,9914,1221],{"class":45},[39,9916,8815],{"class":49},[39,9918,8954],{"class":3021},[39,9920,7574],{"class":49},[39,9922,392],{"class":254},[39,9924,209],{"class":45},[39,9926,9927],{"class":41,"line":2732},[39,9928,2611],{"class":45},[39,9930,9931,9933,9935,9938,9940,9942,9944,9947,9949,9951,9953,9956,9958],{"class":41,"line":2737},[39,9932,7585],{"class":45},[39,9934,2242],{"class":49},[39,9936,9937],{"class":45}," s->name ",[39,9939,2242],{"class":49},[39,9941,9877],{"class":1319},[39,9943,2510],{"class":49},[39,9945,9946],{"class":45}," s->age ",[39,9948,2242],{"class":49},[39,9950,9877],{"class":1319},[39,9952,2510],{"class":49},[39,9954,9955],{"class":45}," s->score ",[39,9957,2242],{"class":49},[39,9959,9896],{"class":45},[39,9961,9962],{"class":41,"line":2751},[39,9963,2630],{"class":45},[39,9965,9966,9968,9970],{"class":41,"line":2756},[39,9967,1224],{"class":49},[39,9969,3031],{"class":3021},[39,9971,3034],{"class":45},[39,9973,9974],{"class":41,"line":2785},[39,9975,2611],{"class":45},[39,9977,9978,9980,9982],{"class":41,"line":2790},[39,9979,8951],{"class":49},[39,9981,8954],{"class":3021},[39,9983,9984],{"class":45}," s;\n",[39,9986,9987,9990,9992,9995],{"class":41,"line":2807},[39,9988,9989],{"class":45},"    s.name ",[39,9991,50],{"class":49},[39,9993,9994],{"class":1319}," \"张三\"",[39,9996,2359],{"class":45},[39,9998,9999,10002,10004,10007],{"class":41,"line":2812},[39,10000,10001],{"class":45},"    s.age ",[39,10003,50],{"class":49},[39,10005,10006],{"class":56}," 20",[39,10008,2359],{"class":45},[39,10010,10011,10014,10016,10019],{"class":41,"line":2817},[39,10012,10013],{"class":45},"    s.score ",[39,10015,50],{"class":49},[39,10017,10018],{"class":56}," 85",[39,10020,2359],{"class":45},[39,10022,10023,10025,10027,10030,10032],{"class":41,"line":2822},[39,10024,2616],{"class":45},[39,10026,2242],{"class":49},[39,10028,10029],{"class":1319},"\"值传递:\"",[39,10031,2242],{"class":49},[39,10033,2264],{"class":45},[39,10035,10036,10039],{"class":41,"line":2836},[39,10037,10038],{"class":3021},"    printStudent1",[39,10040,10041],{"class":45},"(s);\n",[39,10043,10044,10046,10048,10051,10053],{"class":41,"line":2841},[39,10045,2616],{"class":45},[39,10047,2242],{"class":49},[39,10049,10050],{"class":1319},"\"地址传递:\"",[39,10052,2242],{"class":49},[39,10054,2264],{"class":45},[39,10056,10057,10060,10062,10064],{"class":41,"line":3635},[39,10058,10059],{"class":3021},"    printStudent2",[39,10061,1221],{"class":45},[39,10063,1557],{"class":49},[39,10065,10066],{"class":45},"s); \n",[39,10068,10069,10071,10073],{"class":41,"line":3649},[39,10070,5148],{"class":49},[39,10072,5151],{"class":56},[39,10074,2359],{"class":45},[39,10076,10077],{"class":41,"line":3657},[39,10078,2630],{"class":45},[19,10080,10081],{},"注意：",[2205,10083,10084,10087],{},[1174,10085,10086],{},"1.先定义结构体，不要在函数中写结构体的定义",[1174,10088,10089],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10091,10093],{"id":10092},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,10095,10096],{},"用const防止误操作",[29,10098,10100],{"className":1209,"code":10099,"language":1211,"meta":34,"style":34},"#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",[36,10101,10102,10108,10118,10124,10129,10133,10137,10143,10149,10153,10169,10173,10196,10200,10208,10212,10233,10240,10244],{"__ignoreMap":34},[39,10103,10104,10106],{"class":41,"line":42},[39,10105,3007],{"class":49},[39,10107,3010],{"class":1319},[39,10109,10110,10112,10114,10116],{"class":41,"line":74},[39,10111,3015],{"class":49},[39,10113,3018],{"class":49},[39,10115,3022],{"class":3021},[39,10117,2359],{"class":45},[39,10119,10120,10122],{"class":41,"line":99},[39,10121,3007],{"class":49},[39,10123,8805],{"class":1319},[39,10125,10126],{"class":41,"line":106},[39,10127,10128],{"class":45},"sctuct Student\n",[39,10130,10131],{"class":41,"line":112},[39,10132,2611],{"class":45},[39,10134,10135],{"class":41,"line":118},[39,10136,8841],{"class":45},[39,10138,10139,10141],{"class":41,"line":413},[39,10140,3043],{"class":49},[39,10142,8853],{"class":45},[39,10144,10145,10147],{"class":41,"line":419},[39,10146,3043],{"class":49},[39,10148,8865],{"class":45},[39,10150,10151],{"class":41,"line":425},[39,10152,5053],{"class":45},[39,10154,10155,10157,10160,10162,10165,10167],{"class":41,"line":443},[39,10156,6420],{"class":49},[39,10158,10159],{"class":3021}," printStudents",[39,10161,1221],{"class":45},[39,10163,10164],{"class":3021},"student",[39,10166,9484],{"class":254},[39,10168,209],{"class":45},[39,10170,10171],{"class":41,"line":449},[39,10172,2611],{"class":45},[39,10174,10175,10177,10179,10182,10184,10187,10189,10192,10194],{"class":41,"line":455},[39,10176,2616],{"class":45},[39,10178,2242],{"class":49},[39,10180,10181],{"class":45},"s.name",[39,10183,2242],{"class":49},[39,10185,10186],{"class":45},"s.age",[39,10188,2242],{"class":49},[39,10190,10191],{"class":45},"s.score",[39,10193,2242],{"class":49},[39,10195,2264],{"class":45},[39,10197,10198],{"class":41,"line":461},[39,10199,2630],{"class":45},[39,10201,10202,10204,10206],{"class":41,"line":475},[39,10203,1224],{"class":49},[39,10205,3031],{"class":3021},[39,10207,7034],{"class":45},[39,10209,10210],{"class":41,"line":665},[39,10211,2611],{"class":45},[39,10213,10214,10217,10219,10221,10223,10225,10227,10229,10231],{"class":41,"line":671},[39,10215,10216],{"class":45},"    Student s",[39,10218,50],{"class":49},[39,10220,2094],{"class":45},[39,10222,8972],{"class":1319},[39,10224,60],{"class":45},[39,10226,1849],{"class":56},[39,10228,60],{"class":45},[39,10230,1849],{"class":56},[39,10232,5053],{"class":45},[39,10234,10235,10238],{"class":41,"line":684},[39,10236,10237],{"class":3021},"    printStudent",[39,10239,10041],{"class":45},[39,10241,10242],{"class":41,"line":2732},[39,10243,3458],{"emptyLinePlaceholder":1145},[39,10245,10246],{"class":41,"line":2737},[39,10247,2630],{"class":45},[19,10249,10081],{},[2205,10251,10252,10255,10258],{},[1174,10253,10254],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[1174,10256,10257],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[1174,10259,10260],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[29,10262,10264],{"className":1209,"code":10263,"language":1211,"meta":34,"style":34},"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",[36,10265,10266,10285,10289,10294,10314],{"__ignoreMap":34},[39,10267,10268,10270,10272,10274,10276,10279,10281,10283],{"class":41,"line":42},[39,10269,6420],{"class":49},[39,10271,10159],{"class":3021},[39,10273,1221],{"class":45},[39,10275,7848],{"class":49},[39,10277,10278],{"class":3021}," student",[39,10280,7574],{"class":49},[39,10282,392],{"class":254},[39,10284,209],{"class":45},[39,10286,10287],{"class":41,"line":74},[39,10288,2611],{"class":45},[39,10290,10291],{"class":41,"line":99},[39,10292,10293],{"class":102},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[39,10295,10296,10298,10300,10302,10304,10306,10308,10310,10312],{"class":41,"line":106},[39,10297,2616],{"class":45},[39,10299,2242],{"class":49},[39,10301,10181],{"class":45},[39,10303,2242],{"class":49},[39,10305,10186],{"class":45},[39,10307,2242],{"class":49},[39,10309,10191],{"class":45},[39,10311,2242],{"class":49},[39,10313,2264],{"class":45},[39,10315,10316],{"class":41,"line":112},[39,10317,2630],{"class":45},[14,10319,10321],{"id":10320},"_47案例","4.7案例",[1171,10323,10324],{},[1174,10325,10326],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[29,10328,10330],{"className":1209,"code":10329,"language":1211,"meta":34,"style":34},"#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",[36,10331,10332,10338,10348,10354,10361,10365,10371,10375,10380,10386,10392,10396,10400,10406,10410,10415,10420,10433,10437,10442,10468,10472,10484,10511,10515,10527,10537,10541,10546,10575,10579,10591,10600,10627,10638,10648,10652,10656,10660,10665,10689,10693,10717,10721,10740,10766,10770,10795,10818,10842,10847,10852,10857,10866,10871,10877,10898,10904,10918,10924,10951,10960,10966,10974,10979],{"__ignoreMap":34},[39,10333,10334,10336],{"class":41,"line":42},[39,10335,3007],{"class":49},[39,10337,3010],{"class":1319},[39,10339,10340,10342,10344,10346],{"class":41,"line":74},[39,10341,3015],{"class":49},[39,10343,3018],{"class":49},[39,10345,3022],{"class":3021},[39,10347,2359],{"class":45},[39,10349,10350,10352],{"class":41,"line":99},[39,10351,3007],{"class":49},[39,10353,8805],{"class":1319},[39,10355,10356,10358],{"class":41,"line":106},[39,10357,3007],{"class":49},[39,10359,10360],{"class":1319},"\u003Cctime>\n",[39,10362,10363],{"class":41,"line":112},[39,10364,9594],{"class":102},[39,10366,10367,10369],{"class":41,"line":118},[39,10368,8815],{"class":49},[39,10370,8818],{"class":3021},[39,10372,10373],{"class":41,"line":413},[39,10374,2611],{"class":45},[39,10376,10377],{"class":41,"line":419},[39,10378,10379],{"class":45},"    string sName;\n",[39,10381,10382,10384],{"class":41,"line":425},[39,10383,3043],{"class":49},[39,10385,8853],{"class":45},[39,10387,10388,10390],{"class":41,"line":443},[39,10389,3043],{"class":49},[39,10391,8865],{"class":45},[39,10393,10394],{"class":41,"line":449},[39,10395,5053],{"class":45},[39,10397,10398],{"class":41,"line":455},[39,10399,9631],{"class":102},[39,10401,10402,10404],{"class":41,"line":461},[39,10403,8815],{"class":49},[39,10405,9638],{"class":3021},[39,10407,10408],{"class":41,"line":475},[39,10409,2611],{"class":45},[39,10411,10412],{"class":41,"line":665},[39,10413,10414],{"class":45},"    string tName;\n",[39,10416,10417],{"class":41,"line":671},[39,10418,10419],{"class":102},"    \u002F\u002F学生数组\n",[39,10421,10422,10424,10426,10429,10431],{"class":41,"line":684},[39,10423,8951],{"class":49},[39,10425,8954],{"class":3021},[39,10427,10428],{"class":45}," sArray[",[39,10430,89],{"class":56},[39,10432,5747],{"class":45},[39,10434,10435],{"class":41,"line":2732},[39,10436,5053],{"class":45},[39,10438,10439],{"class":41,"line":2737},[39,10440,10441],{"class":102},"\u002F\u002F给老师和学生赋值的函数\n",[39,10443,10444,10446,10449,10451,10453,10456,10459,10462,10464,10466],{"class":41,"line":2751},[39,10445,6420],{"class":49},[39,10447,10448],{"class":3021}," allocateSpace",[39,10450,1221],{"class":45},[39,10452,8815],{"class":49},[39,10454,10455],{"class":3021}," Teacher",[39,10457,10458],{"class":254}," tArray",[39,10460,10461],{"class":45},"[],",[39,10463,1224],{"class":49},[39,10465,8387],{"class":254},[39,10467,209],{"class":45},[39,10469,10470],{"class":41,"line":2756},[39,10471,2611],{"class":45},[39,10473,10474,10477,10479,10482],{"class":41,"line":2785},[39,10475,10476],{"class":45},"    string nameSeed",[39,10478,50],{"class":49},[39,10480,10481],{"class":1319},"\"ABCDE\"",[39,10483,2359],{"class":45},[39,10485,10486,10488,10490,10492,10495,10497,10499,10502,10504,10507,10509],{"class":41,"line":2790},[39,10487,4259],{"class":49},[39,10489,2716],{"class":45},[39,10491,1224],{"class":49},[39,10493,10494],{"class":45}," i ",[39,10496,50],{"class":49},[39,10498,5151],{"class":56},[39,10500,10501],{"class":45},"; i ",[39,10503,2108],{"class":49},[39,10505,10506],{"class":45}," len; i",[39,10508,3350],{"class":49},[39,10510,209],{"class":45},[39,10512,10513],{"class":41,"line":2807},[39,10514,3088],{"class":45},[39,10516,10517,10520,10522,10525],{"class":41,"line":2812},[39,10518,10519],{"class":45},"        tArray[i].tName ",[39,10521,50],{"class":49},[39,10523,10524],{"class":1319}," \"Teacher_\"",[39,10526,2359],{"class":45},[39,10528,10529,10531,10534],{"class":41,"line":2817},[39,10530,10519],{"class":45},[39,10532,10533],{"class":49},"+=",[39,10535,10536],{"class":45},"nameSeed[i];\n",[39,10538,10539],{"class":41,"line":2822},[39,10540,3458],{"emptyLinePlaceholder":1145},[39,10542,10543],{"class":41,"line":2836},[39,10544,10545],{"class":102},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[39,10547,10548,10550,10552,10554,10557,10559,10561,10564,10566,10568,10571,10573],{"class":41,"line":2841},[39,10549,4461],{"class":49},[39,10551,2716],{"class":45},[39,10553,1224],{"class":49},[39,10555,10556],{"class":45}," j ",[39,10558,50],{"class":49},[39,10560,5151],{"class":56},[39,10562,10563],{"class":45},"; j ",[39,10565,2108],{"class":49},[39,10567,3206],{"class":56},[39,10569,10570],{"class":45},"; j",[39,10572,3350],{"class":49},[39,10574,209],{"class":45},[39,10576,10577],{"class":41,"line":3635},[39,10578,3568],{"class":45},[39,10580,10581,10584,10586,10589],{"class":41,"line":3649},[39,10582,10583],{"class":45},"            tArray[i].sArray[j].sName ",[39,10585,50],{"class":49},[39,10587,10588],{"class":1319}," \"Student_\"",[39,10590,2359],{"class":45},[39,10592,10593,10595,10597],{"class":41,"line":3657},[39,10594,10583],{"class":45},[39,10596,10533],{"class":49},[39,10598,10599],{"class":45}," nameSeed[j];\n",[39,10601,10602,10605,10608,10610,10612,10614,10616,10618,10620,10622,10624],{"class":41,"line":3662},[39,10603,10604],{"class":49},"            int",[39,10606,10607],{"class":45}," random",[39,10609,50],{"class":49},[39,10611,3482],{"class":3021},[39,10613,3485],{"class":45},[39,10615,1534],{"class":49},[39,10617,2105],{"class":56},[39,10619,1682],{"class":49},[39,10621,1604],{"class":56},[39,10623,1273],{"class":45},[39,10625,10626],{"class":102},"\u002F\u002F40~99\n",[39,10628,10629,10632,10634,10636],{"class":41,"line":3668},[39,10630,10631],{"class":45},"            tArray[i].sArray[j].age ",[39,10633,50],{"class":49},[39,10635,10006],{"class":56},[39,10637,2359],{"class":45},[39,10639,10640,10643,10645],{"class":41,"line":3674},[39,10641,10642],{"class":45},"            tArray[i].sArray[j].score ",[39,10644,50],{"class":49},[39,10646,10647],{"class":45}," random;\n",[39,10649,10650],{"class":41,"line":3679},[39,10651,3587],{"class":45},[39,10653,10654],{"class":41,"line":9004},[39,10655,3245],{"class":45},[39,10657,10658],{"class":41,"line":9028},[39,10659,2630],{"class":45},[39,10661,10662],{"class":41,"line":9033},[39,10663,10664],{"class":102},"\u002F\u002F打印所有信息的函数\n",[39,10666,10667,10669,10672,10674,10676,10678,10680,10683,10685,10687],{"class":41,"line":9039},[39,10668,6420],{"class":49},[39,10670,10671],{"class":3021}," printInfo",[39,10673,1221],{"class":45},[39,10675,8815],{"class":49},[39,10677,10455],{"class":3021},[39,10679,10458],{"class":254},[39,10681,10682],{"class":45},"[], ",[39,10684,1224],{"class":49},[39,10686,8387],{"class":254},[39,10688,209],{"class":45},[39,10690,10691],{"class":41,"line":9066},[39,10692,2611],{"class":45},[39,10694,10695,10697,10699,10701,10703,10705,10707,10709,10711,10713,10715],{"class":41,"line":9071},[39,10696,4259],{"class":49},[39,10698,2716],{"class":45},[39,10700,1224],{"class":49},[39,10702,10494],{"class":45},[39,10704,50],{"class":49},[39,10706,5151],{"class":56},[39,10708,10501],{"class":45},[39,10710,2108],{"class":49},[39,10712,10506],{"class":45},[39,10714,3350],{"class":49},[39,10716,209],{"class":45},[39,10718,10719],{"class":41,"line":9077},[39,10720,3088],{"class":45},[39,10722,10723,10726,10728,10731,10733,10736,10738],{"class":41,"line":9089},[39,10724,10725],{"class":45},"        cout ",[39,10727,2242],{"class":49},[39,10729,10730],{"class":1319}," \"Teacher: \"",[39,10732,2510],{"class":49},[39,10734,10735],{"class":45}," tArray[i].tName ",[39,10737,2242],{"class":49},[39,10739,9896],{"class":45},[39,10741,10742,10744,10746,10748,10750,10752,10754,10756,10758,10760,10762,10764],{"class":41,"line":9101},[39,10743,4461],{"class":49},[39,10745,2716],{"class":45},[39,10747,1224],{"class":49},[39,10749,10556],{"class":45},[39,10751,50],{"class":49},[39,10753,5151],{"class":56},[39,10755,10563],{"class":45},[39,10757,2108],{"class":49},[39,10759,3206],{"class":56},[39,10761,10570],{"class":45},[39,10763,3350],{"class":49},[39,10765,209],{"class":45},[39,10767,10768],{"class":41,"line":9113},[39,10769,3568],{"class":45},[39,10771,10773,10776,10778,10781,10783,10786,10788,10791,10793],{"class":41,"line":10772},47,[39,10774,10775],{"class":45},"            cout ",[39,10777,2242],{"class":49},[39,10779,10780],{"class":1319}," \"",[39,10782,2299],{"class":56},[39,10784,10785],{"class":1319},"Student: \"",[39,10787,2510],{"class":49},[39,10789,10790],{"class":45}," tArray[i].sArray[j].sName",[39,10792,2242],{"class":49},[39,10794,2264],{"class":45},[39,10796,10798,10800,10802,10804,10806,10809,10811,10814,10816],{"class":41,"line":10797},48,[39,10799,10775],{"class":45},[39,10801,2242],{"class":49},[39,10803,10780],{"class":1319},[39,10805,2299],{"class":56},[39,10807,10808],{"class":1319},"Age: \"",[39,10810,2510],{"class":49},[39,10812,10813],{"class":45}," tArray[i].sArray[j].age ",[39,10815,2242],{"class":49},[39,10817,9896],{"class":45},[39,10819,10821,10823,10825,10827,10829,10832,10834,10837,10839],{"class":41,"line":10820},49,[39,10822,10775],{"class":45},[39,10824,2242],{"class":49},[39,10826,10780],{"class":1319},[39,10828,2299],{"class":56},[39,10830,10831],{"class":1319},"Score: \"",[39,10833,2510],{"class":49},[39,10835,10836],{"class":45}," tArray[i].sArray[j].score ",[39,10838,2242],{"class":49},[39,10840,10841],{"class":45}," endl;   \n",[39,10843,10845],{"class":41,"line":10844},50,[39,10846,3587],{"class":45},[39,10848,10850],{"class":41,"line":10849},51,[39,10851,3245],{"class":45},[39,10853,10855],{"class":41,"line":10854},52,[39,10856,2630],{"class":45},[39,10858,10860,10862,10864],{"class":41,"line":10859},53,[39,10861,1224],{"class":49},[39,10863,3031],{"class":3021},[39,10865,3034],{"class":45},[39,10867,10869],{"class":41,"line":10868},54,[39,10870,2611],{"class":45},[39,10872,10874],{"class":41,"line":10873},55,[39,10875,10876],{"class":102},"    \u002F\u002F随机数种子\n",[39,10878,10880,10882,10884,10886,10888,10890,10892,10894,10896],{"class":41,"line":10879},56,[39,10881,3431],{"class":3021},[39,10883,3434],{"class":45},[39,10885,3437],{"class":49},[39,10887,3440],{"class":49},[39,10889,1632],{"class":45},[39,10891,3445],{"class":3021},[39,10893,1221],{"class":45},[39,10895,3450],{"class":56},[39,10897,3453],{"class":45},[39,10899,10901],{"class":41,"line":10900},57,[39,10902,10903],{"class":102},"    \u002F\u002F1.创建3名老师的数组\n",[39,10905,10907,10909,10911,10914,10916],{"class":41,"line":10906},58,[39,10908,8951],{"class":49},[39,10910,10455],{"class":3021},[39,10912,10913],{"class":45}," tArray[",[39,10915,68],{"class":56},[39,10917,5747],{"class":45},[39,10919,10921],{"class":41,"line":10920},59,[39,10922,10923],{"class":102},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[39,10925,10927,10929,10932,10934,10937,10940,10942,10944,10947,10949],{"class":41,"line":10926},60,[39,10928,3043],{"class":49},[39,10930,10931],{"class":45}," len ",[39,10933,50],{"class":49},[39,10935,10936],{"class":49}," sizeof",[39,10938,10939],{"class":45},"(tArray) ",[39,10941,1784],{"class":49},[39,10943,10936],{"class":49},[39,10945,10946],{"class":45},"(tArray[",[39,10948,260],{"class":56},[39,10950,4914],{"class":45},[39,10952,10954,10957],{"class":41,"line":10953},61,[39,10955,10956],{"class":3021},"    allocateSpace",[39,10958,10959],{"class":45},"(tArray, len);\n",[39,10961,10963],{"class":41,"line":10962},62,[39,10964,10965],{"class":102},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[39,10967,10969,10972],{"class":41,"line":10968},63,[39,10970,10971],{"class":3021},"    printInfo",[39,10973,10959],{"class":45},[39,10975,10977],{"class":41,"line":10976},64,[39,10978,3458],{"emptyLinePlaceholder":1145},[39,10980,10982],{"class":41,"line":10981},65,[39,10983,2630],{"class":45},[1171,10985,10986],{"start":74},[1174,10987,10988,10991],{},[304,10989,10990],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10993,10994],{},"五名英雄信息如下：",[29,10996,11000],{"className":10997,"code":10998,"language":10999,"meta":34,"style":34},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[36,11001,11002,11020,11037,11054,11071],{"__ignoreMap":34},[39,11003,11004,11006,11009,11011,11013,11015,11018],{"class":41,"line":42},[39,11005,5974],{"class":45},[39,11007,11008],{"class":1319},"\"刘备\"",[39,11010,60],{"class":45},[39,11012,1973],{"class":56},[39,11014,60],{"class":45},[39,11016,11017],{"class":1319},"\"男\"",[39,11019,5987],{"class":45},[39,11021,11022,11024,11027,11029,11031,11033,11035],{"class":41,"line":74},[39,11023,5974],{"class":45},[39,11025,11026],{"class":1319},"\"关羽\"",[39,11028,60],{"class":45},[39,11030,1948],{"class":56},[39,11032,60],{"class":45},[39,11034,11017],{"class":1319},[39,11036,5987],{"class":45},[39,11038,11039,11041,11044,11046,11048,11050,11052],{"class":41,"line":99},[39,11040,5974],{"class":45},[39,11042,11043],{"class":1319},"\"张飞\"",[39,11045,60],{"class":45},[39,11047,1898],{"class":56},[39,11049,60],{"class":45},[39,11051,11017],{"class":1319},[39,11053,5987],{"class":45},[39,11055,11056,11058,11061,11063,11065,11067,11069],{"class":41,"line":106},[39,11057,5974],{"class":45},[39,11059,11060],{"class":1319},"\"赵云\"",[39,11062,60],{"class":45},[39,11064,1923],{"class":56},[39,11066,60],{"class":45},[39,11068,11017],{"class":1319},[39,11070,5987],{"class":45},[39,11072,11073,11075,11078,11080,11082,11084,11087],{"class":41,"line":112},[39,11074,5974],{"class":45},[39,11076,11077],{"class":1319},"\"貂蝉\"",[39,11079,60],{"class":45},[39,11081,1874],{"class":56},[39,11083,60],{"class":45},[39,11085,11086],{"class":1319},"\"女\"",[39,11088,5987],{"class":45},[19,11090,11091],{},"代码：",[29,11093,11095],{"className":1209,"code":11094,"language":1211,"meta":34,"style":34},"#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",[36,11096,11097,11103,11113,11119,11126,11130,11134,11140,11145,11149,11154,11177,11181,11206,11210,11243,11248,11277,11282,11297,11323,11343,11348,11353,11357,11361,11366,11388,11392,11416,11420,11482,11486,11490,11498,11502,11507,11518,11522,11538,11554,11570,11586,11602,11606,11626,11648,11653,11666,11673,11678,11684,11689,11702,11708],{"__ignoreMap":34},[39,11098,11099,11101],{"class":41,"line":42},[39,11100,3007],{"class":49},[39,11102,3010],{"class":1319},[39,11104,11105,11107,11109,11111],{"class":41,"line":74},[39,11106,3015],{"class":49},[39,11108,3018],{"class":49},[39,11110,3022],{"class":3021},[39,11112,2359],{"class":45},[39,11114,11115,11117],{"class":41,"line":99},[39,11116,3007],{"class":49},[39,11118,8805],{"class":1319},[39,11120,11121,11123],{"class":41,"line":106},[39,11122,8815],{"class":49},[39,11124,11125],{"class":3021}," Sanguo\n",[39,11127,11128],{"class":41,"line":112},[39,11129,2611],{"class":45},[39,11131,11132],{"class":41,"line":118},[39,11133,8841],{"class":45},[39,11135,11136,11138],{"class":41,"line":413},[39,11137,3043],{"class":49},[39,11139,8853],{"class":45},[39,11141,11142],{"class":41,"line":419},[39,11143,11144],{"class":45},"    string gender;\n",[39,11146,11147],{"class":41,"line":425},[39,11148,5053],{"class":45},[39,11150,11151],{"class":41,"line":443},[39,11152,11153],{"class":102},"\u002F\u002F定义排序函数\n",[39,11155,11156,11158,11160,11162,11165,11167,11169,11171,11173,11175],{"class":41,"line":449},[39,11157,6420],{"class":49},[39,11159,8372],{"class":3021},[39,11161,1221],{"class":45},[39,11163,11164],{"class":3021},"Sanguo",[39,11166,7574],{"class":49},[39,11168,392],{"class":254},[39,11170,60],{"class":45},[39,11172,1224],{"class":49},[39,11174,8387],{"class":254},[39,11176,209],{"class":45},[39,11178,11179],{"class":41,"line":455},[39,11180,2611],{"class":45},[39,11182,11183,11185,11187,11189,11191,11193,11195,11197,11199,11202,11204],{"class":41,"line":461},[39,11184,4259],{"class":49},[39,11186,1221],{"class":45},[39,11188,1224],{"class":49},[39,11190,4090],{"class":45},[39,11192,50],{"class":49},[39,11194,260],{"class":56},[39,11196,4097],{"class":45},[39,11198,2108],{"class":49},[39,11200,11201],{"class":45},"len;i",[39,11203,3350],{"class":49},[39,11205,209],{"class":45},[39,11207,11208],{"class":41,"line":475},[39,11209,3088],{"class":45},[39,11211,11212,11215,11217,11219,11221,11223,11225,11227,11229,11231,11233,11235,11237,11239,11241],{"class":41,"line":665},[39,11213,11214],{"class":49},"     for",[39,11216,2716],{"class":45},[39,11218,1224],{"class":49},[39,11220,4468],{"class":45},[39,11222,50],{"class":49},[39,11224,260],{"class":56},[39,11226,4475],{"class":45},[39,11228,2108],{"class":49},[39,11230,8414],{"class":45},[39,11232,1732],{"class":49},[39,11234,57],{"class":56},[39,11236,1732],{"class":49},[39,11238,4608],{"class":45},[39,11240,3350],{"class":49},[39,11242,209],{"class":45},[39,11244,11245],{"class":41,"line":671},[39,11246,11247],{"class":45},"     {\n",[39,11249,11250,11253,11256,11258,11261,11263,11266,11268,11270,11272,11274],{"class":41,"line":684},[39,11251,11252],{"class":49},"         if",[39,11254,11255],{"class":45}," ((s",[39,11257,1682],{"class":49},[39,11259,11260],{"class":45},"j)->age ",[39,11262,2158],{"class":49},[39,11264,11265],{"class":45}," (s",[39,11267,1682],{"class":49},[39,11269,1669],{"class":45},[39,11271,1682],{"class":49},[39,11273,57],{"class":56},[39,11275,11276],{"class":45},")->age)\n",[39,11278,11279],{"class":41,"line":2732},[39,11280,11281],{"class":45},"         {\n",[39,11283,11284,11287,11289,11292,11294],{"class":41,"line":2737},[39,11285,11286],{"class":45},"             Sanguo temp",[39,11288,8209],{"class":49},[39,11290,11291],{"class":45},"(s",[39,11293,1682],{"class":49},[39,11295,11296],{"class":45},"j);\n",[39,11298,11299,11302,11304,11306,11309,11311,11313,11315,11317,11319,11321],{"class":41,"line":2751},[39,11300,11301],{"class":49},"             *",[39,11303,11291],{"class":45},[39,11305,1682],{"class":49},[39,11307,11308],{"class":45},"j)",[39,11310,8209],{"class":49},[39,11312,11291],{"class":45},[39,11314,1682],{"class":49},[39,11316,1669],{"class":45},[39,11318,1682],{"class":49},[39,11320,57],{"class":56},[39,11322,3777],{"class":45},[39,11324,11325,11327,11329,11331,11333,11335,11337,11339,11341],{"class":41,"line":2756},[39,11326,11301],{"class":49},[39,11328,11291],{"class":45},[39,11330,1682],{"class":49},[39,11332,1669],{"class":45},[39,11334,1682],{"class":49},[39,11336,57],{"class":56},[39,11338,1632],{"class":45},[39,11340,50],{"class":49},[39,11342,5338],{"class":45},[39,11344,11345],{"class":41,"line":2785},[39,11346,11347],{"class":45},"         }\n",[39,11349,11350],{"class":41,"line":2790},[39,11351,11352],{"class":45},"     }\n",[39,11354,11355],{"class":41,"line":2807},[39,11356,3245],{"class":45},[39,11358,11359],{"class":41,"line":2812},[39,11360,2630],{"class":45},[39,11362,11363],{"class":41,"line":2817},[39,11364,11365],{"class":102},"\u002F\u002F定义打印函数\n",[39,11367,11368,11370,11372,11374,11376,11378,11380,11382,11384,11386],{"class":41,"line":2822},[39,11369,6420],{"class":49},[39,11371,10671],{"class":3021},[39,11373,1221],{"class":45},[39,11375,11164],{"class":3021},[39,11377,7574],{"class":49},[39,11379,392],{"class":254},[39,11381,60],{"class":45},[39,11383,1224],{"class":49},[39,11385,8387],{"class":254},[39,11387,209],{"class":45},[39,11389,11390],{"class":41,"line":2836},[39,11391,2611],{"class":45},[39,11393,11394,11396,11398,11400,11402,11404,11406,11408,11410,11412,11414],{"class":41,"line":2841},[39,11395,4259],{"class":49},[39,11397,2716],{"class":45},[39,11399,1224],{"class":49},[39,11401,4090],{"class":45},[39,11403,50],{"class":49},[39,11405,260],{"class":56},[39,11407,4097],{"class":45},[39,11409,2108],{"class":49},[39,11411,11201],{"class":45},[39,11413,3350],{"class":49},[39,11415,209],{"class":45},[39,11417,11418],{"class":41,"line":3635},[39,11419,3088],{"class":45},[39,11421,11422,11424,11426,11428,11430,11433,11435,11437,11439,11442,11444,11446,11448,11451,11453,11455,11457,11460,11462,11464,11466,11469,11471,11473,11475,11478,11480],{"class":41,"line":3649},[39,11423,4509],{"class":45},[39,11425,2242],{"class":49},[39,11427,1462],{"class":1319},[39,11429,2299],{"class":56},[39,11431,11432],{"class":1319},"姓名：\"",[39,11434,2242],{"class":49},[39,11436,11291],{"class":45},[39,11438,1682],{"class":49},[39,11440,11441],{"class":45},"i)->name",[39,11443,2242],{"class":49},[39,11445,1462],{"class":1319},[39,11447,2299],{"class":56},[39,11449,11450],{"class":1319},"年龄：\"",[39,11452,2242],{"class":49},[39,11454,11291],{"class":45},[39,11456,1682],{"class":49},[39,11458,11459],{"class":45},"i)->age",[39,11461,2242],{"class":49},[39,11463,1462],{"class":1319},[39,11465,2299],{"class":56},[39,11467,11468],{"class":1319},"性别：\"",[39,11470,2242],{"class":49},[39,11472,11291],{"class":45},[39,11474,1682],{"class":49},[39,11476,11477],{"class":45},"i)->gender",[39,11479,2242],{"class":49},[39,11481,2264],{"class":45},[39,11483,11484],{"class":41,"line":3657},[39,11485,3245],{"class":45},[39,11487,11488],{"class":41,"line":3662},[39,11489,2630],{"class":45},[39,11491,11492,11494,11496],{"class":41,"line":3668},[39,11493,1224],{"class":49},[39,11495,3031],{"class":3021},[39,11497,3034],{"class":45},[39,11499,11500],{"class":41,"line":3674},[39,11501,2611],{"class":45},[39,11503,11504],{"class":41,"line":3679},[39,11505,11506],{"class":102},"    \u002F\u002F定义结构体变量\n",[39,11508,11509,11512,11514,11516],{"class":41,"line":9004},[39,11510,11511],{"class":45},"    Sanguo s1[",[39,11513,89],{"class":56},[39,11515,2138],{"class":45},[39,11517,5965],{"class":49},[39,11519,11520],{"class":41,"line":9028},[39,11521,3088],{"class":45},[39,11523,11524,11526,11528,11530,11532,11534,11536],{"class":41,"line":9033},[39,11525,5974],{"class":45},[39,11527,11008],{"class":1319},[39,11529,60],{"class":45},[39,11531,1973],{"class":56},[39,11533,60],{"class":45},[39,11535,11017],{"class":1319},[39,11537,5987],{"class":45},[39,11539,11540,11542,11544,11546,11548,11550,11552],{"class":41,"line":9039},[39,11541,5974],{"class":45},[39,11543,11026],{"class":1319},[39,11545,60],{"class":45},[39,11547,1948],{"class":56},[39,11549,60],{"class":45},[39,11551,11017],{"class":1319},[39,11553,5987],{"class":45},[39,11555,11556,11558,11560,11562,11564,11566,11568],{"class":41,"line":9066},[39,11557,5974],{"class":45},[39,11559,11043],{"class":1319},[39,11561,60],{"class":45},[39,11563,1898],{"class":56},[39,11565,60],{"class":45},[39,11567,11017],{"class":1319},[39,11569,5987],{"class":45},[39,11571,11572,11574,11576,11578,11580,11582,11584],{"class":41,"line":9071},[39,11573,5974],{"class":45},[39,11575,11060],{"class":1319},[39,11577,60],{"class":45},[39,11579,1923],{"class":56},[39,11581,60],{"class":45},[39,11583,11017],{"class":1319},[39,11585,5987],{"class":45},[39,11587,11588,11590,11592,11594,11596,11598,11600],{"class":41,"line":9077},[39,11589,5974],{"class":45},[39,11591,11077],{"class":1319},[39,11593,60],{"class":45},[39,11595,1874],{"class":56},[39,11597,60],{"class":45},[39,11599,11086],{"class":1319},[39,11601,5987],{"class":45},[39,11603,11604],{"class":41,"line":9089},[39,11605,6008],{"class":45},[39,11607,11608,11610,11612,11614,11617,11619,11622,11624],{"class":41,"line":9101},[39,11609,3043],{"class":49},[39,11611,8387],{"class":45},[39,11613,5261],{"class":49},[39,11615,11616],{"class":45},"(s1)",[39,11618,5267],{"class":49},[39,11620,11621],{"class":45},"(s1[",[39,11623,260],{"class":56},[39,11625,4914],{"class":45},[39,11627,11628,11631,11633,11636,11638,11641,11644,11646],{"class":41,"line":9113},[39,11629,11630],{"class":45},"    Sanguo ",[39,11632,1657],{"class":49},[39,11634,11635],{"class":45},"s ",[39,11637,50],{"class":49},[39,11639,11640],{"class":49}," &",[39,11642,11643],{"class":45},"s1[",[39,11645,260],{"class":56},[39,11647,5747],{"class":45},[39,11649,11650],{"class":41,"line":10772},[39,11651,11652],{"class":102},"    \u002F\u002F排序前：\n",[39,11654,11655,11657,11659,11662,11664],{"class":41,"line":10797},[39,11656,7585],{"class":45},[39,11658,2242],{"class":49},[39,11660,11661],{"class":1319}," \"排序前：\"",[39,11663,2510],{"class":49},[39,11665,9896],{"class":45},[39,11667,11668,11670],{"class":41,"line":10820},[39,11669,10971],{"class":3021},[39,11671,11672],{"class":45},"(s,len);\n",[39,11674,11675],{"class":41,"line":10844},[39,11676,11677],{"class":102},"    \u002F\u002F调用排序函数\n",[39,11679,11680,11682],{"class":41,"line":10849},[39,11681,8654],{"class":3021},[39,11683,11672],{"class":45},[39,11685,11686],{"class":41,"line":10854},[39,11687,11688],{"class":102},"    \u002F\u002F排序后\n",[39,11690,11691,11693,11695,11698,11700],{"class":41,"line":10859},[39,11692,7585],{"class":45},[39,11694,2242],{"class":49},[39,11696,11697],{"class":1319}," \"排序后：\"",[39,11699,2510],{"class":49},[39,11701,9896],{"class":45},[39,11703,11704,11706],{"class":41,"line":10868},[39,11705,10971],{"class":3021},[39,11707,11672],{"class":45},[39,11709,11710],{"class":41,"line":10873},[39,11711,2630],{"class":45},[19,11713,11714,11715,11717],{},"注意：使用指针时直接用传首地址**&s",[39,11716,260],{},"**",[1133,11719,11720],{},"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":34,"searchDepth":74,"depth":74,"links":11722},[11723,11724,11725,11726,11727,11728,11729],{"id":8759,"depth":74,"text":8760},{"id":9121,"depth":74,"text":9122},{"id":9390,"depth":74,"text":9391},{"id":9555,"depth":74,"text":9556},{"id":9771,"depth":74,"text":9772},{"id":10092,"depth":74,"text":10093},{"id":10320,"depth":74,"text":10321},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8748,"description":8756},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11736,"title":11737,"body":11738,"description":34,"extension":1143,"meta":13081,"navigation":1145,"path":13082,"seo":13083,"stem":13084,"__hash__":13085},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11739,"toc":13075},[11740,11743,11747,11753,11767,11772,11775,11779,11786,11792,11795,11802,11808,11813,11816,11819,11822,12386,12389,12403,12407,12412,12428,12568,12571,12577,12580,12585,12593,12701,12704,12709,12712,12717,12720,12726,12729,13072],[10,11741,11737],{"id":11742},"_5程序内存模型",[14,11744,11746],{"id":11745},"_51内存分区模型","5.1内存分区模型",[19,11748,11749,11750],{},"C++程序在执行时，将内存大方向划分为",[304,11751,11752],{},"4个区域",[2205,11754,11755,11758,11761,11764],{},[1174,11756,11757],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[1174,11759,11760],{},"全局区：存放全局变量和静态变量以及常量",[1174,11762,11763],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[1174,11765,11766],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,11768,11769],{},[304,11770,11771],{},"内存四区意义：",[19,11773,11774],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[1188,11776,11778],{"id":11777},"_511程序运行前","5.1.1程序运行前",[19,11780,11781,11782,11785],{},"​\t在程序编译后，生成了exe可执行程序，",[304,11783,11784],{},"未执行该程序前","分为两个区域",[19,11787,11788,11789],{},"​\t",[304,11790,11791],{},"代码区：",[19,11793,11794],{},"​\t\t存放 CPU 执行的机器指令",[19,11796,11797,11798,11801],{},"​\t\t代码区是",[304,11799,11800],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,11803,11797,11804,11807],{},[304,11805,11806],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,11809,11788,11810],{},[304,11811,11812],{},"全局区：",[19,11814,11815],{},"​\t\t全局变量和静态变量存放在此.",[19,11817,11818],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,11820,11821],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[29,11823,11825],{"className":1209,"code":11824,"language":1211,"meta":34,"style":34},"\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",[36,11826,11827,11832,11845,11858,11862,11867,11882,11897,11901,11910,11914,11919,11932,11945,11949,11954,11980,12006,12010,12037,12063,12067,12072,12088,12103,12107,12133,12159,12163,12188,12213,12217,12243,12269,12273,12289,12304,12330,12356,12360,12370,12374,12382],{"__ignoreMap":34},[39,11828,11829],{"class":41,"line":42},[39,11830,11831],{"class":102},"\u002F\u002F全局变量\n",[39,11833,11834,11836,11839,11841,11843],{"class":41,"line":74},[39,11835,1224],{"class":49},[39,11837,11838],{"class":45}," g_a ",[39,11840,50],{"class":49},[39,11842,3096],{"class":56},[39,11844,2359],{"class":45},[39,11846,11847,11849,11852,11854,11856],{"class":41,"line":99},[39,11848,1224],{"class":49},[39,11850,11851],{"class":45}," g_b ",[39,11853,50],{"class":49},[39,11855,3096],{"class":56},[39,11857,2359],{"class":45},[39,11859,11860],{"class":41,"line":106},[39,11861,3458],{"emptyLinePlaceholder":1145},[39,11863,11864],{"class":41,"line":112},[39,11865,11866],{"class":102},"\u002F\u002F全局常量\n",[39,11868,11869,11871,11873,11876,11878,11880],{"class":41,"line":118},[39,11870,7848],{"class":49},[39,11872,3440],{"class":49},[39,11874,11875],{"class":45}," c_g_a ",[39,11877,50],{"class":49},[39,11879,3096],{"class":56},[39,11881,2359],{"class":45},[39,11883,11884,11886,11888,11891,11893,11895],{"class":41,"line":413},[39,11885,7848],{"class":49},[39,11887,3440],{"class":49},[39,11889,11890],{"class":45}," c_g_b ",[39,11892,50],{"class":49},[39,11894,3096],{"class":56},[39,11896,2359],{"class":45},[39,11898,11899],{"class":41,"line":419},[39,11900,3458],{"emptyLinePlaceholder":1145},[39,11902,11903,11905,11907],{"class":41,"line":425},[39,11904,1224],{"class":49},[39,11906,3031],{"class":3021},[39,11908,11909],{"class":45},"() {\n",[39,11911,11912],{"class":41,"line":443},[39,11913,3458],{"emptyLinePlaceholder":1145},[39,11915,11916],{"class":41,"line":449},[39,11917,11918],{"class":102},"    \u002F\u002F局部变量\n",[39,11920,11921,11923,11926,11928,11930],{"class":41,"line":455},[39,11922,3043],{"class":49},[39,11924,11925],{"class":45}," a ",[39,11927,50],{"class":49},[39,11929,3096],{"class":56},[39,11931,2359],{"class":45},[39,11933,11934,11936,11939,11941,11943],{"class":41,"line":461},[39,11935,3043],{"class":49},[39,11937,11938],{"class":45}," b ",[39,11940,50],{"class":49},[39,11942,3096],{"class":56},[39,11944,2359],{"class":45},[39,11946,11947],{"class":41,"line":475},[39,11948,3458],{"emptyLinePlaceholder":1145},[39,11950,11951],{"class":41,"line":665},[39,11952,11953],{"class":102},"    \u002F\u002F打印地址\n",[39,11955,11956,11958,11960,11963,11965,11967,11969,11971,11973,11976,11978],{"class":41,"line":671},[39,11957,7585],{"class":45},[39,11959,2242],{"class":49},[39,11961,11962],{"class":1319}," \"局部变量a地址为： \"",[39,11964,2510],{"class":49},[39,11966,2716],{"class":45},[39,11968,1224],{"class":49},[39,11970,1632],{"class":45},[39,11972,1557],{"class":49},[39,11974,11975],{"class":45},"a ",[39,11977,2242],{"class":49},[39,11979,9896],{"class":45},[39,11981,11982,11984,11986,11989,11991,11993,11995,11997,11999,12002,12004],{"class":41,"line":684},[39,11983,7585],{"class":45},[39,11985,2242],{"class":49},[39,11987,11988],{"class":1319}," \"局部变量b地址为： \"",[39,11990,2510],{"class":49},[39,11992,2716],{"class":45},[39,11994,1224],{"class":49},[39,11996,1632],{"class":45},[39,11998,1557],{"class":49},[39,12000,12001],{"class":45},"b ",[39,12003,2242],{"class":49},[39,12005,9896],{"class":45},[39,12007,12008],{"class":41,"line":2732},[39,12009,3458],{"emptyLinePlaceholder":1145},[39,12011,12012,12014,12016,12019,12021,12024,12026,12028,12030,12033,12035],{"class":41,"line":2737},[39,12013,7585],{"class":45},[39,12015,2242],{"class":49},[39,12017,12018],{"class":1319}," \"全局变量g_a地址为： \"",[39,12020,2510],{"class":49},[39,12022,12023],{"class":45},"  (",[39,12025,1224],{"class":49},[39,12027,1632],{"class":45},[39,12029,1557],{"class":49},[39,12031,12032],{"class":45},"g_a ",[39,12034,2242],{"class":49},[39,12036,9896],{"class":45},[39,12038,12039,12041,12043,12046,12048,12050,12052,12054,12056,12059,12061],{"class":41,"line":2751},[39,12040,7585],{"class":45},[39,12042,2242],{"class":49},[39,12044,12045],{"class":1319}," \"全局变量g_b地址为： \"",[39,12047,2510],{"class":49},[39,12049,12023],{"class":45},[39,12051,1224],{"class":49},[39,12053,1632],{"class":45},[39,12055,1557],{"class":49},[39,12057,12058],{"class":45},"g_b ",[39,12060,2242],{"class":49},[39,12062,9896],{"class":45},[39,12064,12065],{"class":41,"line":2756},[39,12066,3458],{"emptyLinePlaceholder":1145},[39,12068,12069],{"class":41,"line":2785},[39,12070,12071],{"class":102},"    \u002F\u002F静态变量\n",[39,12073,12074,12077,12079,12082,12084,12086],{"class":41,"line":2790},[39,12075,12076],{"class":49},"    static",[39,12078,3440],{"class":49},[39,12080,12081],{"class":45}," s_a ",[39,12083,50],{"class":49},[39,12085,3096],{"class":56},[39,12087,2359],{"class":45},[39,12089,12090,12092,12094,12097,12099,12101],{"class":41,"line":2807},[39,12091,12076],{"class":49},[39,12093,3440],{"class":49},[39,12095,12096],{"class":45}," s_b ",[39,12098,50],{"class":49},[39,12100,3096],{"class":56},[39,12102,2359],{"class":45},[39,12104,12105],{"class":41,"line":2812},[39,12106,3458],{"emptyLinePlaceholder":1145},[39,12108,12109,12111,12113,12116,12118,12120,12122,12124,12126,12129,12131],{"class":41,"line":2817},[39,12110,7585],{"class":45},[39,12112,2242],{"class":49},[39,12114,12115],{"class":1319}," \"静态变量s_a地址为： \"",[39,12117,2510],{"class":49},[39,12119,2716],{"class":45},[39,12121,1224],{"class":49},[39,12123,1632],{"class":45},[39,12125,1557],{"class":49},[39,12127,12128],{"class":45},"s_a ",[39,12130,2242],{"class":49},[39,12132,9896],{"class":45},[39,12134,12135,12137,12139,12142,12144,12146,12148,12150,12152,12155,12157],{"class":41,"line":2822},[39,12136,7585],{"class":45},[39,12138,2242],{"class":49},[39,12140,12141],{"class":1319}," \"静态变量s_b地址为： \"",[39,12143,2510],{"class":49},[39,12145,2716],{"class":45},[39,12147,1224],{"class":49},[39,12149,1632],{"class":45},[39,12151,1557],{"class":49},[39,12153,12154],{"class":45},"s_b ",[39,12156,2242],{"class":49},[39,12158,9896],{"class":45},[39,12160,12161],{"class":41,"line":2836},[39,12162,3458],{"emptyLinePlaceholder":1145},[39,12164,12165,12167,12169,12172,12174,12176,12178,12180,12182,12184,12186],{"class":41,"line":2841},[39,12166,7585],{"class":45},[39,12168,2242],{"class":49},[39,12170,12171],{"class":1319}," \"字符串常量地址为： \"",[39,12173,2510],{"class":49},[39,12175,2716],{"class":45},[39,12177,1224],{"class":49},[39,12179,1632],{"class":45},[39,12181,1557],{"class":49},[39,12183,2259],{"class":1319},[39,12185,2510],{"class":49},[39,12187,9896],{"class":45},[39,12189,12190,12192,12194,12196,12198,12200,12202,12204,12206,12209,12211],{"class":41,"line":3635},[39,12191,7585],{"class":45},[39,12193,2242],{"class":49},[39,12195,12171],{"class":1319},[39,12197,2510],{"class":49},[39,12199,2716],{"class":45},[39,12201,1224],{"class":49},[39,12203,1632],{"class":45},[39,12205,1557],{"class":49},[39,12207,12208],{"class":1319},"\"hello world1\"",[39,12210,2510],{"class":49},[39,12212,9896],{"class":45},[39,12214,12215],{"class":41,"line":3649},[39,12216,3458],{"emptyLinePlaceholder":1145},[39,12218,12219,12221,12223,12226,12228,12230,12232,12234,12236,12239,12241],{"class":41,"line":3657},[39,12220,7585],{"class":45},[39,12222,2242],{"class":49},[39,12224,12225],{"class":1319}," \"全局常量c_g_a地址为： \"",[39,12227,2510],{"class":49},[39,12229,2716],{"class":45},[39,12231,1224],{"class":49},[39,12233,1632],{"class":45},[39,12235,1557],{"class":49},[39,12237,12238],{"class":45},"c_g_a ",[39,12240,2242],{"class":49},[39,12242,9896],{"class":45},[39,12244,12245,12247,12249,12252,12254,12256,12258,12260,12262,12265,12267],{"class":41,"line":3662},[39,12246,7585],{"class":45},[39,12248,2242],{"class":49},[39,12250,12251],{"class":1319}," \"全局常量c_g_b地址为： \"",[39,12253,2510],{"class":49},[39,12255,2716],{"class":45},[39,12257,1224],{"class":49},[39,12259,1632],{"class":45},[39,12261,1557],{"class":49},[39,12263,12264],{"class":45},"c_g_b ",[39,12266,2242],{"class":49},[39,12268,9896],{"class":45},[39,12270,12271],{"class":41,"line":3668},[39,12272,3458],{"emptyLinePlaceholder":1145},[39,12274,12275,12278,12280,12283,12285,12287],{"class":41,"line":3674},[39,12276,12277],{"class":49},"    const",[39,12279,3440],{"class":49},[39,12281,12282],{"class":45}," c_l_a ",[39,12284,50],{"class":49},[39,12286,3096],{"class":56},[39,12288,2359],{"class":45},[39,12290,12291,12293,12295,12298,12300,12302],{"class":41,"line":3679},[39,12292,12277],{"class":49},[39,12294,3440],{"class":49},[39,12296,12297],{"class":45}," c_l_b ",[39,12299,50],{"class":49},[39,12301,3096],{"class":56},[39,12303,2359],{"class":45},[39,12305,12306,12308,12310,12313,12315,12317,12319,12321,12323,12326,12328],{"class":41,"line":9004},[39,12307,7585],{"class":45},[39,12309,2242],{"class":49},[39,12311,12312],{"class":1319}," \"局部常量c_l_a地址为： \"",[39,12314,2510],{"class":49},[39,12316,2716],{"class":45},[39,12318,1224],{"class":49},[39,12320,1632],{"class":45},[39,12322,1557],{"class":49},[39,12324,12325],{"class":45},"c_l_a ",[39,12327,2242],{"class":49},[39,12329,9896],{"class":45},[39,12331,12332,12334,12336,12339,12341,12343,12345,12347,12349,12352,12354],{"class":41,"line":9028},[39,12333,7585],{"class":45},[39,12335,2242],{"class":49},[39,12337,12338],{"class":1319}," \"局部常量c_l_b地址为： \"",[39,12340,2510],{"class":49},[39,12342,2716],{"class":45},[39,12344,1224],{"class":49},[39,12346,1632],{"class":45},[39,12348,1557],{"class":49},[39,12350,12351],{"class":45},"c_l_b ",[39,12353,2242],{"class":49},[39,12355,9896],{"class":45},[39,12357,12358],{"class":41,"line":9033},[39,12359,3458],{"emptyLinePlaceholder":1145},[39,12361,12362,12364,12366,12368],{"class":41,"line":9039},[39,12363,3361],{"class":3021},[39,12365,1221],{"class":45},[39,12367,3366],{"class":1319},[39,12369,3777],{"class":45},[39,12371,12372],{"class":41,"line":9066},[39,12373,3458],{"emptyLinePlaceholder":1145},[39,12375,12376,12378,12380],{"class":41,"line":9071},[39,12377,5148],{"class":49},[39,12379,5151],{"class":56},[39,12381,2359],{"class":45},[39,12383,12384],{"class":41,"line":9077},[39,12385,2630],{"class":45},[19,12387,12388],{},"总结：",[2205,12390,12391,12394,12397,12400],{},[1174,12392,12393],{},"c++中程序运行前分为全局区和代码区",[1174,12395,12396],{},"代码区特点是共享和只读",[1174,12398,12399],{},"全局区中存放全局变量、静态变量、常量",[1174,12401,12402],{},"常量区中存放const修饰的全局常量和字符串常量",[1188,12404,12406],{"id":12405},"_512程序运行后","5.1.2程序运行后",[1171,12408,12409],{},[1174,12410,12411],{},"栈区：",[2205,12413,12414,12421],{},[1174,12415,12416,12417,12420],{},"由编译器自动分配释放, 存放",[304,12418,12419],{},"函数的参数值,局部变量","等",[1174,12422,12423,12424,12427],{},"注意事项：",[304,12425,12426],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[29,12429,12431],{"className":1209,"code":12430,"language":1211,"meta":34,"style":34},"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",[36,12432,12433,12444,12448,12463,12475,12479,12483,12491,12496,12511,12529,12546,12556,12564],{"__ignoreMap":34},[39,12434,12435,12437,12439,12442],{"class":41,"line":42},[39,12436,1224],{"class":49},[39,12438,7574],{"class":49},[39,12440,12441],{"class":3021}," func",[39,12443,3034],{"class":45},[39,12445,12446],{"class":41,"line":74},[39,12447,2611],{"class":45},[39,12449,12450,12452,12454,12456,12458,12460],{"class":41,"line":99},[39,12451,3043],{"class":49},[39,12453,11925],{"class":45},[39,12455,50],{"class":49},[39,12457,3096],{"class":56},[39,12459,1273],{"class":45},[39,12461,12462],{"class":102}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[39,12464,12465,12467,12469,12472],{"class":41,"line":106},[39,12466,5148],{"class":49},[39,12468,11640],{"class":49},[39,12470,12471],{"class":45},"a;",[39,12473,12474],{"class":102}," \u002F\u002F放回局部变量的地址\n",[39,12476,12477],{"class":41,"line":112},[39,12478,2630],{"class":45},[39,12480,12481],{"class":41,"line":118},[39,12482,3458],{"emptyLinePlaceholder":1145},[39,12484,12485,12487,12489],{"class":41,"line":413},[39,12486,1224],{"class":49},[39,12488,3031],{"class":3021},[39,12490,11909],{"class":45},[39,12492,12493],{"class":41,"line":419},[39,12494,12495],{"class":102},"    \u002F\u002F接受func的返回值\n",[39,12497,12498,12500,12502,12505,12507,12509],{"class":41,"line":425},[39,12499,3043],{"class":49},[39,12501,7574],{"class":49},[39,12503,12504],{"class":45},"p ",[39,12506,50],{"class":49},[39,12508,12441],{"class":3021},[39,12510,6692],{"class":45},[39,12512,12513,12515,12517,12519,12521,12523,12526],{"class":41,"line":443},[39,12514,7585],{"class":45},[39,12516,2242],{"class":49},[39,12518,7574],{"class":49},[39,12520,12504],{"class":45},[39,12522,2242],{"class":49},[39,12524,12525],{"class":45}," endl;",[39,12527,12528],{"class":102}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[39,12530,12531,12533,12535,12537,12539,12541,12543],{"class":41,"line":449},[39,12532,7585],{"class":45},[39,12534,2242],{"class":49},[39,12536,7574],{"class":49},[39,12538,12504],{"class":45},[39,12540,2242],{"class":49},[39,12542,12525],{"class":45},[39,12544,12545],{"class":102}," \u002F\u002F第二次这个数据不再保留\n",[39,12547,12548,12550,12552,12554],{"class":41,"line":455},[39,12549,3361],{"class":3021},[39,12551,1221],{"class":45},[39,12553,3366],{"class":1319},[39,12555,3777],{"class":45},[39,12557,12558,12560,12562],{"class":41,"line":461},[39,12559,5148],{"class":49},[39,12561,5151],{"class":56},[39,12563,2359],{"class":45},[39,12565,12566],{"class":41,"line":475},[39,12567,2630],{"class":45},[19,12569,12570],{},"输出结果：",[19,12572,12573],{},[269,12574],{"alt":12575,"src":12576},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,12578,12579],{},"总结：不要返回局部变量的地址",[1171,12581,12582],{"start":74},[1174,12583,12584],{},"堆区",[2205,12586,12587,12590],{},[1174,12588,12589],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[1174,12591,12592],{},"在c++中主要利用new在堆区开辟内存",[29,12594,12596],{"className":1209,"code":12595,"language":1211,"meta":34,"style":34},"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",[36,12597,12598,12613,12617,12622,12643,12650,12654,12662,12666,12671,12685,12697],{"__ignoreMap":34},[39,12599,12600,12602,12605,12608,12610],{"class":41,"line":42},[39,12601,1224],{"class":49},[39,12603,12604],{"class":49},"  *",[39,12606,12607],{"class":3021},"func",[39,12609,3485],{"class":45},[39,12611,12612],{"class":102},"  \u002F\u002F函数返回指针\n",[39,12614,12615],{"class":41,"line":74},[39,12616,2611],{"class":45},[39,12618,12619],{"class":41,"line":99},[39,12620,12621],{"class":102},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[39,12623,12624,12626,12628,12630,12632,12635,12637,12639,12641],{"class":41,"line":106},[39,12625,5205],{"class":49},[39,12627,7574],{"class":49},[39,12629,19],{"class":45},[39,12631,50],{"class":49},[39,12633,12634],{"class":49}," new",[39,12636,3440],{"class":49},[39,12638,1221],{"class":45},[39,12640,146],{"class":56},[39,12642,3777],{"class":45},[39,12644,12645,12647],{"class":41,"line":112},[39,12646,5439],{"class":49},[39,12648,12649],{"class":45}," p;\n",[39,12651,12652],{"class":41,"line":118},[39,12653,2630],{"class":45},[39,12655,12656,12658,12660],{"class":41,"line":413},[39,12657,1224],{"class":49},[39,12659,3031],{"class":3021},[39,12661,3034],{"class":45},[39,12663,12664],{"class":41,"line":419},[39,12665,2611],{"class":45},[39,12667,12668],{"class":41,"line":425},[39,12669,12670],{"class":102},"    \u002F\u002F在堆区开辟数据\n",[39,12672,12673,12675,12677,12679,12681,12683],{"class":41,"line":443},[39,12674,3043],{"class":49},[39,12676,7574],{"class":49},[39,12678,19],{"class":45},[39,12680,50],{"class":49},[39,12682,12607],{"class":3021},[39,12684,6692],{"class":45},[39,12686,12687,12689,12691,12693,12695],{"class":41,"line":449},[39,12688,2616],{"class":45},[39,12690,7475],{"class":49},[39,12692,19],{"class":45},[39,12694,2242],{"class":49},[39,12696,2264],{"class":45},[39,12698,12699],{"class":41,"line":455},[39,12700,2630],{"class":45},[19,12702,12703],{},"图片展示：",[19,12705,12706],{},[269,12707],{"alt":12575,"src":12708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,12710,12711],{},"堆区内存由程序员管生死！！！",[1171,12713,12714],{"start":99},[1174,12715,12716],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,12718,12719],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,12721,12722,12723],{},"​语法：",[36,12724,12725],{}," new 数据类型",[19,12727,12728],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[29,12730,12732],{"className":1209,"code":12731,"language":1211,"meta":34,"style":34},"\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",[36,12733,12734,12739,12749,12753,12758,12763,12785,12789,12797,12801,12815,12827,12839,12851,12856,12861,12872,12876,12881,12889,12893,12898,12920,12946,12950,12968,12972,12998,13002,13014,13018,13023,13028,13036,13040,13044,13052,13056,13062,13068],{"__ignoreMap":34},[39,12735,12736],{"class":41,"line":42},[39,12737,12738],{"class":102},"\u002F\u002F1.new的基本语法\n",[39,12740,12741,12743,12745,12747],{"class":41,"line":74},[39,12742,1224],{"class":49},[39,12744,7574],{"class":49},[39,12746,12607],{"class":3021},[39,12748,3034],{"class":45},[39,12750,12751],{"class":41,"line":99},[39,12752,2611],{"class":45},[39,12754,12755],{"class":41,"line":106},[39,12756,12757],{"class":102},"    \u002F\u002F在堆区创建整型数据\n",[39,12759,12760],{"class":41,"line":112},[39,12761,12762],{"class":102},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[39,12764,12765,12767,12769,12771,12774,12776,12778,12780,12782],{"class":41,"line":118},[39,12766,3043],{"class":49},[39,12768,7574],{"class":49},[39,12770,19],{"class":45},[39,12772,12773],{"class":49},"=new",[39,12775,3440],{"class":49},[39,12777,1221],{"class":45},[39,12779,146],{"class":56},[39,12781,7022],{"class":45},[39,12783,12784],{"class":102},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[39,12786,12787],{"class":41,"line":413},[39,12788,2630],{"class":45},[39,12790,12791,12793,12795],{"class":41,"line":419},[39,12792,6420],{"class":49},[39,12794,6644],{"class":3021},[39,12796,3034],{"class":45},[39,12798,12799],{"class":41,"line":425},[39,12800,2611],{"class":45},[39,12802,12803,12805,12807,12809,12811,12813],{"class":41,"line":443},[39,12804,3043],{"class":49},[39,12806,7574],{"class":49},[39,12808,19],{"class":45},[39,12810,50],{"class":49},[39,12812,12607],{"class":3021},[39,12814,6692],{"class":45},[39,12816,12817,12819,12821,12823,12825],{"class":41,"line":449},[39,12818,2616],{"class":45},[39,12820,7475],{"class":49},[39,12822,19],{"class":45},[39,12824,2242],{"class":49},[39,12826,2264],{"class":45},[39,12828,12829,12831,12833,12835,12837],{"class":41,"line":455},[39,12830,2616],{"class":45},[39,12832,7475],{"class":49},[39,12834,19],{"class":45},[39,12836,2242],{"class":49},[39,12838,2264],{"class":45},[39,12840,12841,12843,12845,12847,12849],{"class":41,"line":461},[39,12842,2616],{"class":45},[39,12844,7475],{"class":49},[39,12846,19],{"class":45},[39,12848,2242],{"class":49},[39,12850,2264],{"class":45},[39,12852,12853],{"class":41,"line":475},[39,12854,12855],{"class":102},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[39,12857,12858],{"class":41,"line":665},[39,12859,12860],{"class":102},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[39,12862,12863,12866,12869],{"class":41,"line":671},[39,12864,12865],{"class":49},"    delete",[39,12867,12868],{"class":45}," p;",[39,12870,12871],{"class":102},"\u002F\u002F删除这块地址\n",[39,12873,12874],{"class":41,"line":684},[39,12875,2630],{"class":45},[39,12877,12878],{"class":41,"line":2732},[39,12879,12880],{"class":102},"\u002F\u002F2.在堆区利用new开辟数组\n",[39,12882,12883,12885,12887],{"class":41,"line":2737},[39,12884,6420],{"class":49},[39,12886,6713],{"class":3021},[39,12888,3034],{"class":45},[39,12890,12891],{"class":41,"line":2751},[39,12892,2611],{"class":45},[39,12894,12895],{"class":41,"line":2756},[39,12896,12897],{"class":102},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[39,12899,12900,12902,12904,12906,12908,12910,12912,12914,12917],{"class":41,"line":2785},[39,12901,3043],{"class":49},[39,12903,7574],{"class":49},[39,12905,4938],{"class":45},[39,12907,12773],{"class":49},[39,12909,3440],{"class":49},[39,12911,2088],{"class":45},[39,12913,146],{"class":56},[39,12915,12916],{"class":45},"];",[39,12918,12919],{"class":102},"\u002F\u002F10代表数组有10个元素\n",[39,12921,12922,12924,12926,12928,12930,12932,12934,12936,12938,12940,12942,12944],{"class":41,"line":2790},[39,12923,4259],{"class":49},[39,12925,2716],{"class":45},[39,12927,1224],{"class":49},[39,12929,4090],{"class":45},[39,12931,50],{"class":49},[39,12933,260],{"class":56},[39,12935,4097],{"class":45},[39,12937,2108],{"class":49},[39,12939,146],{"class":56},[39,12941,4097],{"class":45},[39,12943,3350],{"class":49},[39,12945,209],{"class":45},[39,12947,12948],{"class":41,"line":2807},[39,12949,3088],{"class":45},[39,12951,12952,12955,12957,12959,12961,12963,12965],{"class":41,"line":2812},[39,12953,12954],{"class":45},"        arr[i]",[39,12956,50],{"class":49},[39,12958,1644],{"class":45},[39,12960,1682],{"class":49},[39,12962,1519],{"class":56},[39,12964,1273],{"class":45},[39,12966,12967],{"class":102},"\u002F\u002F给10个元素赋值100～109\n",[39,12969,12970],{"class":41,"line":2817},[39,12971,3245],{"class":45},[39,12973,12974,12976,12978,12980,12982,12984,12986,12988,12990,12992,12994,12996],{"class":41,"line":2822},[39,12975,4259],{"class":49},[39,12977,2716],{"class":45},[39,12979,1224],{"class":49},[39,12981,4090],{"class":45},[39,12983,50],{"class":49},[39,12985,260],{"class":56},[39,12987,4097],{"class":45},[39,12989,2108],{"class":49},[39,12991,146],{"class":56},[39,12993,4097],{"class":45},[39,12995,3350],{"class":49},[39,12997,209],{"class":45},[39,12999,13000],{"class":41,"line":2836},[39,13001,3088],{"class":45},[39,13003,13004,13006,13008,13010,13012],{"class":41,"line":2841},[39,13005,4509],{"class":45},[39,13007,2242],{"class":49},[39,13009,5412],{"class":45},[39,13011,2242],{"class":49},[39,13013,2264],{"class":45},[39,13015,13016],{"class":41,"line":3635},[39,13017,3245],{"class":45},[39,13019,13020],{"class":41,"line":3649},[39,13021,13022],{"class":102},"    \u002F\u002F释放堆区数组\n",[39,13024,13025],{"class":41,"line":3657},[39,13026,13027],{"class":102},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[39,13029,13030,13033],{"class":41,"line":3662},[39,13031,13032],{"class":49},"    delete[]",[39,13034,13035],{"class":45}," arr;\n",[39,13037,13038],{"class":41,"line":3668},[39,13039,2630],{"class":45},[39,13041,13042],{"class":41,"line":3674},[39,13043,3458],{"emptyLinePlaceholder":1145},[39,13045,13046,13048,13050],{"class":41,"line":3679},[39,13047,1224],{"class":49},[39,13049,3031],{"class":3021},[39,13051,3034],{"class":45},[39,13053,13054],{"class":41,"line":9004},[39,13055,2611],{"class":45},[39,13057,13058,13060],{"class":41,"line":9028},[39,13059,6689],{"class":3021},[39,13061,6692],{"class":45},[39,13063,13064,13066],{"class":41,"line":9033},[39,13065,6758],{"class":3021},[39,13067,6692],{"class":45},[39,13069,13070],{"class":41,"line":9039},[39,13071,2630],{"class":45},[1133,13073,13074],{},"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":34,"searchDepth":74,"depth":74,"links":13076},[13077],{"id":11745,"depth":74,"text":11746,"children":13078},[13079,13080],{"id":11777,"depth":99,"text":11778},{"id":12405,"depth":99,"text":12406},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11737,"description":34},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13087,"title":13088,"body":13089,"description":34,"extension":1143,"meta":14570,"navigation":1145,"path":14571,"seo":14572,"stem":14573,"__hash__":14574},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13090,"toc":14562},[13091,13094,13098,13101,13104,13273,13277,13282,13299,13304,13456,13460,13463,13466,13860,13864,13867,13872,13875,14187,14191,14197,14357,14359,14367,14371,14374,14381,14559],[10,13092,13088],{"id":13093},"_6引用",[14,13095,13097],{"id":13096},"_61引用基本用法","6.1引用基本用法",[19,13099,13100],{},"引用的本质：给变量起别名",[19,13102,13103],{},"语法：数据类型 &别名=原名",[29,13105,13107],{"className":1209,"code":13106,"language":1211,"meta":34,"style":34},"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",[36,13108,13109,13117,13121,13133,13145,13149,13168,13187,13191,13202,13206,13225,13243,13247,13257,13261,13269],{"__ignoreMap":34},[39,13110,13111,13113,13115],{"class":41,"line":42},[39,13112,1224],{"class":49},[39,13114,3031],{"class":3021},[39,13116,11909],{"class":45},[39,13118,13119],{"class":41,"line":74},[39,13120,3458],{"emptyLinePlaceholder":1145},[39,13122,13123,13125,13127,13129,13131],{"class":41,"line":99},[39,13124,3043],{"class":49},[39,13126,11925],{"class":45},[39,13128,50],{"class":49},[39,13130,3096],{"class":56},[39,13132,2359],{"class":45},[39,13134,13135,13137,13139,13141,13143],{"class":41,"line":106},[39,13136,3043],{"class":49},[39,13138,11640],{"class":49},[39,13140,12001],{"class":45},[39,13142,50],{"class":49},[39,13144,2498],{"class":45},[39,13146,13147],{"class":41,"line":112},[39,13148,3458],{"emptyLinePlaceholder":1145},[39,13150,13151,13153,13155,13158,13160,13162,13164,13166],{"class":41,"line":118},[39,13152,7585],{"class":45},[39,13154,2242],{"class":49},[39,13156,13157],{"class":1319}," \"a = \"",[39,13159,2510],{"class":49},[39,13161,11925],{"class":45},[39,13163,2242],{"class":49},[39,13165,12525],{"class":45},[39,13167,8324],{"class":102},[39,13169,13170,13172,13174,13177,13179,13181,13183,13185],{"class":41,"line":413},[39,13171,7585],{"class":45},[39,13173,2242],{"class":49},[39,13175,13176],{"class":1319}," \"b = \"",[39,13178,2510],{"class":49},[39,13180,11938],{"class":45},[39,13182,2242],{"class":49},[39,13184,12525],{"class":45},[39,13186,8324],{"class":102},[39,13188,13189],{"class":41,"line":419},[39,13190,3458],{"emptyLinePlaceholder":1145},[39,13192,13193,13196,13198,13200],{"class":41,"line":425},[39,13194,13195],{"class":45},"    b ",[39,13197,50],{"class":49},[39,13199,6810],{"class":56},[39,13201,2359],{"class":45},[39,13203,13204],{"class":41,"line":443},[39,13205,3458],{"emptyLinePlaceholder":1145},[39,13207,13208,13210,13212,13214,13216,13218,13220,13222],{"class":41,"line":449},[39,13209,7585],{"class":45},[39,13211,2242],{"class":49},[39,13213,13157],{"class":1319},[39,13215,2510],{"class":49},[39,13217,11925],{"class":45},[39,13219,2242],{"class":49},[39,13221,12525],{"class":45},[39,13223,13224],{"class":102},"\u002F\u002F100\n",[39,13226,13227,13229,13231,13233,13235,13237,13239,13241],{"class":41,"line":455},[39,13228,7585],{"class":45},[39,13230,2242],{"class":49},[39,13232,13176],{"class":1319},[39,13234,2510],{"class":49},[39,13236,11938],{"class":45},[39,13238,2242],{"class":49},[39,13240,12525],{"class":45},[39,13242,13224],{"class":102},[39,13244,13245],{"class":41,"line":461},[39,13246,3458],{"emptyLinePlaceholder":1145},[39,13248,13249,13251,13253,13255],{"class":41,"line":475},[39,13250,3361],{"class":3021},[39,13252,1221],{"class":45},[39,13254,3366],{"class":1319},[39,13256,3777],{"class":45},[39,13258,13259],{"class":41,"line":665},[39,13260,3458],{"emptyLinePlaceholder":1145},[39,13262,13263,13265,13267],{"class":41,"line":671},[39,13264,5148],{"class":49},[39,13266,5151],{"class":56},[39,13268,2359],{"class":45},[39,13270,13271],{"class":41,"line":684},[39,13272,2630],{"class":45},[14,13274,13276],{"id":13275},"_62引用的注意事项","6.2引用的注意事项",[1171,13278,13279],{},[1174,13280,13281],{},"引用必须要初始化",[29,13283,13285],{"className":1209,"code":13284,"language":1211,"meta":34,"style":34},"int &b;\u002F\u002F非常错误！\n",[36,13286,13287],{"__ignoreMap":34},[39,13288,13289,13291,13293,13296],{"class":41,"line":42},[39,13290,1224],{"class":49},[39,13292,11640],{"class":49},[39,13294,13295],{"class":45},"b;",[39,13297,13298],{"class":102},"\u002F\u002F非常错误！\n",[1171,13300,13301],{"start":74},[1174,13302,13303],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[29,13305,13307],{"className":1209,"code":13306,"language":1211,"meta":34,"style":34},"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",[36,13308,13309,13317,13329,13341,13349,13365,13378,13396,13414,13434,13444,13452],{"__ignoreMap":34},[39,13310,13311,13313,13315],{"class":41,"line":42},[39,13312,1224],{"class":49},[39,13314,3031],{"class":3021},[39,13316,11909],{"class":45},[39,13318,13319,13321,13323,13325,13327],{"class":41,"line":74},[39,13320,3043],{"class":49},[39,13322,11925],{"class":45},[39,13324,50],{"class":49},[39,13326,3096],{"class":56},[39,13328,2359],{"class":45},[39,13330,13331,13333,13335,13337,13339],{"class":41,"line":99},[39,13332,3043],{"class":49},[39,13334,11938],{"class":45},[39,13336,50],{"class":49},[39,13338,10006],{"class":56},[39,13340,2359],{"class":45},[39,13342,13343,13346],{"class":41,"line":106},[39,13344,13345],{"class":102},"    \u002F\u002Fint &c;",[39,13347,13348],{"class":102}," \u002F\u002F错误，引用必须初始化\n",[39,13350,13351,13353,13355,13357,13359,13362],{"class":41,"line":112},[39,13352,3043],{"class":49},[39,13354,11640],{"class":49},[39,13356,4004],{"class":45},[39,13358,50],{"class":49},[39,13360,13361],{"class":45}," a;",[39,13363,13364],{"class":102}," \u002F\u002F一旦初始化后，就不可以更改\n",[39,13366,13367,13370,13372,13375],{"class":41,"line":118},[39,13368,13369],{"class":45},"    c ",[39,13371,50],{"class":49},[39,13373,13374],{"class":45}," b;",[39,13376,13377],{"class":102}," \u002F\u002F这是赋值操作，不是更改引用\n",[39,13379,13380,13382,13384,13386,13388,13390,13392,13394],{"class":41,"line":413},[39,13381,7585],{"class":45},[39,13383,2242],{"class":49},[39,13385,13157],{"class":1319},[39,13387,2510],{"class":49},[39,13389,11925],{"class":45},[39,13391,2242],{"class":49},[39,13393,12525],{"class":45},[39,13395,8309],{"class":102},[39,13397,13398,13400,13402,13404,13406,13408,13410,13412],{"class":41,"line":419},[39,13399,7585],{"class":45},[39,13401,2242],{"class":49},[39,13403,13176],{"class":1319},[39,13405,2510],{"class":49},[39,13407,11938],{"class":45},[39,13409,2242],{"class":49},[39,13411,12525],{"class":45},[39,13413,8309],{"class":102},[39,13415,13416,13418,13420,13423,13425,13428,13430,13432],{"class":41,"line":425},[39,13417,7585],{"class":45},[39,13419,2242],{"class":49},[39,13421,13422],{"class":1319}," \"c = \"",[39,13424,2510],{"class":49},[39,13426,13427],{"class":45}," c ",[39,13429,2242],{"class":49},[39,13431,12525],{"class":45},[39,13433,8309],{"class":102},[39,13435,13436,13438,13440,13442],{"class":41,"line":443},[39,13437,3361],{"class":3021},[39,13439,1221],{"class":45},[39,13441,3366],{"class":1319},[39,13443,3777],{"class":45},[39,13445,13446,13448,13450],{"class":41,"line":449},[39,13447,5148],{"class":49},[39,13449,5151],{"class":56},[39,13451,2359],{"class":45},[39,13453,13454],{"class":41,"line":455},[39,13455,2630],{"class":45},[14,13457,13459],{"id":13458},"_63引用做函数参数","6.3引用做函数参数",[19,13461,13462],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,13464,13465],{},"优点：可以简化指针修改实参",[29,13467,13469],{"className":1209,"code":13468,"language":1211,"meta":34,"style":34},"\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",[36,13470,13471,13476,13499,13510,13520,13529,13533,13537,13542,13564,13576,13588,13598,13602,13606,13611,13633,13643,13651,13659,13663,13667,13675,13679,13691,13703,13707,13718,13744,13748,13768,13792,13796,13806,13830,13834,13844,13848,13856],{"__ignoreMap":34},[39,13472,13473],{"class":41,"line":42},[39,13474,13475],{"class":102},"\u002F\u002F1. 值传递\n",[39,13477,13478,13480,13483,13485,13487,13489,13492,13494,13496],{"class":41,"line":74},[39,13479,6420],{"class":49},[39,13481,13482],{"class":3021}," mySwap01",[39,13484,1221],{"class":45},[39,13486,1224],{"class":49},[39,13488,2464],{"class":254},[39,13490,13491],{"class":45},", ",[39,13493,1224],{"class":49},[39,13495,3891],{"class":254},[39,13497,13498],{"class":45},") {\n",[39,13500,13501,13503,13506,13508],{"class":41,"line":99},[39,13502,3043],{"class":49},[39,13504,13505],{"class":45}," temp ",[39,13507,50],{"class":49},[39,13509,2498],{"class":45},[39,13511,13512,13515,13517],{"class":41,"line":106},[39,13513,13514],{"class":45},"    a ",[39,13516,50],{"class":49},[39,13518,13519],{"class":45}," b;\n",[39,13521,13522,13524,13526],{"class":41,"line":112},[39,13523,13195],{"class":45},[39,13525,50],{"class":49},[39,13527,13528],{"class":45}," temp;\n",[39,13530,13531],{"class":41,"line":118},[39,13532,2630],{"class":45},[39,13534,13535],{"class":41,"line":413},[39,13536,3458],{"emptyLinePlaceholder":1145},[39,13538,13539],{"class":41,"line":419},[39,13540,13541],{"class":102},"\u002F\u002F2. 地址传递\n",[39,13543,13544,13546,13549,13551,13554,13556,13558,13560,13562],{"class":41,"line":425},[39,13545,6420],{"class":49},[39,13547,13548],{"class":3021}," mySwap02",[39,13550,1221],{"class":45},[39,13552,13553],{"class":49},"int*",[39,13555,2464],{"class":254},[39,13557,13491],{"class":45},[39,13559,13553],{"class":49},[39,13561,3891],{"class":254},[39,13563,13498],{"class":45},[39,13565,13566,13568,13570,13572,13574],{"class":41,"line":443},[39,13567,3043],{"class":49},[39,13569,13505],{"class":45},[39,13571,50],{"class":49},[39,13573,7574],{"class":49},[39,13575,7253],{"class":45},[39,13577,13578,13580,13582,13584,13586],{"class":41,"line":449},[39,13579,7459],{"class":49},[39,13581,11975],{"class":45},[39,13583,50],{"class":49},[39,13585,7574],{"class":49},[39,13587,7125],{"class":45},[39,13589,13590,13592,13594,13596],{"class":41,"line":455},[39,13591,7459],{"class":49},[39,13593,12001],{"class":45},[39,13595,50],{"class":49},[39,13597,13528],{"class":45},[39,13599,13600],{"class":41,"line":461},[39,13601,2630],{"class":45},[39,13603,13604],{"class":41,"line":475},[39,13605,3458],{"emptyLinePlaceholder":1145},[39,13607,13608],{"class":41,"line":665},[39,13609,13610],{"class":102},"\u002F\u002F3. 引用传递\n",[39,13612,13613,13615,13618,13620,13623,13625,13627,13629,13631],{"class":41,"line":671},[39,13614,6420],{"class":49},[39,13616,13617],{"class":3021}," mySwap03",[39,13619,1221],{"class":45},[39,13621,13622],{"class":49},"int&",[39,13624,2464],{"class":254},[39,13626,13491],{"class":45},[39,13628,13622],{"class":49},[39,13630,3891],{"class":254},[39,13632,13498],{"class":45},[39,13634,13635,13637,13639,13641],{"class":41,"line":684},[39,13636,3043],{"class":49},[39,13638,13505],{"class":45},[39,13640,50],{"class":49},[39,13642,2498],{"class":45},[39,13644,13645,13647,13649],{"class":41,"line":2732},[39,13646,13514],{"class":45},[39,13648,50],{"class":49},[39,13650,13519],{"class":45},[39,13652,13653,13655,13657],{"class":41,"line":2737},[39,13654,13195],{"class":45},[39,13656,50],{"class":49},[39,13658,13528],{"class":45},[39,13660,13661],{"class":41,"line":2751},[39,13662,2630],{"class":45},[39,13664,13665],{"class":41,"line":2756},[39,13666,3458],{"emptyLinePlaceholder":1145},[39,13668,13669,13671,13673],{"class":41,"line":2785},[39,13670,1224],{"class":49},[39,13672,3031],{"class":3021},[39,13674,11909],{"class":45},[39,13676,13677],{"class":41,"line":2790},[39,13678,3458],{"emptyLinePlaceholder":1145},[39,13680,13681,13683,13685,13687,13689],{"class":41,"line":2807},[39,13682,3043],{"class":49},[39,13684,11925],{"class":45},[39,13686,50],{"class":49},[39,13688,3096],{"class":56},[39,13690,2359],{"class":45},[39,13692,13693,13695,13697,13699,13701],{"class":41,"line":2812},[39,13694,3043],{"class":49},[39,13696,11938],{"class":45},[39,13698,50],{"class":49},[39,13700,10006],{"class":56},[39,13702,2359],{"class":45},[39,13704,13705],{"class":41,"line":2817},[39,13706,3458],{"emptyLinePlaceholder":1145},[39,13708,13709,13712,13715],{"class":41,"line":2822},[39,13710,13711],{"class":3021},"    mySwap01",[39,13713,13714],{"class":45},"(a, b);",[39,13716,13717],{"class":102},"\u002F\u002F值传递，形参不会修饰实参\n",[39,13719,13720,13722,13724,13727,13729,13731,13733,13736,13738,13740,13742],{"class":41,"line":2836},[39,13721,7585],{"class":45},[39,13723,2242],{"class":49},[39,13725,13726],{"class":1319}," \"a:\"",[39,13728,2510],{"class":49},[39,13730,11925],{"class":45},[39,13732,2242],{"class":49},[39,13734,13735],{"class":1319}," \" b:\"",[39,13737,2510],{"class":49},[39,13739,11938],{"class":45},[39,13741,2242],{"class":49},[39,13743,9896],{"class":45},[39,13745,13746],{"class":41,"line":2841},[39,13747,3458],{"emptyLinePlaceholder":1145},[39,13749,13750,13753,13755,13757,13760,13762,13765],{"class":41,"line":3635},[39,13751,13752],{"class":3021},"    mySwap02",[39,13754,1221],{"class":45},[39,13756,1557],{"class":49},[39,13758,13759],{"class":45},"a, ",[39,13761,1557],{"class":49},[39,13763,13764],{"class":45},"b);",[39,13766,13767],{"class":102},"\u002F\u002F地址传递，形参会修饰实参\n",[39,13769,13770,13772,13774,13776,13778,13780,13782,13784,13786,13788,13790],{"class":41,"line":3649},[39,13771,7585],{"class":45},[39,13773,2242],{"class":49},[39,13775,13726],{"class":1319},[39,13777,2510],{"class":49},[39,13779,11925],{"class":45},[39,13781,2242],{"class":49},[39,13783,13735],{"class":1319},[39,13785,2510],{"class":49},[39,13787,11938],{"class":45},[39,13789,2242],{"class":49},[39,13791,9896],{"class":45},[39,13793,13794],{"class":41,"line":3657},[39,13795,3458],{"emptyLinePlaceholder":1145},[39,13797,13798,13801,13803],{"class":41,"line":3662},[39,13799,13800],{"class":3021},"    mySwap03",[39,13802,13714],{"class":45},[39,13804,13805],{"class":102},"\u002F\u002F引用传递，形参会修饰实参\n",[39,13807,13808,13810,13812,13814,13816,13818,13820,13822,13824,13826,13828],{"class":41,"line":3668},[39,13809,7585],{"class":45},[39,13811,2242],{"class":49},[39,13813,13726],{"class":1319},[39,13815,2510],{"class":49},[39,13817,11925],{"class":45},[39,13819,2242],{"class":49},[39,13821,13735],{"class":1319},[39,13823,2510],{"class":49},[39,13825,11938],{"class":45},[39,13827,2242],{"class":49},[39,13829,9896],{"class":45},[39,13831,13832],{"class":41,"line":3674},[39,13833,3458],{"emptyLinePlaceholder":1145},[39,13835,13836,13838,13840,13842],{"class":41,"line":3679},[39,13837,3361],{"class":3021},[39,13839,1221],{"class":45},[39,13841,3366],{"class":1319},[39,13843,3777],{"class":45},[39,13845,13846],{"class":41,"line":9004},[39,13847,3458],{"emptyLinePlaceholder":1145},[39,13849,13850,13852,13854],{"class":41,"line":9028},[39,13851,5148],{"class":49},[39,13853,5151],{"class":56},[39,13855,2359],{"class":45},[39,13857,13858],{"class":41,"line":9033},[39,13859,2630],{"class":45},[14,13861,13863],{"id":13862},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13865,13866],{},"作用：引用是可以作为函数的返回值存在的",[19,13868,10081,13869],{},[304,13870,13871],{},"不要返回局部变量引用",[19,13873,13874],{},"用法：函数调用作为左值",[29,13876,13878],{"className":10997,"code":13877,"language":10999,"meta":34,"style":34},"\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",[36,13879,13880,13885,13893,13908,13914,13918,13922,13927,13935,13952,13958,13962,13966,13974,13978,13983,13997,14017,14036,14040,14045,14058,14078,14096,14100,14116,14120,14139,14157,14161,14171,14175,14183],{"__ignoreMap":34},[39,13881,13882],{"class":41,"line":42},[39,13883,13884],{"class":102},"\u002F\u002F返回局部变量引用\n",[39,13886,13887,13889,13891],{"class":41,"line":74},[39,13888,13622],{"class":49},[39,13890,6644],{"class":3021},[39,13892,11909],{"class":45},[39,13894,13895,13897,13899,13901,13903,13905],{"class":41,"line":99},[39,13896,3043],{"class":49},[39,13898,11925],{"class":45},[39,13900,50],{"class":49},[39,13902,3096],{"class":56},[39,13904,1273],{"class":45},[39,13906,13907],{"class":102}," \u002F\u002F局部变量\n",[39,13909,13910,13912],{"class":41,"line":106},[39,13911,5148],{"class":49},[39,13913,2498],{"class":45},[39,13915,13916],{"class":41,"line":112},[39,13917,2630],{"class":45},[39,13919,13920],{"class":41,"line":118},[39,13921,3458],{"emptyLinePlaceholder":1145},[39,13923,13924],{"class":41,"line":413},[39,13925,13926],{"class":102},"\u002F\u002F返回静态变量引用\n",[39,13928,13929,13931,13933],{"class":41,"line":419},[39,13930,13622],{"class":49},[39,13932,6713],{"class":3021},[39,13934,11909],{"class":45},[39,13936,13937,13939,13941,13943,13945,13947,13949],{"class":41,"line":425},[39,13938,12076],{"class":49},[39,13940,3440],{"class":49},[39,13942,11925],{"class":45},[39,13944,50],{"class":49},[39,13946,10006],{"class":56},[39,13948,1273],{"class":45},[39,13950,13951],{"class":102},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[39,13953,13954,13956],{"class":41,"line":443},[39,13955,5148],{"class":49},[39,13957,2498],{"class":45},[39,13959,13960],{"class":41,"line":449},[39,13961,2630],{"class":45},[39,13963,13964],{"class":41,"line":455},[39,13965,3458],{"emptyLinePlaceholder":1145},[39,13967,13968,13970,13972],{"class":41,"line":461},[39,13969,1224],{"class":49},[39,13971,3031],{"class":3021},[39,13973,11909],{"class":45},[39,13975,13976],{"class":41,"line":475},[39,13977,3458],{"emptyLinePlaceholder":1145},[39,13979,13980],{"class":41,"line":665},[39,13981,13982],{"class":102},"    \u002F\u002F不能返回局部变量的引用\n",[39,13984,13985,13988,13991,13993,13995],{"class":41,"line":671},[39,13986,13987],{"class":49},"    int&",[39,13989,13990],{"class":45}," ref ",[39,13992,50],{"class":49},[39,13994,6644],{"class":3021},[39,13996,6692],{"class":45},[39,13998,13999,14001,14003,14006,14008,14010,14012,14014],{"class":41,"line":684},[39,14000,7585],{"class":45},[39,14002,2242],{"class":49},[39,14004,14005],{"class":1319}," \"ref = \"",[39,14007,2510],{"class":49},[39,14009,13990],{"class":45},[39,14011,2242],{"class":49},[39,14013,12525],{"class":45},[39,14015,14016],{"class":102},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[39,14018,14019,14021,14023,14025,14027,14029,14031,14033],{"class":41,"line":2732},[39,14020,7585],{"class":45},[39,14022,2242],{"class":49},[39,14024,14005],{"class":1319},[39,14026,2510],{"class":49},[39,14028,13990],{"class":45},[39,14030,2242],{"class":49},[39,14032,12525],{"class":45},[39,14034,14035],{"class":102},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[39,14037,14038],{"class":41,"line":2737},[39,14039,3458],{"emptyLinePlaceholder":1145},[39,14041,14042],{"class":41,"line":2751},[39,14043,14044],{"class":102},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[39,14046,14047,14049,14052,14054,14056],{"class":41,"line":2756},[39,14048,13987],{"class":49},[39,14050,14051],{"class":45}," ref2 ",[39,14053,50],{"class":49},[39,14055,6713],{"class":3021},[39,14057,6692],{"class":45},[39,14059,14060,14062,14064,14067,14069,14071,14073,14075],{"class":41,"line":2785},[39,14061,7585],{"class":45},[39,14063,2242],{"class":49},[39,14065,14066],{"class":1319}," \"ref2 = \"",[39,14068,2510],{"class":49},[39,14070,14051],{"class":45},[39,14072,2242],{"class":49},[39,14074,12525],{"class":45},[39,14076,14077],{"class":102}," \u002F\u002F20\n",[39,14079,14080,14082,14084,14086,14088,14090,14092,14094],{"class":41,"line":2790},[39,14081,7585],{"class":45},[39,14083,2242],{"class":49},[39,14085,14066],{"class":1319},[39,14087,2510],{"class":49},[39,14089,14051],{"class":45},[39,14091,2242],{"class":49},[39,14093,12525],{"class":45},[39,14095,14077],{"class":102},[39,14097,14098],{"class":41,"line":2807},[39,14099,3458],{"emptyLinePlaceholder":1145},[39,14101,14102,14104,14107,14109,14111,14113],{"class":41,"line":2812},[39,14103,6758],{"class":3021},[39,14105,14106],{"class":45},"() ",[39,14108,50],{"class":49},[39,14110,4057],{"class":56},[39,14112,1273],{"class":45},[39,14114,14115],{"class":102},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[39,14117,14118],{"class":41,"line":2817},[39,14119,3458],{"emptyLinePlaceholder":1145},[39,14121,14122,14124,14126,14128,14130,14132,14134,14136],{"class":41,"line":2822},[39,14123,7585],{"class":45},[39,14125,2242],{"class":49},[39,14127,14066],{"class":1319},[39,14129,2510],{"class":49},[39,14131,14051],{"class":45},[39,14133,2242],{"class":49},[39,14135,12525],{"class":45},[39,14137,14138],{"class":102}," \u002F\u002F1000\n",[39,14140,14141,14143,14145,14147,14149,14151,14153,14155],{"class":41,"line":2836},[39,14142,7585],{"class":45},[39,14144,2242],{"class":49},[39,14146,14066],{"class":1319},[39,14148,2510],{"class":49},[39,14150,14051],{"class":45},[39,14152,2242],{"class":49},[39,14154,12525],{"class":45},[39,14156,14138],{"class":102},[39,14158,14159],{"class":41,"line":2841},[39,14160,3458],{"emptyLinePlaceholder":1145},[39,14162,14163,14165,14167,14169],{"class":41,"line":3635},[39,14164,3361],{"class":3021},[39,14166,1221],{"class":45},[39,14168,3366],{"class":1319},[39,14170,3777],{"class":45},[39,14172,14173],{"class":41,"line":3649},[39,14174,3458],{"emptyLinePlaceholder":1145},[39,14176,14177,14179,14181],{"class":41,"line":3657},[39,14178,5148],{"class":49},[39,14180,5151],{"class":56},[39,14182,2359],{"class":45},[39,14184,14185],{"class":41,"line":3662},[39,14186,2630],{"class":45},[14,14188,14190],{"id":14189},"_65引用的本质","6.5引用的本质",[19,14192,14193,14194],{},"本质：",[304,14195,14196],{},"引用的本质在c++内部实现是一个指针常量.",[29,14198,14200],{"className":1209,"code":14199,"language":1211,"meta":34,"style":34},"\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",[36,14201,14202,14207,14223,14237,14241,14250,14262,14267,14272,14283,14296,14300,14316,14333,14337,14345,14353],{"__ignoreMap":34},[39,14203,14204],{"class":41,"line":42},[39,14205,14206],{"class":102},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[39,14208,14209,14211,14213,14215,14217,14220],{"class":41,"line":74},[39,14210,6420],{"class":49},[39,14212,12441],{"class":3021},[39,14214,1221],{"class":45},[39,14216,13622],{"class":49},[39,14218,14219],{"class":254}," ref",[39,14221,14222],{"class":45},"){\n",[39,14224,14225,14228,14230,14232,14234],{"class":41,"line":99},[39,14226,14227],{"class":45},"    ref ",[39,14229,50],{"class":49},[39,14231,6810],{"class":56},[39,14233,1273],{"class":45},[39,14235,14236],{"class":102}," \u002F\u002F ref是引用，转换为*ref = 100\n",[39,14238,14239],{"class":41,"line":106},[39,14240,2630],{"class":45},[39,14242,14243,14245,14247],{"class":41,"line":112},[39,14244,1224],{"class":49},[39,14246,3031],{"class":3021},[39,14248,14249],{"class":45},"(){\n",[39,14251,14252,14254,14256,14258,14260],{"class":41,"line":118},[39,14253,3043],{"class":49},[39,14255,11925],{"class":45},[39,14257,50],{"class":49},[39,14259,3096],{"class":56},[39,14261,2359],{"class":45},[39,14263,14264],{"class":41,"line":413},[39,14265,14266],{"class":45},"    \n",[39,14268,14269],{"class":41,"line":419},[39,14270,14271],{"class":102},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[39,14273,14274,14276,14278,14280],{"class":41,"line":425},[39,14275,13987],{"class":49},[39,14277,13990],{"class":45},[39,14279,50],{"class":49},[39,14281,14282],{"class":45}," a; \n",[39,14284,14285,14287,14289,14291,14293],{"class":41,"line":443},[39,14286,14227],{"class":45},[39,14288,50],{"class":49},[39,14290,10006],{"class":56},[39,14292,1273],{"class":45},[39,14294,14295],{"class":102}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[39,14297,14298],{"class":41,"line":449},[39,14299,14266],{"class":45},[39,14301,14302,14304,14306,14308,14310,14312,14314],{"class":41,"line":455},[39,14303,7585],{"class":45},[39,14305,2242],{"class":49},[39,14307,13726],{"class":1319},[39,14309,2510],{"class":49},[39,14311,11925],{"class":45},[39,14313,2242],{"class":49},[39,14315,9896],{"class":45},[39,14317,14318,14320,14322,14325,14327,14329,14331],{"class":41,"line":461},[39,14319,7585],{"class":45},[39,14321,2242],{"class":49},[39,14323,14324],{"class":1319}," \"ref:\"",[39,14326,2510],{"class":49},[39,14328,13990],{"class":45},[39,14330,2242],{"class":49},[39,14332,9896],{"class":45},[39,14334,14335],{"class":41,"line":475},[39,14336,14266],{"class":45},[39,14338,14339,14342],{"class":41,"line":665},[39,14340,14341],{"class":3021},"    func",[39,14343,14344],{"class":45},"(a);\n",[39,14346,14347,14349,14351],{"class":41,"line":671},[39,14348,5148],{"class":49},[39,14350,5151],{"class":56},[39,14352,2359],{"class":45},[39,14354,14355],{"class":41,"line":684},[39,14356,2630],{"class":45},[19,14358,12388],{},[1171,14360,14361,14364],{},[1174,14362,14363],{},"引用的本质，就是一个指针常量",[1174,14365,14366],{},"引用一旦初始化，就不可以发生改变",[14,14368,14370],{"id":14369},"_66常量引用","6.6常量引用",[19,14372,14373],{},"作用：常量引用主要用来修饰形参",[19,14375,14376,14377,14380],{},"在函数形参列表中，可以加",[304,14378,14379],{},"const修饰形参","，防止形参改变实参",[29,14382,14384],{"className":1209,"code":14383,"language":1211,"meta":34,"style":34},"\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",[36,14385,14386,14391,14396,14415,14420,14433,14437,14441,14449,14453,14458,14463,14477,14481,14489,14501,14505,14510,14522,14529,14533,14543,14547,14555],{"__ignoreMap":34},[39,14387,14388],{"class":41,"line":42},[39,14389,14390],{"class":102},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[39,14392,14393],{"class":41,"line":74},[39,14394,14395],{"class":102},"\u002F\u002F加上const就不能修改实参的\n",[39,14397,14398,14400,14403,14405,14407,14410,14413],{"class":41,"line":99},[39,14399,6420],{"class":49},[39,14401,14402],{"class":3021}," showValue",[39,14404,1221],{"class":45},[39,14406,7848],{"class":49},[39,14408,14409],{"class":49}," int&",[39,14411,14412],{"class":254}," v",[39,14414,13498],{"class":45},[39,14416,14417],{"class":41,"line":106},[39,14418,14419],{"class":102},"    \u002F\u002Fv += 100;\n",[39,14421,14422,14424,14426,14429,14431],{"class":41,"line":112},[39,14423,7585],{"class":45},[39,14425,2242],{"class":49},[39,14427,14428],{"class":45}," v ",[39,14430,2242],{"class":49},[39,14432,9896],{"class":45},[39,14434,14435],{"class":41,"line":118},[39,14436,2630],{"class":45},[39,14438,14439],{"class":41,"line":413},[39,14440,3458],{"emptyLinePlaceholder":1145},[39,14442,14443,14445,14447],{"class":41,"line":419},[39,14444,1224],{"class":49},[39,14446,3031],{"class":3021},[39,14448,11909],{"class":45},[39,14450,14451],{"class":41,"line":425},[39,14452,3458],{"emptyLinePlaceholder":1145},[39,14454,14455],{"class":41,"line":443},[39,14456,14457],{"class":102},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[39,14459,14460],{"class":41,"line":449},[39,14461,14462],{"class":102},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[39,14464,14465,14467,14469,14471,14473,14475],{"class":41,"line":455},[39,14466,12277],{"class":49},[39,14468,14409],{"class":49},[39,14470,13990],{"class":45},[39,14472,50],{"class":49},[39,14474,3096],{"class":56},[39,14476,2359],{"class":45},[39,14478,14479],{"class":41,"line":461},[39,14480,3458],{"emptyLinePlaceholder":1145},[39,14482,14483,14486],{"class":41,"line":475},[39,14484,14485],{"class":102},"    \u002F\u002Fref = 100;",[39,14487,14488],{"class":102},"  \u002F\u002F加入const后不可以修改变量\n",[39,14490,14491,14493,14495,14497,14499],{"class":41,"line":665},[39,14492,7585],{"class":45},[39,14494,2242],{"class":49},[39,14496,13990],{"class":45},[39,14498,2242],{"class":49},[39,14500,9896],{"class":45},[39,14502,14503],{"class":41,"line":671},[39,14504,3458],{"emptyLinePlaceholder":1145},[39,14506,14507],{"class":41,"line":684},[39,14508,14509],{"class":102},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[39,14511,14512,14514,14516,14518,14520],{"class":41,"line":2732},[39,14513,3043],{"class":49},[39,14515,11925],{"class":45},[39,14517,50],{"class":49},[39,14519,3096],{"class":56},[39,14521,2359],{"class":45},[39,14523,14524,14527],{"class":41,"line":2737},[39,14525,14526],{"class":3021},"    showValue",[39,14528,14344],{"class":45},[39,14530,14531],{"class":41,"line":2751},[39,14532,3458],{"emptyLinePlaceholder":1145},[39,14534,14535,14537,14539,14541],{"class":41,"line":2756},[39,14536,3361],{"class":3021},[39,14538,1221],{"class":45},[39,14540,3366],{"class":1319},[39,14542,3777],{"class":45},[39,14544,14545],{"class":41,"line":2785},[39,14546,3458],{"emptyLinePlaceholder":1145},[39,14548,14549,14551,14553],{"class":41,"line":2790},[39,14550,5148],{"class":49},[39,14552,5151],{"class":56},[39,14554,2359],{"class":45},[39,14556,14557],{"class":41,"line":2807},[39,14558,2630],{"class":45},[1133,14560,14561],{},"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":34,"searchDepth":74,"depth":74,"links":14563},[14564,14565,14566,14567,14568,14569],{"id":13096,"depth":74,"text":13097},{"id":13275,"depth":74,"text":13276},{"id":13458,"depth":74,"text":13459},{"id":13862,"depth":74,"text":13863},{"id":14189,"depth":74,"text":14190},{"id":14369,"depth":74,"text":14370},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13088,"description":34},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":14576,"title":14577,"body":14578,"description":34,"extension":1143,"meta":15659,"navigation":1145,"path":15660,"seo":15661,"stem":15662,"__hash__":15663},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":14579,"toc":15651},[14580,14583,14587,14590,14595,14827,14829,14840,14844,14847,14855,14959,14962,14966,14969,14973,14976,14981,15003,15009,15336,15339,15343,15351,15648],[10,14581,14577],{"id":14582},"_7函数高级部分",[14,14584,14586],{"id":14585},"_71函数默认参数","7.1函数默认参数",[19,14588,14589],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,14591,6238,14592],{},[36,14593,14594],{}," 返回值类型  函数名 （参数= 默认值）{}",[29,14596,14598],{"className":1209,"code":14597,"language":1211,"meta":34,"style":34},"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",[36,14599,14600,14635,14650,14654,14658,14663,14668,14697,14717,14727,14731,14735,14743,14747,14775,14797,14801,14811,14815,14823],{"__ignoreMap":34},[39,14601,14602,14604,14606,14608,14610,14612,14614,14616,14618,14621,14623,14625,14627,14629,14631,14633],{"class":41,"line":42},[39,14603,1224],{"class":49},[39,14605,12441],{"class":3021},[39,14607,1221],{"class":45},[39,14609,1224],{"class":49},[39,14611,2464],{"class":254},[39,14613,13491],{"class":45},[39,14615,1224],{"class":49},[39,14617,3891],{"class":254},[39,14619,14620],{"class":49}," =",[39,14622,3096],{"class":56},[39,14624,13491],{"class":45},[39,14626,1224],{"class":49},[39,14628,3907],{"class":254},[39,14630,14620],{"class":49},[39,14632,3096],{"class":56},[39,14634,13498],{"class":45},[39,14636,14637,14639,14641,14643,14645,14647],{"class":41,"line":74},[39,14638,5148],{"class":49},[39,14640,11925],{"class":45},[39,14642,1682],{"class":49},[39,14644,11938],{"class":45},[39,14646,1682],{"class":49},[39,14648,14649],{"class":45}," c;\n",[39,14651,14652],{"class":41,"line":99},[39,14653,2630],{"class":45},[39,14655,14656],{"class":41,"line":106},[39,14657,3458],{"emptyLinePlaceholder":1145},[39,14659,14660],{"class":41,"line":112},[39,14661,14662],{"class":102},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[39,14664,14665],{"class":41,"line":118},[39,14666,14667],{"class":102},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[39,14669,14670,14672,14675,14677,14679,14681,14683,14685,14687,14689,14691,14693,14695],{"class":41,"line":413},[39,14671,1224],{"class":49},[39,14673,14674],{"class":3021}," func2",[39,14676,1221],{"class":45},[39,14678,1224],{"class":49},[39,14680,2464],{"class":254},[39,14682,14620],{"class":49},[39,14684,3096],{"class":56},[39,14686,13491],{"class":45},[39,14688,1224],{"class":49},[39,14690,3891],{"class":254},[39,14692,14620],{"class":49},[39,14694,3096],{"class":56},[39,14696,3777],{"class":45},[39,14698,14699,14701,14703,14705,14707,14709,14711,14713,14715],{"class":41,"line":419},[39,14700,1224],{"class":49},[39,14702,14674],{"class":3021},[39,14704,1221],{"class":45},[39,14706,1224],{"class":49},[39,14708,2464],{"class":254},[39,14710,13491],{"class":45},[39,14712,1224],{"class":49},[39,14714,3891],{"class":254},[39,14716,13498],{"class":45},[39,14718,14719,14721,14723,14725],{"class":41,"line":425},[39,14720,5148],{"class":49},[39,14722,11925],{"class":45},[39,14724,1682],{"class":49},[39,14726,13519],{"class":45},[39,14728,14729],{"class":41,"line":443},[39,14730,2630],{"class":45},[39,14732,14733],{"class":41,"line":449},[39,14734,3458],{"emptyLinePlaceholder":1145},[39,14736,14737,14739,14741],{"class":41,"line":455},[39,14738,1224],{"class":49},[39,14740,3031],{"class":3021},[39,14742,11909],{"class":45},[39,14744,14745],{"class":41,"line":461},[39,14746,3458],{"emptyLinePlaceholder":1145},[39,14748,14749,14751,14753,14756,14758,14760,14762,14764,14766,14768,14771,14773],{"class":41,"line":475},[39,14750,7585],{"class":45},[39,14752,2242],{"class":49},[39,14754,14755],{"class":1319}," \"ret = \"",[39,14757,2510],{"class":49},[39,14759,12441],{"class":3021},[39,14761,1221],{"class":45},[39,14763,1898],{"class":56},[39,14765,13491],{"class":45},[39,14767,1898],{"class":56},[39,14769,14770],{"class":45},") ",[39,14772,2242],{"class":49},[39,14774,9896],{"class":45},[39,14776,14777,14779,14781,14783,14785,14787,14789,14791,14793,14795],{"class":41,"line":665},[39,14778,7585],{"class":45},[39,14780,2242],{"class":49},[39,14782,14755],{"class":1319},[39,14784,2510],{"class":49},[39,14786,12441],{"class":3021},[39,14788,1221],{"class":45},[39,14790,1519],{"class":56},[39,14792,14770],{"class":45},[39,14794,2242],{"class":49},[39,14796,9896],{"class":45},[39,14798,14799],{"class":41,"line":671},[39,14800,3458],{"emptyLinePlaceholder":1145},[39,14802,14803,14805,14807,14809],{"class":41,"line":684},[39,14804,3361],{"class":3021},[39,14806,1221],{"class":45},[39,14808,3366],{"class":1319},[39,14810,3777],{"class":45},[39,14812,14813],{"class":41,"line":2732},[39,14814,3458],{"emptyLinePlaceholder":1145},[39,14816,14817,14819,14821],{"class":41,"line":2737},[39,14818,5148],{"class":49},[39,14820,5151],{"class":56},[39,14822,2359],{"class":45},[39,14824,14825],{"class":41,"line":2751},[39,14826,2630],{"class":45},[19,14828,12388],{},[1171,14830,14831,14834,14837],{},[1174,14832,14833],{},"我传就用我；没传就用你",[1174,14835,14836],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[1174,14838,14839],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,14841,14843],{"id":14842},"_72函数的占位参数","7.2函数的占位参数",[19,14845,14846],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,14848,14849,14851,14852],{},[304,14850,6238],{}," ",[36,14853,14854],{},"返回值类型 函数名 (数据类型){}",[29,14856,14858],{"className":1209,"code":14857,"language":1211,"meta":34,"style":34},"\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",[36,14859,14860,14865,14883,14896,14900,14908,14912,14929,14933,14943,14947,14955],{"__ignoreMap":34},[39,14861,14862],{"class":41,"line":42},[39,14863,14864],{"class":102},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[39,14866,14867,14869,14871,14873,14875,14877,14879,14881],{"class":41,"line":74},[39,14868,6420],{"class":49},[39,14870,12441],{"class":3021},[39,14872,1221],{"class":45},[39,14874,1224],{"class":49},[39,14876,2464],{"class":254},[39,14878,13491],{"class":45},[39,14880,1224],{"class":49},[39,14882,13498],{"class":45},[39,14884,14885,14887,14889,14892,14894],{"class":41,"line":99},[39,14886,7585],{"class":45},[39,14888,2242],{"class":49},[39,14890,14891],{"class":1319}," \"this is func\"",[39,14893,2510],{"class":49},[39,14895,9896],{"class":45},[39,14897,14898],{"class":41,"line":106},[39,14899,2630],{"class":45},[39,14901,14902,14904,14906],{"class":41,"line":112},[39,14903,1224],{"class":49},[39,14905,3031],{"class":3021},[39,14907,11909],{"class":45},[39,14909,14910],{"class":41,"line":118},[39,14911,3458],{"emptyLinePlaceholder":1145},[39,14913,14914,14916,14918,14920,14922,14924,14926],{"class":41,"line":413},[39,14915,14341],{"class":3021},[39,14917,1221],{"class":45},[39,14919,146],{"class":56},[39,14921,60],{"class":45},[39,14923,146],{"class":56},[39,14925,7022],{"class":45},[39,14927,14928],{"class":102}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[39,14930,14931],{"class":41,"line":419},[39,14932,3458],{"emptyLinePlaceholder":1145},[39,14934,14935,14937,14939,14941],{"class":41,"line":425},[39,14936,3361],{"class":3021},[39,14938,1221],{"class":45},[39,14940,3366],{"class":1319},[39,14942,3777],{"class":45},[39,14944,14945],{"class":41,"line":443},[39,14946,3458],{"emptyLinePlaceholder":1145},[39,14948,14949,14951,14953],{"class":41,"line":449},[39,14950,5148],{"class":49},[39,14952,5151],{"class":56},[39,14954,2359],{"class":45},[39,14956,14957],{"class":41,"line":455},[39,14958,2630],{"class":45},[19,14960,14961],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14963,14965],{"id":14964},"_73函数重载","7.3函数重载",[19,14967,14968],{},"意思是函数名是可以相同的",[1188,14970,14972],{"id":14971},"_731基本语法","7.3.1基本语法",[19,14974,14975],{},"作用：函数名可以相同，提高复用性",[19,14977,14978],{},[304,14979,14980],{},"函数重载满足条件：",[2205,14982,14983,14986,14989],{},[1174,14984,14985],{},"同一个作用域下",[1174,14987,14988],{},"函数名称相同",[1174,14990,14991,14992,14995,14996,14999,15000],{},"函数参数",[304,14993,14994],{},"类型不同","  或者 ",[304,14997,14998],{},"个数不同"," 或者 ",[304,15001,15002],{},"顺序不同",[19,15004,15005,15008],{},[304,15006,15007],{},"注意:","  函数的返回值不可以作为函数重载的条件",[29,15010,15012],{"className":10997,"code":15011,"language":10999,"meta":34,"style":34},"\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",[36,15013,15014,15019,15027,15031,15044,15048,15062,15066,15079,15083,15098,15102,15115,15119,15140,15144,15157,15161,15181,15185,15198,15202,15206,15211,15216,15221,15226,15231,15235,15239,15247,15251,15257,15267,15277,15291,15306,15310,15320,15324,15332],{"__ignoreMap":34},[39,15015,15016],{"class":41,"line":42},[39,15017,15018],{"class":102},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[39,15020,15021,15023,15025],{"class":41,"line":74},[39,15022,6420],{"class":49},[39,15024,12441],{"class":3021},[39,15026,3034],{"class":45},[39,15028,15029],{"class":41,"line":99},[39,15030,2611],{"class":45},[39,15032,15033,15035,15037,15040,15042],{"class":41,"line":106},[39,15034,7585],{"class":45},[39,15036,2242],{"class":49},[39,15038,15039],{"class":1319}," \"func 的调用！\"",[39,15041,2510],{"class":49},[39,15043,9896],{"class":45},[39,15045,15046],{"class":41,"line":112},[39,15047,2630],{"class":45},[39,15049,15050,15052,15054,15056,15058,15060],{"class":41,"line":118},[39,15051,6420],{"class":49},[39,15053,12441],{"class":3021},[39,15055,1221],{"class":45},[39,15057,1224],{"class":49},[39,15059,2464],{"class":254},[39,15061,209],{"class":45},[39,15063,15064],{"class":41,"line":413},[39,15065,2611],{"class":45},[39,15067,15068,15070,15072,15075,15077],{"class":41,"line":419},[39,15069,7585],{"class":45},[39,15071,2242],{"class":49},[39,15073,15074],{"class":1319}," \"func (int a) 的调用！\"",[39,15076,2510],{"class":49},[39,15078,9896],{"class":45},[39,15080,15081],{"class":41,"line":425},[39,15082,2630],{"class":45},[39,15084,15085,15087,15089,15091,15094,15096],{"class":41,"line":443},[39,15086,6420],{"class":49},[39,15088,12441],{"class":3021},[39,15090,1221],{"class":45},[39,15092,15093],{"class":49},"double",[39,15095,2464],{"class":254},[39,15097,209],{"class":45},[39,15099,15100],{"class":41,"line":449},[39,15101,2611],{"class":45},[39,15103,15104,15106,15108,15111,15113],{"class":41,"line":455},[39,15105,7585],{"class":45},[39,15107,2242],{"class":49},[39,15109,15110],{"class":1319}," \"func (double a)的调用！\"",[39,15112,2510],{"class":49},[39,15114,9896],{"class":45},[39,15116,15117],{"class":41,"line":461},[39,15118,2630],{"class":45},[39,15120,15121,15123,15125,15127,15129,15131,15134,15136,15138],{"class":41,"line":475},[39,15122,6420],{"class":49},[39,15124,12441],{"class":3021},[39,15126,1221],{"class":45},[39,15128,1224],{"class":49},[39,15130,2464],{"class":254},[39,15132,15133],{"class":45}," ,",[39,15135,15093],{"class":49},[39,15137,3891],{"class":254},[39,15139,209],{"class":45},[39,15141,15142],{"class":41,"line":665},[39,15143,2611],{"class":45},[39,15145,15146,15148,15150,15153,15155],{"class":41,"line":671},[39,15147,7585],{"class":45},[39,15149,2242],{"class":49},[39,15151,15152],{"class":1319}," \"func (int a ,double b) 的调用！\"",[39,15154,2510],{"class":49},[39,15156,9896],{"class":45},[39,15158,15159],{"class":41,"line":684},[39,15160,2630],{"class":45},[39,15162,15163,15165,15167,15169,15171,15173,15175,15177,15179],{"class":41,"line":2732},[39,15164,6420],{"class":49},[39,15166,12441],{"class":3021},[39,15168,1221],{"class":45},[39,15170,15093],{"class":49},[39,15172,2464],{"class":254},[39,15174,15133],{"class":45},[39,15176,1224],{"class":49},[39,15178,3891],{"class":254},[39,15180,209],{"class":45},[39,15182,15183],{"class":41,"line":2737},[39,15184,2611],{"class":45},[39,15186,15187,15189,15191,15194,15196],{"class":41,"line":2751},[39,15188,7585],{"class":45},[39,15190,2242],{"class":49},[39,15192,15193],{"class":1319}," \"func (double a ,int b)的调用！\"",[39,15195,2510],{"class":49},[39,15197,9896],{"class":45},[39,15199,15200],{"class":41,"line":2756},[39,15201,2630],{"class":45},[39,15203,15204],{"class":41,"line":2785},[39,15205,3458],{"emptyLinePlaceholder":1145},[39,15207,15208],{"class":41,"line":2790},[39,15209,15210],{"class":102},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[39,15212,15213],{"class":41,"line":2807},[39,15214,15215],{"class":102},"\u002F\u002Fint func(double a, int b)\n",[39,15217,15218],{"class":41,"line":2812},[39,15219,15220],{"class":102},"\u002F\u002F{\n",[39,15222,15223],{"class":41,"line":2817},[39,15224,15225],{"class":102},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[39,15227,15228],{"class":41,"line":2822},[39,15229,15230],{"class":102},"\u002F\u002F}\n",[39,15232,15233],{"class":41,"line":2836},[39,15234,3458],{"emptyLinePlaceholder":1145},[39,15236,15237],{"class":41,"line":2841},[39,15238,3458],{"emptyLinePlaceholder":1145},[39,15240,15241,15243,15245],{"class":41,"line":3635},[39,15242,1224],{"class":49},[39,15244,3031],{"class":3021},[39,15246,11909],{"class":45},[39,15248,15249],{"class":41,"line":3649},[39,15250,3458],{"emptyLinePlaceholder":1145},[39,15252,15253,15255],{"class":41,"line":3657},[39,15254,14341],{"class":3021},[39,15256,6692],{"class":45},[39,15258,15259,15261,15263,15265],{"class":41,"line":3662},[39,15260,14341],{"class":3021},[39,15262,1221],{"class":45},[39,15264,146],{"class":56},[39,15266,3777],{"class":45},[39,15268,15269,15271,15273,15275],{"class":41,"line":3668},[39,15270,14341],{"class":3021},[39,15272,1221],{"class":45},[39,15274,1267],{"class":56},[39,15276,3777],{"class":45},[39,15278,15279,15281,15283,15285,15287,15289],{"class":41,"line":3674},[39,15280,14341],{"class":3021},[39,15282,1221],{"class":45},[39,15284,146],{"class":56},[39,15286,60],{"class":45},[39,15288,1267],{"class":56},[39,15290,3777],{"class":45},[39,15292,15293,15295,15297,15299,15302,15304],{"class":41,"line":3679},[39,15294,14341],{"class":3021},[39,15296,1221],{"class":45},[39,15298,1267],{"class":56},[39,15300,15301],{"class":45}," , ",[39,15303,146],{"class":56},[39,15305,3777],{"class":45},[39,15307,15308],{"class":41,"line":9004},[39,15309,14266],{"class":45},[39,15311,15312,15314,15316,15318],{"class":41,"line":9028},[39,15313,3361],{"class":3021},[39,15315,1221],{"class":45},[39,15317,3366],{"class":1319},[39,15319,3777],{"class":45},[39,15321,15322],{"class":41,"line":9033},[39,15323,3458],{"emptyLinePlaceholder":1145},[39,15325,15326,15328,15330],{"class":41,"line":9039},[39,15327,5148],{"class":49},[39,15329,5151],{"class":56},[39,15331,2359],{"class":45},[39,15333,15334],{"class":41,"line":9066},[39,15335,2630],{"class":45},[19,15337,15338],{},"重点：函数返回值不可以作为函数重载条件！",[1188,15340,15342],{"id":15341},"_732注意事项","7.3.2注意事项",[2205,15344,15345,15348],{},[1174,15346,15347],{},"引用作为重载条件!!!",[1174,15349,15350],{},"函数重载碰到函数默认参数",[29,15352,15354],{"className":1209,"code":15353,"language":1211,"meta":34,"style":34},"\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",[36,15355,15356,15361,15366,15370,15386,15390,15403,15407,15411,15429,15433,15446,15450,15454,15458,15463,15467,15491,15495,15508,15512,15516,15530,15534,15547,15551,15555,15563,15567,15579,15589,15602,15606,15610,15618,15622,15632,15636,15644],{"__ignoreMap":34},[39,15357,15358],{"class":41,"line":42},[39,15359,15360],{"class":102},"\u002F\u002F函数重载注意事项\n",[39,15362,15363],{"class":41,"line":74},[39,15364,15365],{"class":102},"\u002F\u002F1、引用作为重载条件\n",[39,15367,15368],{"class":41,"line":99},[39,15369,3458],{"emptyLinePlaceholder":1145},[39,15371,15372,15374,15376,15378,15380,15382,15384],{"class":41,"line":106},[39,15373,6420],{"class":49},[39,15375,12441],{"class":3021},[39,15377,1221],{"class":45},[39,15379,1224],{"class":49},[39,15381,11640],{"class":49},[39,15383,46],{"class":254},[39,15385,209],{"class":45},[39,15387,15388],{"class":41,"line":112},[39,15389,2611],{"class":45},[39,15391,15392,15394,15396,15399,15401],{"class":41,"line":118},[39,15393,7585],{"class":45},[39,15395,2242],{"class":49},[39,15397,15398],{"class":1319}," \"func (int &a) 调用 \"",[39,15400,2510],{"class":49},[39,15402,9896],{"class":45},[39,15404,15405],{"class":41,"line":413},[39,15406,2630],{"class":45},[39,15408,15409],{"class":41,"line":419},[39,15410,3458],{"emptyLinePlaceholder":1145},[39,15412,15413,15415,15417,15419,15421,15423,15425,15427],{"class":41,"line":425},[39,15414,6420],{"class":49},[39,15416,12441],{"class":3021},[39,15418,1221],{"class":45},[39,15420,7848],{"class":49},[39,15422,3440],{"class":49},[39,15424,11640],{"class":49},[39,15426,46],{"class":254},[39,15428,209],{"class":45},[39,15430,15431],{"class":41,"line":443},[39,15432,2611],{"class":45},[39,15434,15435,15437,15439,15442,15444],{"class":41,"line":449},[39,15436,7585],{"class":45},[39,15438,2242],{"class":49},[39,15440,15441],{"class":1319}," \"func (const int &a) 调用 \"",[39,15443,2510],{"class":49},[39,15445,9896],{"class":45},[39,15447,15448],{"class":41,"line":455},[39,15449,2630],{"class":45},[39,15451,15452],{"class":41,"line":461},[39,15453,3458],{"emptyLinePlaceholder":1145},[39,15455,15456],{"class":41,"line":475},[39,15457,3458],{"emptyLinePlaceholder":1145},[39,15459,15460],{"class":41,"line":665},[39,15461,15462],{"class":102},"\u002F\u002F2、函数重载碰到函数默认参数\n",[39,15464,15465],{"class":41,"line":671},[39,15466,3458],{"emptyLinePlaceholder":1145},[39,15468,15469,15471,15473,15475,15477,15479,15481,15483,15485,15487,15489],{"class":41,"line":684},[39,15470,6420],{"class":49},[39,15472,14674],{"class":3021},[39,15474,1221],{"class":45},[39,15476,1224],{"class":49},[39,15478,2464],{"class":254},[39,15480,13491],{"class":45},[39,15482,1224],{"class":49},[39,15484,3891],{"class":254},[39,15486,14620],{"class":49},[39,15488,3096],{"class":56},[39,15490,209],{"class":45},[39,15492,15493],{"class":41,"line":2732},[39,15494,2611],{"class":45},[39,15496,15497,15499,15501,15504,15506],{"class":41,"line":2737},[39,15498,7585],{"class":45},[39,15500,2242],{"class":49},[39,15502,15503],{"class":1319}," \"func2(int a, int b = 10) 调用\"",[39,15505,2510],{"class":49},[39,15507,9896],{"class":45},[39,15509,15510],{"class":41,"line":2751},[39,15511,2630],{"class":45},[39,15513,15514],{"class":41,"line":2756},[39,15515,3458],{"emptyLinePlaceholder":1145},[39,15517,15518,15520,15522,15524,15526,15528],{"class":41,"line":2785},[39,15519,6420],{"class":49},[39,15521,14674],{"class":3021},[39,15523,1221],{"class":45},[39,15525,1224],{"class":49},[39,15527,2464],{"class":254},[39,15529,209],{"class":45},[39,15531,15532],{"class":41,"line":2790},[39,15533,2611],{"class":45},[39,15535,15536,15538,15540,15543,15545],{"class":41,"line":2807},[39,15537,7585],{"class":45},[39,15539,2242],{"class":49},[39,15541,15542],{"class":1319}," \"func2(int a) 调用\"",[39,15544,2510],{"class":49},[39,15546,9896],{"class":45},[39,15548,15549],{"class":41,"line":2812},[39,15550,2630],{"class":45},[39,15552,15553],{"class":41,"line":2817},[39,15554,3458],{"emptyLinePlaceholder":1145},[39,15556,15557,15559,15561],{"class":41,"line":2822},[39,15558,1224],{"class":49},[39,15560,3031],{"class":3021},[39,15562,11909],{"class":45},[39,15564,15565],{"class":41,"line":2836},[39,15566,14266],{"class":45},[39,15568,15569,15571,15573,15575,15577],{"class":41,"line":2841},[39,15570,3043],{"class":49},[39,15572,11925],{"class":45},[39,15574,50],{"class":49},[39,15576,3096],{"class":56},[39,15578,2359],{"class":45},[39,15580,15581,15583,15586],{"class":41,"line":3635},[39,15582,14341],{"class":3021},[39,15584,15585],{"class":45},"(a);",[39,15587,15588],{"class":102}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[39,15590,15591,15593,15595,15597,15599],{"class":41,"line":3649},[39,15592,14341],{"class":3021},[39,15594,1221],{"class":45},[39,15596,146],{"class":56},[39,15598,7022],{"class":45},[39,15600,15601],{"class":102},"\u002F\u002F调用有const   10是个常量\n",[39,15603,15604],{"class":41,"line":3657},[39,15605,3458],{"emptyLinePlaceholder":1145},[39,15607,15608],{"class":41,"line":3662},[39,15609,3458],{"emptyLinePlaceholder":1145},[39,15611,15612,15615],{"class":41,"line":3668},[39,15613,15614],{"class":102},"    \u002F\u002Ffunc2(10);",[39,15616,15617],{"class":102}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[39,15619,15620],{"class":41,"line":3674},[39,15621,3458],{"emptyLinePlaceholder":1145},[39,15623,15624,15626,15628,15630],{"class":41,"line":3679},[39,15625,3361],{"class":3021},[39,15627,1221],{"class":45},[39,15629,3366],{"class":1319},[39,15631,3777],{"class":45},[39,15633,15634],{"class":41,"line":9004},[39,15635,3458],{"emptyLinePlaceholder":1145},[39,15637,15638,15640,15642],{"class":41,"line":9028},[39,15639,5148],{"class":49},[39,15641,5151],{"class":56},[39,15643,2359],{"class":45},[39,15645,15646],{"class":41,"line":9033},[39,15647,2630],{"class":45},[1133,15649,15650],{},"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":34,"searchDepth":74,"depth":74,"links":15652},[15653,15654,15655],{"id":14585,"depth":74,"text":14586},{"id":14842,"depth":74,"text":14843},{"id":14964,"depth":74,"text":14965,"children":15656},[15657,15658],{"id":14971,"depth":99,"text":14972},{"id":15341,"depth":99,"text":15342},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":14577,"description":34},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15665,"title":15666,"body":15667,"description":24421,"extension":1143,"meta":24422,"navigation":1145,"path":24423,"seo":24424,"stem":24425,"__hash__":24426},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15668,"toc":24402},[15669,15672,15678,15685,15690,15693,15696,15699,15703,15707,15710,15713,15721,15726,15729,15736,15741,15900,15903,16156,16159,16162,16165,16170,16173,16176,16187,16192,16428,16432,16442,16445,16453,16600,16604,16607,16610,16614,17059,17063,17071,17079,17991,17998,18003,18631,18634,18637,18640,18759,18762,18849,18852,18978,18981,19075,19078,19431,19435,19443,19447,19454,19457,19460,19471,19477,19482,19494,19502,19522,19530,19547,19733,19736,19740,19743,19746,19749,19752,19755,19758,19761,20221,20227,20231,20234,20245,20832,20835,21324,21328,21331,21334,21337,21340,21343,21351,21747,21751,21754,21757,22204,22207,22210,22215,22218,22223,22226,22230,22233,22235,22241,22244,22550,22560,22601,22605,22608,22610,22643,22646,22953,22955,22970,22973,22996,23005,23011,23014,23018,23021,23024,23029,23040,23045,23053,23058,23188,23191,23194,23369,23374,23586,23590,23593,23707,23712,23951,23955,23959,23962,23965,23970,24075,24078,24081,24084,24088,24199,24202,24205,24210,24262,24265,24268,24273,24319,24322,24327,24395,24397,24400],[10,15670,15666],{"id":15671},"_8类和对象",[19,15673,15674,15675],{},"C++面向对象的三大特性为",[304,15676,15677],{},"封装、继承、多态",[19,15679,15680,15681,15684],{},"C++认为",[304,15682,15683],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,15686,15687],{},[304,15688,15689],{},"例如：",[19,15691,15692],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,15694,15695],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,15697,15698],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,15700,15702],{"id":15701},"_81封装","8.1封装",[1188,15704,15706],{"id":15705},"_811封装的意义","8.1.1封装的意义",[19,15708,15709],{},"封装是C++面向对象三大特性之一",[19,15711,15712],{},"封装的意义：",[2205,15714,15715,15718],{},[1174,15716,15717],{},"将属性和行为作为一个整体，表现生活中的事物",[1174,15719,15720],{},"将属性和行为加以权限控制",[19,15722,15723],{},[304,15724,15725],{},"封装意义一：",[19,15727,15728],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,15730,15731,14851,15733],{},[304,15732,6238],{},[36,15734,15735],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[1171,15737,15738],{},[1174,15739,15740],{},"**示例1：**设计一个圆类，求圆的周长",[29,15742,15744],{"className":1209,"code":15743,"language":1211,"meta":34,"style":34},"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",[36,15745,15746,15754,15758,15763,15768,15773,15778,15785,15790,15800,15804,15822,15826,15830,15838,15842,15847,15852,15857,15862,15873,15896],{"__ignoreMap":34},[39,15747,15748,15751],{"class":41,"line":42},[39,15749,15750],{"class":49},"class",[39,15752,15753],{"class":3021}," Circle\n",[39,15755,15756],{"class":41,"line":74},[39,15757,2611],{"class":45},[39,15759,15760],{"class":41,"line":99},[39,15761,15762],{"class":102},"    \u002F\u002F访问权限\n",[39,15764,15765],{"class":41,"line":106},[39,15766,15767],{"class":102},"    \u002F\u002F公共权限\n",[39,15769,15770],{"class":41,"line":112},[39,15771,15772],{"class":49},"public:\n",[39,15774,15775],{"class":41,"line":118},[39,15776,15777],{"class":102},"    \u002F\u002F属性\n",[39,15779,15780,15782],{"class":41,"line":413},[39,15781,3043],{"class":49},[39,15783,15784],{"class":45}," m_r;\n",[39,15786,15787],{"class":41,"line":419},[39,15788,15789],{"class":102},"    \u002F\u002F行为\n",[39,15791,15792,15795,15798],{"class":41,"line":425},[39,15793,15794],{"class":49},"    double",[39,15796,15797],{"class":3021}," calculateZC",[39,15799,3034],{"class":45},[39,15801,15802],{"class":41,"line":443},[39,15803,3088],{"class":45},[39,15805,15806,15809,15812,15814,15817,15819],{"class":41,"line":449},[39,15807,15808],{"class":49},"        return",[39,15810,15811],{"class":56}," 2",[39,15813,1657],{"class":49},[39,15815,15816],{"class":45},"PI",[39,15818,1657],{"class":49},[39,15820,15821],{"class":45},"m_r;\n",[39,15823,15824],{"class":41,"line":455},[39,15825,3245],{"class":45},[39,15827,15828],{"class":41,"line":461},[39,15829,5053],{"class":45},[39,15831,15832,15834,15836],{"class":41,"line":475},[39,15833,1224],{"class":49},[39,15835,3031],{"class":3021},[39,15837,3034],{"class":45},[39,15839,15840],{"class":41,"line":665},[39,15841,2611],{"class":45},[39,15843,15844],{"class":41,"line":671},[39,15845,15846],{"class":102},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[39,15848,15849],{"class":41,"line":684},[39,15850,15851],{"class":102},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[39,15853,15854],{"class":41,"line":2732},[39,15855,15856],{"class":45},"    Circle c1;\n",[39,15858,15859],{"class":41,"line":2737},[39,15860,15861],{"class":102},"    \u002F\u002F给圆对象 的属性进行赋值\n",[39,15863,15864,15867,15869,15871],{"class":41,"line":2751},[39,15865,15866],{"class":45},"    c1.m_r",[39,15868,50],{"class":49},[39,15870,146],{"class":56},[39,15872,2359],{"class":45},[39,15874,15875,15877,15879,15882,15884,15887,15890,15892,15894],{"class":41,"line":2756},[39,15876,2616],{"class":45},[39,15878,2242],{"class":49},[39,15880,15881],{"class":1319},"\"圆的周长\"",[39,15883,2242],{"class":49},[39,15885,15886],{"class":45},"c1.",[39,15888,15889],{"class":3021},"calculateZC",[39,15891,3485],{"class":45},[39,15893,2242],{"class":49},[39,15895,2264],{"class":45},[39,15897,15898],{"class":41,"line":2785},[39,15899,2630],{"class":45},[19,15901,15902],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[29,15904,15906],{"className":1209,"code":15905,"language":1211,"meta":34,"style":34},"#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",[36,15907,15908,15914,15924,15930,15936,15940,15944,15949,15956,15961,15979,15983,15993,15997,16002,16018,16022,16032,16036,16041,16049,16053,16085,16089,16093,16101,16105,16110,16115,16129,16143,16152],{"__ignoreMap":34},[39,15909,15910,15912],{"class":41,"line":42},[39,15911,3007],{"class":49},[39,15913,3010],{"class":1319},[39,15915,15916,15918,15920,15922],{"class":41,"line":74},[39,15917,3015],{"class":49},[39,15919,3018],{"class":49},[39,15921,3022],{"class":3021},[39,15923,2359],{"class":45},[39,15925,15926,15928],{"class":41,"line":99},[39,15927,3007],{"class":49},[39,15929,8805],{"class":1319},[39,15931,15932,15934],{"class":41,"line":106},[39,15933,15750],{"class":49},[39,15935,8818],{"class":3021},[39,15937,15938],{"class":41,"line":112},[39,15939,2611],{"class":45},[39,15941,15942],{"class":41,"line":118},[39,15943,15772],{"class":49},[39,15945,15946],{"class":41,"line":413},[39,15947,15948],{"class":45},"    string m_name;\n",[39,15950,15951,15953],{"class":41,"line":419},[39,15952,3043],{"class":49},[39,15954,15955],{"class":45}," m_id;\n",[39,15957,15958],{"class":41,"line":425},[39,15959,15960],{"class":102},"    \u002F\u002F赋值姓名\n",[39,15962,15963,15966,15969,15971,15974,15977],{"class":41,"line":443},[39,15964,15965],{"class":49},"    void",[39,15967,15968],{"class":3021}," setName",[39,15970,1221],{"class":45},[39,15972,15973],{"class":3021},"string",[39,15975,15976],{"class":254}," name",[39,15978,209],{"class":45},[39,15980,15981],{"class":41,"line":449},[39,15982,3088],{"class":45},[39,15984,15985,15988,15990],{"class":41,"line":455},[39,15986,15987],{"class":45},"        m_name",[39,15989,50],{"class":49},[39,15991,15992],{"class":45},"name;\n",[39,15994,15995],{"class":41,"line":461},[39,15996,3245],{"class":45},[39,15998,15999],{"class":41,"line":475},[39,16000,16001],{"class":102},"    \u002F\u002F赋值学号\n",[39,16003,16004,16006,16009,16011,16013,16016],{"class":41,"line":665},[39,16005,15965],{"class":49},[39,16007,16008],{"class":3021}," setId",[39,16010,1221],{"class":45},[39,16012,1224],{"class":49},[39,16014,16015],{"class":254}," id",[39,16017,209],{"class":45},[39,16019,16020],{"class":41,"line":671},[39,16021,3088],{"class":45},[39,16023,16024,16027,16029],{"class":41,"line":684},[39,16025,16026],{"class":45},"        m_id",[39,16028,50],{"class":49},[39,16030,16031],{"class":45},"id;\n",[39,16033,16034],{"class":41,"line":2732},[39,16035,3245],{"class":45},[39,16037,16038],{"class":41,"line":2737},[39,16039,16040],{"class":102},"    \u002F\u002F打印学生信息\n",[39,16042,16043,16045,16047],{"class":41,"line":2751},[39,16044,15965],{"class":49},[39,16046,10671],{"class":3021},[39,16048,3034],{"class":45},[39,16050,16051],{"class":41,"line":2756},[39,16052,3088],{"class":45},[39,16054,16055,16057,16059,16062,16064,16067,16069,16071,16073,16076,16078,16081,16083],{"class":41,"line":2785},[39,16056,4509],{"class":45},[39,16058,2242],{"class":49},[39,16060,16061],{"class":1319},"\"姓名：\"",[39,16063,2242],{"class":49},[39,16065,16066],{"class":45},"m_name",[39,16068,2242],{"class":49},[39,16070,5417],{"class":1319},[39,16072,2242],{"class":49},[39,16074,16075],{"class":1319},"\"学号：\"",[39,16077,2242],{"class":49},[39,16079,16080],{"class":45},"m_id",[39,16082,2242],{"class":49},[39,16084,2264],{"class":45},[39,16086,16087],{"class":41,"line":2790},[39,16088,3245],{"class":45},[39,16090,16091],{"class":41,"line":2807},[39,16092,5053],{"class":45},[39,16094,16095,16097,16099],{"class":41,"line":2812},[39,16096,1224],{"class":49},[39,16098,3031],{"class":3021},[39,16100,3034],{"class":45},[39,16102,16103],{"class":41,"line":2817},[39,16104,2611],{"class":45},[39,16106,16107],{"class":41,"line":2822},[39,16108,16109],{"class":102},"    \u002F\u002F实例化\n",[39,16111,16112],{"class":41,"line":2836},[39,16113,16114],{"class":45},"    Student s1;\n",[39,16116,16117,16120,16123,16125,16127],{"class":41,"line":2841},[39,16118,16119],{"class":45},"    s1.",[39,16121,16122],{"class":3021},"setName",[39,16124,1221],{"class":45},[39,16126,8972],{"class":1319},[39,16128,3777],{"class":45},[39,16130,16131,16133,16136,16138,16141],{"class":41,"line":3635},[39,16132,16119],{"class":45},[39,16134,16135],{"class":3021},"setId",[39,16137,1221],{"class":45},[39,16139,16140],{"class":56},"123456",[39,16142,3777],{"class":45},[39,16144,16145,16147,16150],{"class":41,"line":3649},[39,16146,16119],{"class":45},[39,16148,16149],{"class":3021},"printInfo",[39,16151,6692],{"class":45},[39,16153,16154],{"class":41,"line":3657},[39,16155,2630],{"class":45},[19,16157,16158],{},"类中的属性和行为统称为成员",[19,16160,16161],{},"属性：成员属性(成员变量)",[19,16163,16164],{},"方法：成员函数(成员方法)",[19,16166,16167],{},[304,16168,16169],{},"封装意义二：",[19,16171,16172],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,16174,16175],{},"访问权限有三种：",[1171,16177,16178,16181,16184],{},[1174,16179,16180],{},"public        公共权限",[1174,16182,16183],{},"protected 保护权限",[1174,16185,16186],{},"private      私有权限",[19,16188,16189],{},[304,16190,16191],{},"示例：",[29,16193,16195],{"className":10997,"code":16194,"language":10999,"meta":34,"style":34},"\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",[36,16196,16197,16202,16207,16212,16217,16221,16228,16232,16237,16241,16246,16250,16255,16260,16265,16269,16274,16279,16286,16290,16294,16302,16306,16317,16329,16341,16345,16349,16353,16361,16365,16370,16382,16390,16398,16402,16412,16416,16424],{"__ignoreMap":34},[39,16198,16199],{"class":41,"line":42},[39,16200,16201],{"class":102},"\u002F\u002F三种权限\n",[39,16203,16204],{"class":41,"line":74},[39,16205,16206],{"class":102},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[39,16208,16209],{"class":41,"line":99},[39,16210,16211],{"class":102},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[39,16213,16214],{"class":41,"line":106},[39,16215,16216],{"class":102},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[39,16218,16219],{"class":41,"line":112},[39,16220,3458],{"emptyLinePlaceholder":1145},[39,16222,16223,16225],{"class":41,"line":118},[39,16224,15750],{"class":49},[39,16226,16227],{"class":3021}," Person\n",[39,16229,16230],{"class":41,"line":413},[39,16231,2611],{"class":45},[39,16233,16234],{"class":41,"line":419},[39,16235,16236],{"class":102},"    \u002F\u002F姓名  公共权限\n",[39,16238,16239],{"class":41,"line":425},[39,16240,15772],{"class":49},[39,16242,16243],{"class":41,"line":443},[39,16244,16245],{"class":45},"    string m_Name;\n",[39,16247,16248],{"class":41,"line":449},[39,16249,3458],{"emptyLinePlaceholder":1145},[39,16251,16252],{"class":41,"line":455},[39,16253,16254],{"class":102},"    \u002F\u002F汽车  保护权限\n",[39,16256,16257],{"class":41,"line":461},[39,16258,16259],{"class":49},"protected:\n",[39,16261,16262],{"class":41,"line":475},[39,16263,16264],{"class":45},"    string m_Car;\n",[39,16266,16267],{"class":41,"line":665},[39,16268,3458],{"emptyLinePlaceholder":1145},[39,16270,16271],{"class":41,"line":671},[39,16272,16273],{"class":102},"    \u002F\u002F银行卡密码  私有权限\n",[39,16275,16276],{"class":41,"line":684},[39,16277,16278],{"class":49},"private:\n",[39,16280,16281,16283],{"class":41,"line":2732},[39,16282,3043],{"class":49},[39,16284,16285],{"class":45}," m_Password;\n",[39,16287,16288],{"class":41,"line":2737},[39,16289,3458],{"emptyLinePlaceholder":1145},[39,16291,16292],{"class":41,"line":2751},[39,16293,15772],{"class":49},[39,16295,16296,16298,16300],{"class":41,"line":2756},[39,16297,15965],{"class":49},[39,16299,12441],{"class":3021},[39,16301,3034],{"class":45},[39,16303,16304],{"class":41,"line":2785},[39,16305,3088],{"class":45},[39,16307,16308,16311,16313,16315],{"class":41,"line":2790},[39,16309,16310],{"class":45},"        m_Name ",[39,16312,50],{"class":49},[39,16314,9994],{"class":1319},[39,16316,2359],{"class":45},[39,16318,16319,16322,16324,16327],{"class":41,"line":2807},[39,16320,16321],{"class":45},"        m_Car ",[39,16323,50],{"class":49},[39,16325,16326],{"class":1319}," \"拖拉机\"",[39,16328,2359],{"class":45},[39,16330,16331,16334,16336,16339],{"class":41,"line":2812},[39,16332,16333],{"class":45},"        m_Password ",[39,16335,50],{"class":49},[39,16337,16338],{"class":56}," 123456",[39,16340,2359],{"class":45},[39,16342,16343],{"class":41,"line":2817},[39,16344,3245],{"class":45},[39,16346,16347],{"class":41,"line":2822},[39,16348,5053],{"class":45},[39,16350,16351],{"class":41,"line":2836},[39,16352,3458],{"emptyLinePlaceholder":1145},[39,16354,16355,16357,16359],{"class":41,"line":2841},[39,16356,1224],{"class":49},[39,16358,3031],{"class":3021},[39,16360,11909],{"class":45},[39,16362,16363],{"class":41,"line":3635},[39,16364,3458],{"emptyLinePlaceholder":1145},[39,16366,16367],{"class":41,"line":3649},[39,16368,16369],{"class":45},"    Person p;\n",[39,16371,16372,16375,16377,16380],{"class":41,"line":3657},[39,16373,16374],{"class":45},"    p.m_Name ",[39,16376,50],{"class":49},[39,16378,16379],{"class":1319}," \"李四\"",[39,16381,2359],{"class":45},[39,16383,16384,16387],{"class":41,"line":3662},[39,16385,16386],{"class":102},"    \u002F\u002Fp.m_Car = \"奔驰\";",[39,16388,16389],{"class":102},"  \u002F\u002F保护权限类外访问不到\n",[39,16391,16392,16395],{"class":41,"line":3668},[39,16393,16394],{"class":102},"    \u002F\u002Fp.m_Password = 123;",[39,16396,16397],{"class":102}," \u002F\u002F私有权限类外访问不到\n",[39,16399,16400],{"class":41,"line":3674},[39,16401,3458],{"emptyLinePlaceholder":1145},[39,16403,16404,16406,16408,16410],{"class":41,"line":3679},[39,16405,3361],{"class":3021},[39,16407,1221],{"class":45},[39,16409,3366],{"class":1319},[39,16411,3777],{"class":45},[39,16413,16414],{"class":41,"line":9004},[39,16415,3458],{"emptyLinePlaceholder":1145},[39,16417,16418,16420,16422],{"class":41,"line":9028},[39,16419,5148],{"class":49},[39,16421,5151],{"class":56},[39,16423,2359],{"class":45},[39,16425,16426],{"class":41,"line":9033},[39,16427,2630],{"class":45},[1188,16429,16431],{"id":16430},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,16433,16434,16435,16438,16439],{},"在C++中 struct和class唯一的",[304,16436,16437],{},"区别","就在于 ",[304,16440,16441],{},"默认的访问权限不同",[19,16443,16444],{},"区别：",[2205,16446,16447,16450],{},[1174,16448,16449],{},"struct 默认权限为公共",[1174,16451,16452],{},"class   默认权限为私有",[29,16454,16456],{"className":10997,"code":16455,"language":10999,"meta":34,"style":34},"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",[36,16457,16458,16465,16469,16479,16483,16487,16494,16498,16508,16512,16516,16524,16528,16533,16547,16551,16556,16570,16574,16584,16588,16596],{"__ignoreMap":34},[39,16459,16460,16462],{"class":41,"line":42},[39,16461,15750],{"class":49},[39,16463,16464],{"class":3021}," C1\n",[39,16466,16467],{"class":41,"line":74},[39,16468,2611],{"class":45},[39,16470,16471,16473,16476],{"class":41,"line":99},[39,16472,3043],{"class":49},[39,16474,16475],{"class":45},"  m_A;",[39,16477,16478],{"class":102}," \u002F\u002F默认是私有权限\n",[39,16480,16481],{"class":41,"line":106},[39,16482,5053],{"class":45},[39,16484,16485],{"class":41,"line":112},[39,16486,3458],{"emptyLinePlaceholder":1145},[39,16488,16489,16491],{"class":41,"line":118},[39,16490,8815],{"class":49},[39,16492,16493],{"class":3021}," C2\n",[39,16495,16496],{"class":41,"line":413},[39,16497,2611],{"class":45},[39,16499,16500,16502,16505],{"class":41,"line":419},[39,16501,3043],{"class":49},[39,16503,16504],{"class":45}," m_A;",[39,16506,16507],{"class":102},"  \u002F\u002F默认是公共权限\n",[39,16509,16510],{"class":41,"line":425},[39,16511,5053],{"class":45},[39,16513,16514],{"class":41,"line":443},[39,16515,3458],{"emptyLinePlaceholder":1145},[39,16517,16518,16520,16522],{"class":41,"line":449},[39,16519,1224],{"class":49},[39,16521,3031],{"class":3021},[39,16523,11909],{"class":45},[39,16525,16526],{"class":41,"line":455},[39,16527,3458],{"emptyLinePlaceholder":1145},[39,16529,16530],{"class":41,"line":461},[39,16531,16532],{"class":45},"    C1 c1;\n",[39,16534,16535,16538,16540,16542,16544],{"class":41,"line":475},[39,16536,16537],{"class":45},"    c1.m_A ",[39,16539,50],{"class":49},[39,16541,3096],{"class":56},[39,16543,1273],{"class":45},[39,16545,16546],{"class":102}," \u002F\u002F错误，访问权限是私有\n",[39,16548,16549],{"class":41,"line":665},[39,16550,3458],{"emptyLinePlaceholder":1145},[39,16552,16553],{"class":41,"line":671},[39,16554,16555],{"class":45},"    C2 c2;\n",[39,16557,16558,16561,16563,16565,16567],{"class":41,"line":684},[39,16559,16560],{"class":45},"    c2.m_A ",[39,16562,50],{"class":49},[39,16564,3096],{"class":56},[39,16566,1273],{"class":45},[39,16568,16569],{"class":102}," \u002F\u002F正确，访问权限是公共\n",[39,16571,16572],{"class":41,"line":2732},[39,16573,3458],{"emptyLinePlaceholder":1145},[39,16575,16576,16578,16580,16582],{"class":41,"line":2737},[39,16577,3361],{"class":3021},[39,16579,1221],{"class":45},[39,16581,3366],{"class":1319},[39,16583,3777],{"class":45},[39,16585,16586],{"class":41,"line":2751},[39,16587,3458],{"emptyLinePlaceholder":1145},[39,16589,16590,16592,16594],{"class":41,"line":2756},[39,16591,5148],{"class":49},[39,16593,5151],{"class":56},[39,16595,2359],{"class":45},[39,16597,16598],{"class":41,"line":2785},[39,16599,2630],{"class":45},[1188,16601,16603],{"id":16602},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,16605,16606],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,16608,16609],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,16611,16612],{},[304,16613,16191],{},[29,16615,16617],{"className":10997,"code":16616,"language":10999,"meta":34,"style":34},"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",[36,16618,16619,16629,16633,16637,16642,16656,16665,16669,16679,16683,16690,16694,16698,16702,16707,16716,16723,16727,16732,16748,16771,16784,16791,16795,16804,16808,16812,16817,16833,16843,16847,16851,16855,16863,16867,16877,16881,16889,16893,16897,16905,16909,16913,16918,16931,16954,16958,16963,16976,16998,17002,17007,17021,17029,17033,17043,17047,17055],{"__ignoreMap":34},[39,16620,16621,16623,16626],{"class":41,"line":42},[39,16622,15750],{"class":49},[39,16624,16625],{"class":3021}," Person",[39,16627,16628],{"class":45}," {\n",[39,16630,16631],{"class":41,"line":74},[39,16632,15772],{"class":49},[39,16634,16635],{"class":41,"line":99},[39,16636,3458],{"emptyLinePlaceholder":1145},[39,16638,16639],{"class":41,"line":106},[39,16640,16641],{"class":102},"    \u002F\u002F姓名设置可读可写\n",[39,16643,16644,16646,16648,16650,16652,16654],{"class":41,"line":112},[39,16645,15965],{"class":49},[39,16647,15968],{"class":3021},[39,16649,1221],{"class":45},[39,16651,15973],{"class":3021},[39,16653,15976],{"class":254},[39,16655,13498],{"class":45},[39,16657,16658,16660,16662],{"class":41,"line":118},[39,16659,16310],{"class":45},[39,16661,50],{"class":49},[39,16663,16664],{"class":45}," name;\n",[39,16666,16667],{"class":41,"line":413},[39,16668,3245],{"class":45},[39,16670,16671,16674,16677],{"class":41,"line":419},[39,16672,16673],{"class":3021},"    string",[39,16675,16676],{"class":3021}," getName",[39,16678,3034],{"class":45},[39,16680,16681],{"class":41,"line":425},[39,16682,3088],{"class":45},[39,16684,16685,16687],{"class":41,"line":443},[39,16686,15808],{"class":49},[39,16688,16689],{"class":45}," m_Name;\n",[39,16691,16692],{"class":41,"line":449},[39,16693,3245],{"class":45},[39,16695,16696],{"class":41,"line":455},[39,16697,3458],{"emptyLinePlaceholder":1145},[39,16699,16700],{"class":41,"line":461},[39,16701,3458],{"emptyLinePlaceholder":1145},[39,16703,16704],{"class":41,"line":475},[39,16705,16706],{"class":102},"    \u002F\u002F获取年龄 \n",[39,16708,16709,16711,16714],{"class":41,"line":665},[39,16710,3043],{"class":49},[39,16712,16713],{"class":3021}," getAge",[39,16715,11909],{"class":45},[39,16717,16718,16720],{"class":41,"line":671},[39,16719,15808],{"class":49},[39,16721,16722],{"class":45}," m_Age;\n",[39,16724,16725],{"class":41,"line":684},[39,16726,3245],{"class":45},[39,16728,16729],{"class":41,"line":2732},[39,16730,16731],{"class":102},"    \u002F\u002F设置年龄\n",[39,16733,16734,16736,16739,16741,16743,16746],{"class":41,"line":2737},[39,16735,15965],{"class":49},[39,16737,16738],{"class":3021}," setAge",[39,16740,1221],{"class":45},[39,16742,1224],{"class":49},[39,16744,16745],{"class":254}," age",[39,16747,13498],{"class":45},[39,16749,16750,16752,16755,16757,16759,16761,16764,16766,16769],{"class":41,"line":2751},[39,16751,3555],{"class":49},[39,16753,16754],{"class":45}," (age ",[39,16756,2108],{"class":49},[39,16758,5151],{"class":56},[39,16760,4313],{"class":49},[39,16762,16763],{"class":45}," age ",[39,16765,2158],{"class":49},[39,16767,16768],{"class":56}," 150",[39,16770,13498],{"class":45},[39,16772,16773,16775,16777,16780,16782],{"class":41,"line":2756},[39,16774,10775],{"class":45},[39,16776,2242],{"class":49},[39,16778,16779],{"class":1319}," \"你个老妖精!\"",[39,16781,2510],{"class":49},[39,16783,9896],{"class":45},[39,16785,16786,16789],{"class":41,"line":2785},[39,16787,16788],{"class":49},"            return",[39,16790,2359],{"class":45},[39,16792,16793],{"class":41,"line":2790},[39,16794,3587],{"class":45},[39,16796,16797,16800,16802],{"class":41,"line":2807},[39,16798,16799],{"class":45},"        m_Age ",[39,16801,50],{"class":49},[39,16803,8853],{"class":45},[39,16805,16806],{"class":41,"line":2812},[39,16807,3245],{"class":45},[39,16809,16810],{"class":41,"line":2817},[39,16811,3458],{"emptyLinePlaceholder":1145},[39,16813,16814],{"class":41,"line":2822},[39,16815,16816],{"class":102},"    \u002F\u002F情人设置为只写\n",[39,16818,16819,16821,16824,16826,16828,16831],{"class":41,"line":2836},[39,16820,15965],{"class":49},[39,16822,16823],{"class":3021}," setLover",[39,16825,1221],{"class":45},[39,16827,15973],{"class":3021},[39,16829,16830],{"class":254}," lover",[39,16832,13498],{"class":45},[39,16834,16835,16838,16840],{"class":41,"line":2841},[39,16836,16837],{"class":45},"        m_Lover ",[39,16839,50],{"class":49},[39,16841,16842],{"class":45}," lover;\n",[39,16844,16845],{"class":41,"line":3635},[39,16846,3245],{"class":45},[39,16848,16849],{"class":41,"line":3649},[39,16850,3458],{"emptyLinePlaceholder":1145},[39,16852,16853],{"class":41,"line":3657},[39,16854,16278],{"class":49},[39,16856,16857,16860],{"class":41,"line":3662},[39,16858,16859],{"class":45},"    string m_Name;",[39,16861,16862],{"class":102}," \u002F\u002F可读可写  姓名\n",[39,16864,16865],{"class":41,"line":3668},[39,16866,14266],{"class":45},[39,16868,16869,16871,16874],{"class":41,"line":3674},[39,16870,3043],{"class":49},[39,16872,16873],{"class":45}," m_Age;",[39,16875,16876],{"class":102}," \u002F\u002F只读  年龄\n",[39,16878,16879],{"class":41,"line":3679},[39,16880,3458],{"emptyLinePlaceholder":1145},[39,16882,16883,16886],{"class":41,"line":9004},[39,16884,16885],{"class":45},"    string m_Lover;",[39,16887,16888],{"class":102}," \u002F\u002F只写  情人\n",[39,16890,16891],{"class":41,"line":9028},[39,16892,5053],{"class":45},[39,16894,16895],{"class":41,"line":9033},[39,16896,3458],{"emptyLinePlaceholder":1145},[39,16898,16899,16901,16903],{"class":41,"line":9039},[39,16900,1224],{"class":49},[39,16902,3031],{"class":3021},[39,16904,11909],{"class":45},[39,16906,16907],{"class":41,"line":9066},[39,16908,3458],{"emptyLinePlaceholder":1145},[39,16910,16911],{"class":41,"line":9071},[39,16912,16369],{"class":45},[39,16914,16915],{"class":41,"line":9077},[39,16916,16917],{"class":102},"    \u002F\u002F姓名设置\n",[39,16919,16920,16923,16925,16927,16929],{"class":41,"line":9089},[39,16921,16922],{"class":45},"    p.",[39,16924,16122],{"class":3021},[39,16926,1221],{"class":45},[39,16928,8972],{"class":1319},[39,16930,3777],{"class":45},[39,16932,16933,16935,16937,16940,16942,16945,16948,16950,16952],{"class":41,"line":9101},[39,16934,7585],{"class":45},[39,16936,2242],{"class":49},[39,16938,16939],{"class":1319}," \"姓名： \"",[39,16941,2510],{"class":49},[39,16943,16944],{"class":45}," p.",[39,16946,16947],{"class":3021},"getName",[39,16949,14106],{"class":45},[39,16951,2242],{"class":49},[39,16953,9896],{"class":45},[39,16955,16956],{"class":41,"line":9113},[39,16957,3458],{"emptyLinePlaceholder":1145},[39,16959,16960],{"class":41,"line":10772},[39,16961,16962],{"class":102},"    \u002F\u002F年龄设置\n",[39,16964,16965,16967,16970,16972,16974],{"class":41,"line":10797},[39,16966,16922],{"class":45},[39,16968,16969],{"class":3021},"setAge",[39,16971,1221],{"class":45},[39,16973,1855],{"class":56},[39,16975,3777],{"class":45},[39,16977,16978,16980,16982,16985,16987,16989,16992,16994,16996],{"class":41,"line":10820},[39,16979,7585],{"class":45},[39,16981,2242],{"class":49},[39,16983,16984],{"class":1319}," \"年龄： \"",[39,16986,2510],{"class":49},[39,16988,16944],{"class":45},[39,16990,16991],{"class":3021},"getAge",[39,16993,14106],{"class":45},[39,16995,2242],{"class":49},[39,16997,9896],{"class":45},[39,16999,17000],{"class":41,"line":10844},[39,17001,3458],{"emptyLinePlaceholder":1145},[39,17003,17004],{"class":41,"line":10849},[39,17005,17006],{"class":102},"    \u002F\u002F情人设置\n",[39,17008,17009,17011,17014,17016,17019],{"class":41,"line":10854},[39,17010,16922],{"class":45},[39,17012,17013],{"class":3021},"setLover",[39,17015,1221],{"class":45},[39,17017,17018],{"class":1319},"\"苍井\"",[39,17020,3777],{"class":45},[39,17022,17023,17026],{"class":41,"line":10859},[39,17024,17025],{"class":102},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[39,17027,17028],{"class":102},"  \u002F\u002F只写属性，不可以读取\n",[39,17030,17031],{"class":41,"line":10868},[39,17032,3458],{"emptyLinePlaceholder":1145},[39,17034,17035,17037,17039,17041],{"class":41,"line":10873},[39,17036,3361],{"class":3021},[39,17038,1221],{"class":45},[39,17040,3366],{"class":1319},[39,17042,3777],{"class":45},[39,17044,17045],{"class":41,"line":10879},[39,17046,3458],{"emptyLinePlaceholder":1145},[39,17048,17049,17051,17053],{"class":41,"line":10900},[39,17050,5148],{"class":49},[39,17052,5151],{"class":56},[39,17054,2359],{"class":45},[39,17056,17057],{"class":41,"line":10906},[39,17058,2630],{"class":45},[1188,17060,17062],{"id":17061},"_814封装案例","8.1.4封装案例",[1171,17064,17065],{},[1174,17066,17067,17070],{},[304,17068,17069],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[2205,17072,17073,17076],{},[1174,17074,17075],{},"求出立方体的面积和体积",[1174,17077,17078],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[29,17080,17082],{"className":1209,"code":17081,"language":1211,"meta":34,"style":34},"#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",[36,17083,17084,17090,17100,17107,17111,17115,17120,17150,17154,17164,17174,17184,17188,17197,17201,17237,17241,17250,17254,17270,17274,17279,17288,17292,17299,17303,17312,17316,17323,17327,17336,17340,17347,17351,17356,17373,17377,17423,17427,17436,17440,17444,17448,17457,17461,17465,17470,17474,17480,17486,17492,17496,17500,17505,17527,17531,17585,17589,17597,17601,17606,17611,17624,17631,17647,17658,17664,17687,17693,17716,17730,17750,17756,17767,17790,17812,17817,17823,17837,17850,17855,17869,17874,17880,17885,17899,17904,17909,17923,17935,17940,17953,17958,17963,17968,17981,17986],{"__ignoreMap":34},[39,17085,17086,17088],{"class":41,"line":42},[39,17087,3007],{"class":49},[39,17089,3010],{"class":1319},[39,17091,17092,17094,17096,17098],{"class":41,"line":74},[39,17093,3015],{"class":49},[39,17095,3018],{"class":49},[39,17097,3022],{"class":3021},[39,17099,2359],{"class":45},[39,17101,17102,17104],{"class":41,"line":99},[39,17103,15750],{"class":49},[39,17105,17106],{"class":3021}," Cube\n",[39,17108,17109],{"class":41,"line":106},[39,17110,2611],{"class":45},[39,17112,17113],{"class":41,"line":112},[39,17114,15772],{"class":49},[39,17116,17117],{"class":41,"line":118},[39,17118,17119],{"class":102},"    \u002F\u002F输入长宽高\n",[39,17121,17122,17124,17127,17129,17131,17134,17136,17138,17141,17143,17145,17148],{"class":41,"line":413},[39,17123,15965],{"class":49},[39,17125,17126],{"class":3021}," setLwh",[39,17128,1221],{"class":45},[39,17130,1224],{"class":49},[39,17132,17133],{"class":254}," l",[39,17135,60],{"class":45},[39,17137,1224],{"class":49},[39,17139,17140],{"class":254}," w",[39,17142,60],{"class":45},[39,17144,1224],{"class":49},[39,17146,17147],{"class":254}," h",[39,17149,209],{"class":45},[39,17151,17152],{"class":41,"line":419},[39,17153,3088],{"class":45},[39,17155,17156,17159,17161],{"class":41,"line":425},[39,17157,17158],{"class":45},"        m_L",[39,17160,50],{"class":49},[39,17162,17163],{"class":45},"l;\n",[39,17165,17166,17169,17171],{"class":41,"line":443},[39,17167,17168],{"class":45},"        m_W",[39,17170,50],{"class":49},[39,17172,17173],{"class":45},"w;\n",[39,17175,17176,17179,17181],{"class":41,"line":449},[39,17177,17178],{"class":45},"        m_H",[39,17180,50],{"class":49},[39,17182,17183],{"class":45},"h;\n",[39,17185,17186],{"class":41,"line":455},[39,17187,3245],{"class":45},[39,17189,17190,17192,17195],{"class":41,"line":461},[39,17191,3043],{"class":49},[39,17193,17194],{"class":3021}," mianji",[39,17196,3034],{"class":45},[39,17198,17199],{"class":41,"line":475},[39,17200,3088],{"class":45},[39,17202,17203,17205,17207,17209,17212,17214,17217,17219,17222,17224,17227,17229,17232,17234],{"class":41,"line":665},[39,17204,15808],{"class":49},[39,17206,15811],{"class":56},[39,17208,1657],{"class":49},[39,17210,17211],{"class":45},"(m_L",[39,17213,1657],{"class":49},[39,17215,17216],{"class":45},"m_W ",[39,17218,1682],{"class":49},[39,17220,17221],{"class":45}," m_L",[39,17223,1657],{"class":49},[39,17225,17226],{"class":45},"m_H ",[39,17228,1682],{"class":49},[39,17230,17231],{"class":45}," m_W",[39,17233,1657],{"class":49},[39,17235,17236],{"class":45},"m_H);\n",[39,17238,17239],{"class":41,"line":671},[39,17240,3245],{"class":45},[39,17242,17243,17245,17248],{"class":41,"line":684},[39,17244,3043],{"class":49},[39,17246,17247],{"class":3021}," tiji",[39,17249,3034],{"class":45},[39,17251,17252],{"class":41,"line":2732},[39,17253,3088],{"class":45},[39,17255,17256,17258,17260,17262,17265,17267],{"class":41,"line":2737},[39,17257,15808],{"class":49},[39,17259,17221],{"class":45},[39,17261,1657],{"class":49},[39,17263,17264],{"class":45},"m_W",[39,17266,1657],{"class":49},[39,17268,17269],{"class":45},"m_H;\n",[39,17271,17272],{"class":41,"line":2751},[39,17273,3245],{"class":45},[39,17275,17276],{"class":41,"line":2756},[39,17277,17278],{"class":102},"    \u002F\u002F获取长宽高\n",[39,17280,17281,17283,17286],{"class":41,"line":2785},[39,17282,3043],{"class":49},[39,17284,17285],{"class":3021}," getLength",[39,17287,3034],{"class":45},[39,17289,17290],{"class":41,"line":2790},[39,17291,3088],{"class":45},[39,17293,17294,17296],{"class":41,"line":2807},[39,17295,15808],{"class":49},[39,17297,17298],{"class":45}," m_L;\n",[39,17300,17301],{"class":41,"line":2812},[39,17302,3245],{"class":45},[39,17304,17305,17307,17310],{"class":41,"line":2817},[39,17306,3043],{"class":49},[39,17308,17309],{"class":3021}," getWidth",[39,17311,3034],{"class":45},[39,17313,17314],{"class":41,"line":2822},[39,17315,3088],{"class":45},[39,17317,17318,17320],{"class":41,"line":2836},[39,17319,15808],{"class":49},[39,17321,17322],{"class":45}," m_W;\n",[39,17324,17325],{"class":41,"line":2841},[39,17326,3245],{"class":45},[39,17328,17329,17331,17334],{"class":41,"line":3635},[39,17330,3043],{"class":49},[39,17332,17333],{"class":3021}," getHeight",[39,17335,3034],{"class":45},[39,17337,17338],{"class":41,"line":3649},[39,17339,3088],{"class":45},[39,17341,17342,17344],{"class":41,"line":3657},[39,17343,15808],{"class":49},[39,17345,17346],{"class":45}," m_H;\n",[39,17348,17349],{"class":41,"line":3662},[39,17350,3245],{"class":45},[39,17352,17353],{"class":41,"line":3668},[39,17354,17355],{"class":102},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[39,17357,17358,17361,17364,17366,17369,17371],{"class":41,"line":3674},[39,17359,17360],{"class":49},"    bool",[39,17362,17363],{"class":3021}," isEqual",[39,17365,1221],{"class":45},[39,17367,17368],{"class":3021},"Cube",[39,17370,3907],{"class":254},[39,17372,209],{"class":45},[39,17374,17375],{"class":41,"line":3679},[39,17376,3088],{"class":45},[39,17378,17379,17381,17384,17387,17389,17391,17394,17396,17399,17402,17404,17406,17409,17411,17413,17416,17418,17420],{"class":41,"line":9004},[39,17380,3555],{"class":49},[39,17382,17383],{"class":45}," (c.",[39,17385,17386],{"class":3021},"getLength",[39,17388,14106],{"class":45},[39,17390,4007],{"class":49},[39,17392,17393],{"class":45}," m_L ",[39,17395,2773],{"class":49},[39,17397,17398],{"class":45}," c.",[39,17400,17401],{"class":3021},"getWidth",[39,17403,14106],{"class":45},[39,17405,4007],{"class":49},[39,17407,17408],{"class":45}," m_W ",[39,17410,2773],{"class":49},[39,17412,17398],{"class":45},[39,17414,17415],{"class":3021},"getHeight",[39,17417,14106],{"class":45},[39,17419,4007],{"class":49},[39,17421,17422],{"class":45}," m_H)\n",[39,17424,17425],{"class":41,"line":9028},[39,17426,3568],{"class":45},[39,17428,17429,17431,17434],{"class":41,"line":9033},[39,17430,16788],{"class":49},[39,17432,17433],{"class":56}," true",[39,17435,2359],{"class":45},[39,17437,17438],{"class":41,"line":9039},[39,17439,3587],{"class":45},[39,17441,17442],{"class":41,"line":9066},[39,17443,3628],{"class":49},[39,17445,17446],{"class":41,"line":9071},[39,17447,3568],{"class":45},[39,17449,17450,17452,17455],{"class":41,"line":9077},[39,17451,16788],{"class":49},[39,17453,17454],{"class":56}," false",[39,17456,2359],{"class":45},[39,17458,17459],{"class":41,"line":9089},[39,17460,3587],{"class":45},[39,17462,17463],{"class":41,"line":9101},[39,17464,3245],{"class":45},[39,17466,17467],{"class":41,"line":9113},[39,17468,17469],{"class":102},"    \u002F\u002F私有属性\n",[39,17471,17472],{"class":41,"line":10772},[39,17473,16278],{"class":49},[39,17475,17476,17478],{"class":41,"line":10797},[39,17477,3043],{"class":49},[39,17479,17298],{"class":45},[39,17481,17482,17484],{"class":41,"line":10820},[39,17483,3043],{"class":49},[39,17485,17322],{"class":45},[39,17487,17488,17490],{"class":41,"line":10844},[39,17489,3043],{"class":49},[39,17491,17346],{"class":45},[39,17493,17494],{"class":41,"line":10849},[39,17495,3458],{"emptyLinePlaceholder":1145},[39,17497,17498],{"class":41,"line":10854},[39,17499,5053],{"class":45},[39,17501,17502],{"class":41,"line":10859},[39,17503,17504],{"class":102},"\u002F\u002F全局函数判断两个立方体是否相等\n",[39,17506,17507,17509,17511,17513,17515,17518,17520,17522,17525],{"class":41,"line":10868},[39,17508,2420],{"class":49},[39,17510,17363],{"class":3021},[39,17512,1221],{"class":45},[39,17514,17368],{"class":3021},[39,17516,17517],{"class":254}," c1",[39,17519,60],{"class":45},[39,17521,17368],{"class":3021},[39,17523,17524],{"class":254}," c2",[39,17526,209],{"class":45},[39,17528,17529],{"class":41,"line":10873},[39,17530,2611],{"class":45},[39,17532,17533,17535,17538,17540,17542,17544,17547,17549,17552,17554,17556,17558,17560,17562,17564,17566,17568,17570,17572,17574,17576,17578,17580,17582],{"class":41,"line":10879},[39,17534,5148],{"class":49},[39,17536,17537],{"class":45}," (c1.",[39,17539,17386],{"class":3021},[39,17541,14106],{"class":45},[39,17543,4007],{"class":49},[39,17545,17546],{"class":45}," c2.",[39,17548,17386],{"class":3021},[39,17550,17551],{"class":45},"()) ",[39,17553,2773],{"class":49},[39,17555,17537],{"class":45},[39,17557,17401],{"class":3021},[39,17559,14106],{"class":45},[39,17561,4007],{"class":49},[39,17563,17546],{"class":45},[39,17565,17401],{"class":3021},[39,17567,17551],{"class":45},[39,17569,2773],{"class":49},[39,17571,17537],{"class":45},[39,17573,17415],{"class":3021},[39,17575,14106],{"class":45},[39,17577,4007],{"class":49},[39,17579,17546],{"class":45},[39,17581,17415],{"class":3021},[39,17583,17584],{"class":45},"());\n",[39,17586,17587],{"class":41,"line":10900},[39,17588,2630],{"class":45},[39,17590,17591,17593,17595],{"class":41,"line":10906},[39,17592,1224],{"class":49},[39,17594,3031],{"class":3021},[39,17596,3034],{"class":45},[39,17598,17599],{"class":41,"line":10920},[39,17600,2611],{"class":45},[39,17602,17603],{"class":41,"line":10926},[39,17604,17605],{"class":45},"    Cube c1;\n",[39,17607,17608],{"class":41,"line":10953},[39,17609,17610],{"class":102},"    \u002F\u002F输入立方体的长宽高\n",[39,17612,17613,17615,17617,17620,17622],{"class":41,"line":10962},[39,17614,2616],{"class":45},[39,17616,2242],{"class":49},[39,17618,17619],{"class":1319},"\"请输入第一个立方体的长、宽、高：\"",[39,17621,2242],{"class":49},[39,17623,2264],{"class":45},[39,17625,17626,17628],{"class":41,"line":10968},[39,17627,3043],{"class":49},[39,17629,17630],{"class":45}," l,w,h,l1,w1,h1;\n",[39,17632,17633,17635,17637,17639,17641,17643,17645],{"class":41,"line":10976},[39,17634,3070],{"class":45},[39,17636,2495],{"class":49},[39,17638,1719],{"class":45},[39,17640,2495],{"class":49},[39,17642,1993],{"class":45},[39,17644,2495],{"class":49},[39,17646,17183],{"class":45},[39,17648,17649,17652,17655],{"class":41,"line":10981},[39,17650,17651],{"class":45},"    c1.",[39,17653,17654],{"class":3021},"setLwh",[39,17656,17657],{"class":45},"(l,w,h);\n",[39,17659,17661],{"class":41,"line":17660},66,[39,17662,17663],{"class":102},"    \u002F\u002F面积\n",[39,17665,17667,17669,17671,17674,17676,17678,17681,17683,17685],{"class":41,"line":17666},67,[39,17668,2616],{"class":45},[39,17670,2242],{"class":49},[39,17672,17673],{"class":1319},"\"立方体的表面积为：\"",[39,17675,2242],{"class":49},[39,17677,15886],{"class":45},[39,17679,17680],{"class":3021},"mianji",[39,17682,3485],{"class":45},[39,17684,2242],{"class":49},[39,17686,2264],{"class":45},[39,17688,17690],{"class":41,"line":17689},68,[39,17691,17692],{"class":102},"    \u002F\u002F体积\n",[39,17694,17696,17698,17700,17703,17705,17707,17710,17712,17714],{"class":41,"line":17695},69,[39,17697,2616],{"class":45},[39,17699,2242],{"class":49},[39,17701,17702],{"class":1319},"\"立方体的体积为：\"",[39,17704,2242],{"class":49},[39,17706,15886],{"class":45},[39,17708,17709],{"class":3021},"tiji",[39,17711,3485],{"class":45},[39,17713,2242],{"class":49},[39,17715,2264],{"class":45},[39,17717,17719,17721,17723,17726,17728],{"class":41,"line":17718},70,[39,17720,2616],{"class":45},[39,17722,2242],{"class":49},[39,17724,17725],{"class":1319},"\"请输入第二个立方体的长、宽、高：\"",[39,17727,2242],{"class":49},[39,17729,2264],{"class":45},[39,17731,17733,17735,17737,17740,17742,17745,17747],{"class":41,"line":17732},71,[39,17734,3070],{"class":45},[39,17736,2495],{"class":49},[39,17738,17739],{"class":45},"l1",[39,17741,2495],{"class":49},[39,17743,17744],{"class":45},"w1",[39,17746,2495],{"class":49},[39,17748,17749],{"class":45},"h1;\n",[39,17751,17753],{"class":41,"line":17752},72,[39,17754,17755],{"class":45},"    Cube c2;\n",[39,17757,17759,17762,17764],{"class":41,"line":17758},73,[39,17760,17761],{"class":45},"    c2.",[39,17763,17654],{"class":3021},[39,17765,17766],{"class":45},"(l1,w1,h1);\n",[39,17768,17770,17772,17774,17777,17779,17782,17784,17786,17788],{"class":41,"line":17769},74,[39,17771,2616],{"class":45},[39,17773,2242],{"class":49},[39,17775,17776],{"class":1319},"\"第二个立方体的表面积为：\"",[39,17778,2242],{"class":49},[39,17780,17781],{"class":45},"c2.",[39,17783,17680],{"class":3021},[39,17785,3485],{"class":45},[39,17787,2242],{"class":49},[39,17789,2264],{"class":45},[39,17791,17793,17795,17797,17800,17802,17804,17806,17808,17810],{"class":41,"line":17792},75,[39,17794,2616],{"class":45},[39,17796,2242],{"class":49},[39,17798,17799],{"class":1319},"\"第二个立方体的体积为：\"",[39,17801,2242],{"class":49},[39,17803,17781],{"class":45},[39,17805,17709],{"class":3021},[39,17807,3485],{"class":45},[39,17809,2242],{"class":49},[39,17811,2264],{"class":45},[39,17813,17815],{"class":41,"line":17814},76,[39,17816,3458],{"emptyLinePlaceholder":1145},[39,17818,17820],{"class":41,"line":17819},77,[39,17821,17822],{"class":102},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[39,17824,17826,17828,17830,17833,17835],{"class":41,"line":17825},78,[39,17827,2616],{"class":45},[39,17829,2242],{"class":49},[39,17831,17832],{"class":1319},"\"内部函数判断结果：\"",[39,17834,2242],{"class":49},[39,17836,2264],{"class":45},[39,17838,17840,17842,17844,17847],{"class":41,"line":17839},79,[39,17841,4159],{"class":49},[39,17843,17537],{"class":45},[39,17845,17846],{"class":3021},"isEqual",[39,17848,17849],{"class":45},"(c2))\n",[39,17851,17853],{"class":41,"line":17852},80,[39,17854,3088],{"class":45},[39,17856,17858,17860,17862,17865,17867],{"class":41,"line":17857},81,[39,17859,4509],{"class":45},[39,17861,2242],{"class":49},[39,17863,17864],{"class":1319},"\"两个立方体相等\"",[39,17866,2242],{"class":49},[39,17868,2264],{"class":45},[39,17870,17872],{"class":41,"line":17871},82,[39,17873,3245],{"class":45},[39,17875,17877],{"class":41,"line":17876},83,[39,17878,17879],{"class":49},"    else\n",[39,17881,17883],{"class":41,"line":17882},84,[39,17884,3088],{"class":45},[39,17886,17888,17890,17892,17895,17897],{"class":41,"line":17887},85,[39,17889,4509],{"class":45},[39,17891,2242],{"class":49},[39,17893,17894],{"class":1319},"\"两个立方体不相等\"",[39,17896,2242],{"class":49},[39,17898,2264],{"class":45},[39,17900,17902],{"class":41,"line":17901},86,[39,17903,3245],{"class":45},[39,17905,17907],{"class":41,"line":17906},87,[39,17908,3458],{"emptyLinePlaceholder":1145},[39,17910,17912,17914,17916,17919,17921],{"class":41,"line":17911},88,[39,17913,2616],{"class":45},[39,17915,2242],{"class":49},[39,17917,17918],{"class":1319},"\"全局函数判断结果：\"",[39,17920,2242],{"class":49},[39,17922,2264],{"class":45},[39,17924,17926,17928,17930,17932],{"class":41,"line":17925},89,[39,17927,4159],{"class":49},[39,17929,2716],{"class":45},[39,17931,17846],{"class":3021},[39,17933,17934],{"class":45},"(c1, c2))\n",[39,17936,17938],{"class":41,"line":17937},90,[39,17939,3088],{"class":45},[39,17941,17943,17945,17947,17949,17951],{"class":41,"line":17942},91,[39,17944,4509],{"class":45},[39,17946,2242],{"class":49},[39,17948,17864],{"class":1319},[39,17950,2242],{"class":49},[39,17952,2264],{"class":45},[39,17954,17956],{"class":41,"line":17955},92,[39,17957,3245],{"class":45},[39,17959,17961],{"class":41,"line":17960},93,[39,17962,17879],{"class":49},[39,17964,17966],{"class":41,"line":17965},94,[39,17967,3088],{"class":45},[39,17969,17971,17973,17975,17977,17979],{"class":41,"line":17970},95,[39,17972,4509],{"class":45},[39,17974,2242],{"class":49},[39,17976,17894],{"class":1319},[39,17978,2242],{"class":49},[39,17980,2264],{"class":45},[39,17982,17984],{"class":41,"line":17983},96,[39,17985,3245],{"class":45},[39,17987,17989],{"class":41,"line":17988},97,[39,17990,2630],{"class":45},[1171,17992,17993],{"start":74},[1174,17994,17995],{},[304,17996,17997],{},"练习案例2：点和圆的关系",[2205,17999,18000],{},[1174,18001,18002],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[29,18004,18006],{"className":1209,"code":18005,"language":1211,"meta":34,"style":34},"#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",[36,18007,18008,18014,18024,18031,18038,18042,18046,18051,18085,18090,18106,18120,18124,18128,18135,18142,18146,18152,18156,18160,18164,18186,18209,18214,18228,18243,18247,18251,18257,18262,18267,18271,18297,18301,18331,18359,18387,18404,18408,18421,18425,18429,18433,18446,18450,18454,18462,18466,18470,18474,18479,18483,18494,18501,18510,18520,18531,18538,18551,18562,18572,18583,18590,18604,18609,18619,18627],{"__ignoreMap":34},[39,18009,18010,18012],{"class":41,"line":42},[39,18011,3007],{"class":49},[39,18013,3010],{"class":1319},[39,18015,18016,18018,18020,18022],{"class":41,"line":74},[39,18017,3015],{"class":49},[39,18019,3018],{"class":49},[39,18021,3022],{"class":3021},[39,18023,2359],{"class":45},[39,18025,18026,18028],{"class":41,"line":99},[39,18027,3007],{"class":49},[39,18029,18030],{"class":1319},"\u003Ccmath>\n",[39,18032,18033,18035],{"class":41,"line":106},[39,18034,15750],{"class":49},[39,18036,18037],{"class":3021}," Point\n",[39,18039,18040],{"class":41,"line":112},[39,18041,2611],{"class":45},[39,18043,18044],{"class":41,"line":118},[39,18045,15772],{"class":49},[39,18047,18048],{"class":41,"line":413},[39,18049,18050],{"class":102},"    \u002F\u002F赋值\n",[39,18052,18053,18055,18058,18060,18062,18065,18067,18069,18072,18075,18077,18080,18082],{"class":41,"line":419},[39,18054,15965],{"class":49},[39,18056,18057],{"class":3021}," setPoint",[39,18059,1221],{"class":45},[39,18061,15093],{"class":49},[39,18063,18064],{"class":254}," x",[39,18066,13491],{"class":45},[39,18068,15093],{"class":49},[39,18070,18071],{"class":254}," y",[39,18073,18074],{"class":45},") { m_x ",[39,18076,50],{"class":49},[39,18078,18079],{"class":45}," x; m_y ",[39,18081,50],{"class":49},[39,18083,18084],{"class":45}," y; }\n",[39,18086,18087],{"class":41,"line":425},[39,18088,18089],{"class":102},"    \u002F\u002F获取坐标\n",[39,18091,18092,18094,18097,18100,18103],{"class":41,"line":443},[39,18093,15794],{"class":49},[39,18095,18096],{"class":3021}," getX",[39,18098,18099],{"class":45},"() { ",[39,18101,18102],{"class":49},"return",[39,18104,18105],{"class":45}," m_x; }\n",[39,18107,18108,18110,18113,18115,18117],{"class":41,"line":449},[39,18109,15794],{"class":49},[39,18111,18112],{"class":3021}," getY",[39,18114,18099],{"class":45},[39,18116,18102],{"class":49},[39,18118,18119],{"class":45}," m_y; }\n",[39,18121,18122],{"class":41,"line":455},[39,18123,3458],{"emptyLinePlaceholder":1145},[39,18125,18126],{"class":41,"line":461},[39,18127,16278],{"class":49},[39,18129,18130,18132],{"class":41,"line":475},[39,18131,15794],{"class":49},[39,18133,18134],{"class":45}," m_x;\n",[39,18136,18137,18139],{"class":41,"line":665},[39,18138,15794],{"class":49},[39,18140,18141],{"class":45}," m_y;\n",[39,18143,18144],{"class":41,"line":671},[39,18145,5053],{"class":45},[39,18147,18148,18150],{"class":41,"line":684},[39,18149,15750],{"class":49},[39,18151,15753],{"class":3021},[39,18153,18154],{"class":41,"line":2732},[39,18155,2611],{"class":45},[39,18157,18158],{"class":41,"line":2737},[39,18159,15772],{"class":49},[39,18161,18162],{"class":41,"line":2751},[39,18163,18050],{"class":102},[39,18165,18166,18168,18171,18173,18175,18178,18181,18183],{"class":41,"line":2756},[39,18167,15965],{"class":49},[39,18169,18170],{"class":3021}," setRadius",[39,18172,1221],{"class":45},[39,18174,15093],{"class":49},[39,18176,18177],{"class":254}," r",[39,18179,18180],{"class":45},") { m_r ",[39,18182,50],{"class":49},[39,18184,18185],{"class":45}," r; }\n",[39,18187,18188,18190,18193,18195,18198,18201,18204,18206],{"class":41,"line":2785},[39,18189,15965],{"class":49},[39,18191,18192],{"class":3021}," setCenter",[39,18194,1221],{"class":45},[39,18196,18197],{"class":3021},"Point",[39,18199,18200],{"class":254}," center",[39,18202,18203],{"class":45},") { m_center ",[39,18205,50],{"class":49},[39,18207,18208],{"class":45}," center; }\n",[39,18210,18211],{"class":41,"line":2790},[39,18212,18213],{"class":102},"    \u002F\u002F获取属性\n",[39,18215,18216,18218,18221,18223,18225],{"class":41,"line":2807},[39,18217,15794],{"class":49},[39,18219,18220],{"class":3021}," getRadius",[39,18222,18099],{"class":45},[39,18224,18102],{"class":49},[39,18226,18227],{"class":45}," m_r; }\n",[39,18229,18230,18233,18236,18238,18240],{"class":41,"line":2812},[39,18231,18232],{"class":3021},"    Point",[39,18234,18235],{"class":3021}," getCenter",[39,18237,18099],{"class":45},[39,18239,18102],{"class":49},[39,18241,18242],{"class":45}," m_center; }\n",[39,18244,18245],{"class":41,"line":2817},[39,18246,3458],{"emptyLinePlaceholder":1145},[39,18248,18249],{"class":41,"line":2822},[39,18250,16278],{"class":49},[39,18252,18253,18255],{"class":41,"line":2836},[39,18254,15794],{"class":49},[39,18256,15784],{"class":45},[39,18258,18259],{"class":41,"line":2841},[39,18260,18261],{"class":102},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[39,18263,18264],{"class":41,"line":3635},[39,18265,18266],{"class":45},"    Point m_center;\n",[39,18268,18269],{"class":41,"line":3649},[39,18270,5053],{"class":45},[39,18272,18273,18275,18278,18280,18283,18285,18287,18289,18291,18293,18295],{"class":41,"line":3657},[39,18274,6420],{"class":49},[39,18276,18277],{"class":3021}," isInCircle",[39,18279,1221],{"class":45},[39,18281,18282],{"class":3021},"Circle",[39,18284,11640],{"class":49},[39,18286,139],{"class":254},[39,18288,60],{"class":45},[39,18290,18197],{"class":3021},[39,18292,11640],{"class":49},[39,18294,19],{"class":254},[39,18296,209],{"class":45},[39,18298,18299],{"class":41,"line":3662},[39,18300,2611],{"class":45},[39,18302,18303,18305,18308,18310,18312,18315,18318,18321,18323,18325,18327,18329],{"class":41,"line":3668},[39,18304,15794],{"class":49},[39,18306,18307],{"class":45}," dx ",[39,18309,50],{"class":49},[39,18311,17398],{"class":45},[39,18313,18314],{"class":3021},"getCenter",[39,18316,18317],{"class":45},"().",[39,18319,18320],{"class":3021},"getX",[39,18322,14106],{"class":45},[39,18324,1732],{"class":49},[39,18326,16944],{"class":45},[39,18328,18320],{"class":3021},[39,18330,6692],{"class":45},[39,18332,18333,18335,18338,18340,18342,18344,18346,18349,18351,18353,18355,18357],{"class":41,"line":3674},[39,18334,15794],{"class":49},[39,18336,18337],{"class":45}," dy ",[39,18339,50],{"class":49},[39,18341,17398],{"class":45},[39,18343,18314],{"class":3021},[39,18345,18317],{"class":45},[39,18347,18348],{"class":3021},"getY",[39,18350,14106],{"class":45},[39,18352,1732],{"class":49},[39,18354,16944],{"class":45},[39,18356,18348],{"class":3021},[39,18358,6692],{"class":45},[39,18360,18361,18363,18366,18368,18371,18374,18376,18378,18380,18382,18384],{"class":41,"line":3679},[39,18362,15794],{"class":49},[39,18364,18365],{"class":45}," distance ",[39,18367,50],{"class":49},[39,18369,18370],{"class":3021}," sqrt",[39,18372,18373],{"class":45},"(dx ",[39,18375,1657],{"class":49},[39,18377,18307],{"class":45},[39,18379,1682],{"class":49},[39,18381,18337],{"class":45},[39,18383,1657],{"class":49},[39,18385,18386],{"class":45}," dy);\n",[39,18388,18389,18391,18394,18396,18398,18401],{"class":41,"line":9004},[39,18390,4159],{"class":49},[39,18392,18393],{"class":45}," (distance ",[39,18395,2108],{"class":49},[39,18397,17398],{"class":45},[39,18399,18400],{"class":3021},"getRadius",[39,18402,18403],{"class":45},"())\n",[39,18405,18406],{"class":41,"line":9028},[39,18407,3088],{"class":45},[39,18409,18410,18412,18414,18417,18419],{"class":41,"line":9033},[39,18411,10725],{"class":45},[39,18413,2242],{"class":49},[39,18415,18416],{"class":1319}," \"点在圆内\"",[39,18418,2510],{"class":49},[39,18420,9896],{"class":45},[39,18422,18423],{"class":41,"line":9039},[39,18424,3245],{"class":45},[39,18426,18427],{"class":41,"line":9066},[39,18428,17879],{"class":49},[39,18430,18431],{"class":41,"line":9071},[39,18432,3088],{"class":45},[39,18434,18435,18437,18439,18442,18444],{"class":41,"line":9077},[39,18436,10725],{"class":45},[39,18438,2242],{"class":49},[39,18440,18441],{"class":1319}," \"点在圆外\"",[39,18443,2510],{"class":49},[39,18445,9896],{"class":45},[39,18447,18448],{"class":41,"line":9089},[39,18449,3245],{"class":45},[39,18451,18452],{"class":41,"line":9101},[39,18453,2630],{"class":45},[39,18455,18456,18458,18460],{"class":41,"line":9113},[39,18457,1224],{"class":49},[39,18459,3031],{"class":3021},[39,18461,3034],{"class":45},[39,18463,18464],{"class":41,"line":10772},[39,18465,2611],{"class":45},[39,18467,18468],{"class":41,"line":10797},[39,18469,16109],{"class":102},[39,18471,18472],{"class":41,"line":10820},[39,18473,15856],{"class":45},[39,18475,18476],{"class":41,"line":10844},[39,18477,18478],{"class":45},"    Point p1;\n",[39,18480,18481],{"class":41,"line":10849},[39,18482,18050],{"class":102},[39,18484,18485,18487,18489,18492],{"class":41,"line":10854},[39,18486,2616],{"class":45},[39,18488,2242],{"class":49},[39,18490,18491],{"class":1319},"\"请输入圆的半径：\"",[39,18493,2359],{"class":45},[39,18495,18496,18498],{"class":41,"line":10859},[39,18497,15794],{"class":49},[39,18499,18500],{"class":45}," r;\n",[39,18502,18503,18505,18507],{"class":41,"line":10868},[39,18504,3070],{"class":45},[39,18506,2495],{"class":49},[39,18508,18509],{"class":45},"r;\n",[39,18511,18512,18514,18517],{"class":41,"line":10873},[39,18513,17651],{"class":45},[39,18515,18516],{"class":3021},"setRadius",[39,18518,18519],{"class":45},"(r);\n",[39,18521,18522,18524,18526,18529],{"class":41,"line":10879},[39,18523,2616],{"class":45},[39,18525,2242],{"class":49},[39,18527,18528],{"class":1319},"\"请输入圆心坐标：\"",[39,18530,2359],{"class":45},[39,18532,18533,18535],{"class":41,"line":10900},[39,18534,15794],{"class":49},[39,18536,18537],{"class":45}," x, y;\n",[39,18539,18540,18542,18544,18546,18548],{"class":41,"line":10906},[39,18541,3070],{"class":45},[39,18543,2495],{"class":49},[39,18545,2018],{"class":45},[39,18547,2495],{"class":49},[39,18549,18550],{"class":45},"y;\n",[39,18552,18553,18556,18559],{"class":41,"line":10920},[39,18554,18555],{"class":45},"    p1.",[39,18557,18558],{"class":3021},"setPoint",[39,18560,18561],{"class":45},"(x, y);\n",[39,18563,18564,18566,18569],{"class":41,"line":10926},[39,18565,17651],{"class":45},[39,18567,18568],{"class":3021},"setCenter",[39,18570,18571],{"class":45},"(p1);\n",[39,18573,18574,18576,18578,18581],{"class":41,"line":10953},[39,18575,2616],{"class":45},[39,18577,2242],{"class":49},[39,18579,18580],{"class":1319},"\"请输入测试点坐标：\"",[39,18582,2359],{"class":45},[39,18584,18585,18587],{"class":41,"line":10962},[39,18586,15794],{"class":49},[39,18588,18589],{"class":45}," x1, y1;\n",[39,18591,18592,18594,18596,18599,18601],{"class":41,"line":10968},[39,18593,3070],{"class":45},[39,18595,2495],{"class":49},[39,18597,18598],{"class":45},"x1",[39,18600,2495],{"class":49},[39,18602,18603],{"class":45},"y1;\n",[39,18605,18606],{"class":41,"line":10976},[39,18607,18608],{"class":45},"    Point p2;\n",[39,18610,18611,18614,18616],{"class":41,"line":10981},[39,18612,18613],{"class":45},"    p2.",[39,18615,18558],{"class":3021},[39,18617,18618],{"class":45},"(x1, y1);\n",[39,18620,18621,18624],{"class":41,"line":17660},[39,18622,18623],{"class":3021},"    isInCircle",[39,18625,18626],{"class":45},"(c1, p2);\n",[39,18628,18629],{"class":41,"line":17666},[39,18630,2630],{"class":45},[19,18632,18633],{},"在类中可以让另一个类作为本来的成员",[19,18635,18636],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,18638,18639],{},"创建point.h",[29,18641,18643],{"className":1209,"code":18642,"language":1211,"meta":34,"style":34},"#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",[36,18644,18645,18656,18662,18672,18678,18682,18687,18691,18695,18715,18719,18727,18735,18739,18743,18749,18755],{"__ignoreMap":34},[39,18646,18647,18650,18653],{"class":41,"line":42},[39,18648,18649],{"class":49},"#pragma",[39,18651,18652],{"class":3021}," once",[39,18654,18655],{"class":102}," \u002F\u002F防止头文件重复包含\n",[39,18657,18658,18660],{"class":41,"line":74},[39,18659,3007],{"class":49},[39,18661,3010],{"class":1319},[39,18663,18664,18666,18668,18670],{"class":41,"line":99},[39,18665,3015],{"class":49},[39,18667,3018],{"class":49},[39,18669,3022],{"class":3021},[39,18671,2359],{"class":45},[39,18673,18674,18676],{"class":41,"line":106},[39,18675,15750],{"class":49},[39,18677,18037],{"class":3021},[39,18679,18680],{"class":41,"line":112},[39,18681,2611],{"class":45},[39,18683,18684],{"class":41,"line":118},[39,18685,18686],{"class":102},"\u002F\u002F做好声明与变量定义就可以\n",[39,18688,18689],{"class":41,"line":413},[39,18690,15772],{"class":49},[39,18692,18693],{"class":41,"line":419},[39,18694,18050],{"class":102},[39,18696,18697,18699,18701,18703,18705,18707,18709,18711,18713],{"class":41,"line":425},[39,18698,15965],{"class":49},[39,18700,18057],{"class":3021},[39,18702,1221],{"class":45},[39,18704,15093],{"class":49},[39,18706,18064],{"class":254},[39,18708,13491],{"class":45},[39,18710,15093],{"class":49},[39,18712,18071],{"class":254},[39,18714,3777],{"class":45},[39,18716,18717],{"class":41,"line":443},[39,18718,18089],{"class":102},[39,18720,18721,18723,18725],{"class":41,"line":449},[39,18722,15794],{"class":49},[39,18724,18096],{"class":3021},[39,18726,6692],{"class":45},[39,18728,18729,18731,18733],{"class":41,"line":455},[39,18730,15794],{"class":49},[39,18732,18112],{"class":3021},[39,18734,6692],{"class":45},[39,18736,18737],{"class":41,"line":461},[39,18738,3458],{"emptyLinePlaceholder":1145},[39,18740,18741],{"class":41,"line":475},[39,18742,16278],{"class":49},[39,18744,18745,18747],{"class":41,"line":665},[39,18746,15794],{"class":49},[39,18748,18134],{"class":45},[39,18750,18751,18753],{"class":41,"line":671},[39,18752,15794],{"class":49},[39,18754,18141],{"class":45},[39,18756,18757],{"class":41,"line":684},[39,18758,5053],{"class":45},[19,18760,18761],{},"创建point.cpp",[29,18763,18765],{"className":1209,"code":18764,"language":1211,"meta":34,"style":34},"#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",[36,18766,18767,18774,18779,18813,18817,18833],{"__ignoreMap":34},[39,18768,18769,18771],{"class":41,"line":42},[39,18770,3007],{"class":49},[39,18772,18773],{"class":1319},"\u003Cpoint.h>\n",[39,18775,18776],{"class":41,"line":74},[39,18777,18778],{"class":102},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[39,18780,18781,18783,18786,18789,18791,18793,18795,18797,18799,18801,18803,18805,18807,18809,18811],{"class":41,"line":99},[39,18782,15965],{"class":49},[39,18784,18785],{"class":3021}," Point",[39,18787,18788],{"class":45},"::",[39,18790,18558],{"class":3021},[39,18792,1221],{"class":45},[39,18794,15093],{"class":49},[39,18796,18064],{"class":254},[39,18798,13491],{"class":45},[39,18800,15093],{"class":49},[39,18802,18071],{"class":254},[39,18804,18074],{"class":45},[39,18806,50],{"class":49},[39,18808,18079],{"class":45},[39,18810,50],{"class":49},[39,18812,18084],{"class":45},[39,18814,18815],{"class":41,"line":106},[39,18816,18089],{"class":102},[39,18818,18819,18821,18823,18825,18827,18829,18831],{"class":41,"line":112},[39,18820,15794],{"class":49},[39,18822,18785],{"class":3021},[39,18824,18788],{"class":45},[39,18826,18320],{"class":3021},[39,18828,18099],{"class":45},[39,18830,18102],{"class":49},[39,18832,18105],{"class":45},[39,18834,18835,18837,18839,18841,18843,18845,18847],{"class":41,"line":118},[39,18836,15794],{"class":49},[39,18838,18785],{"class":3021},[39,18840,18788],{"class":45},[39,18842,18348],{"class":3021},[39,18844,18099],{"class":45},[39,18846,18102],{"class":49},[39,18848,18119],{"class":45},[19,18850,18851],{},"创建circle.h",[29,18853,18855],{"className":1209,"code":18854,"language":1211,"meta":34,"style":34},"#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",[36,18856,18857,18864,18870,18880,18886,18892,18896,18900,18904,18918,18932,18936,18944,18952,18956,18960,18966,18970,18974],{"__ignoreMap":34},[39,18858,18859,18861],{"class":41,"line":42},[39,18860,18649],{"class":49},[39,18862,18863],{"class":3021}," once\n",[39,18865,18866,18868],{"class":41,"line":74},[39,18867,3007],{"class":49},[39,18869,3010],{"class":1319},[39,18871,18872,18874,18876,18878],{"class":41,"line":99},[39,18873,3015],{"class":49},[39,18875,3018],{"class":49},[39,18877,3022],{"class":3021},[39,18879,2359],{"class":45},[39,18881,18882,18884],{"class":41,"line":106},[39,18883,3007],{"class":49},[39,18885,18773],{"class":1319},[39,18887,18888,18890],{"class":41,"line":112},[39,18889,15750],{"class":49},[39,18891,15753],{"class":3021},[39,18893,18894],{"class":41,"line":118},[39,18895,2611],{"class":45},[39,18897,18898],{"class":41,"line":413},[39,18899,15772],{"class":49},[39,18901,18902],{"class":41,"line":419},[39,18903,18050],{"class":102},[39,18905,18906,18908,18910,18912,18914,18916],{"class":41,"line":425},[39,18907,15965],{"class":49},[39,18909,18170],{"class":3021},[39,18911,1221],{"class":45},[39,18913,15093],{"class":49},[39,18915,18177],{"class":254},[39,18917,3777],{"class":45},[39,18919,18920,18922,18924,18926,18928,18930],{"class":41,"line":443},[39,18921,15965],{"class":49},[39,18923,18192],{"class":3021},[39,18925,1221],{"class":45},[39,18927,18197],{"class":3021},[39,18929,18200],{"class":254},[39,18931,3777],{"class":45},[39,18933,18934],{"class":41,"line":449},[39,18935,18213],{"class":102},[39,18937,18938,18940,18942],{"class":41,"line":455},[39,18939,15794],{"class":49},[39,18941,18220],{"class":3021},[39,18943,6692],{"class":45},[39,18945,18946,18948,18950],{"class":41,"line":461},[39,18947,18232],{"class":3021},[39,18949,18235],{"class":3021},[39,18951,6692],{"class":45},[39,18953,18954],{"class":41,"line":475},[39,18955,3458],{"emptyLinePlaceholder":1145},[39,18957,18958],{"class":41,"line":665},[39,18959,16278],{"class":49},[39,18961,18962,18964],{"class":41,"line":671},[39,18963,15794],{"class":49},[39,18965,15784],{"class":45},[39,18967,18968],{"class":41,"line":684},[39,18969,18261],{"class":102},[39,18971,18972],{"class":41,"line":2732},[39,18973,18266],{"class":45},[39,18975,18976],{"class":41,"line":2737},[39,18977,5053],{"class":45},[19,18979,18980],{},"创建circle.cpp",[29,18982,18984],{"className":1209,"code":18983,"language":1211,"meta":34,"style":34},"#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",[36,18985,18986,18993,19016,19038,19043,19059],{"__ignoreMap":34},[39,18987,18988,18990],{"class":41,"line":42},[39,18989,3007],{"class":49},[39,18991,18992],{"class":1319},"\u003Ccircle.h>\n",[39,18994,18995,18997,19000,19002,19004,19006,19008,19010,19012,19014],{"class":41,"line":74},[39,18996,6420],{"class":49},[39,18998,18999],{"class":3021}," Circle",[39,19001,18788],{"class":45},[39,19003,18516],{"class":3021},[39,19005,1221],{"class":45},[39,19007,15093],{"class":49},[39,19009,18177],{"class":254},[39,19011,18180],{"class":45},[39,19013,50],{"class":49},[39,19015,18185],{"class":45},[39,19017,19018,19020,19022,19024,19026,19028,19030,19032,19034,19036],{"class":41,"line":99},[39,19019,6420],{"class":49},[39,19021,18999],{"class":3021},[39,19023,18788],{"class":45},[39,19025,18568],{"class":3021},[39,19027,1221],{"class":45},[39,19029,18197],{"class":3021},[39,19031,18200],{"class":254},[39,19033,18203],{"class":45},[39,19035,50],{"class":49},[39,19037,18208],{"class":45},[39,19039,19040],{"class":41,"line":106},[39,19041,19042],{"class":102},"\u002F\u002F获取属性\n",[39,19044,19045,19047,19049,19051,19053,19055,19057],{"class":41,"line":112},[39,19046,15093],{"class":49},[39,19048,18999],{"class":3021},[39,19050,18788],{"class":45},[39,19052,18400],{"class":3021},[39,19054,18099],{"class":45},[39,19056,18102],{"class":49},[39,19058,18227],{"class":45},[39,19060,19061,19063,19065,19067,19069,19071,19073],{"class":41,"line":118},[39,19062,18197],{"class":3021},[39,19064,18999],{"class":3021},[39,19066,18788],{"class":45},[39,19068,18314],{"class":3021},[39,19070,18099],{"class":45},[39,19072,18102],{"class":49},[39,19074,18242],{"class":45},[19,19076,19077],{},"使用封装的类",[29,19079,19081],{"className":1209,"code":19080,"language":1211,"meta":34,"style":34},"#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",[36,19082,19083,19089,19099,19105,19111,19135,19139,19165,19191,19215,19229,19233,19245,19249,19253,19257,19269,19273,19277,19285,19289,19293,19297,19301,19305,19315,19321,19329,19337,19347,19353,19365,19373,19381,19391,19397,19409,19413,19421,19427],{"__ignoreMap":34},[39,19084,19085,19087],{"class":41,"line":42},[39,19086,3007],{"class":49},[39,19088,3010],{"class":1319},[39,19090,19091,19093,19095,19097],{"class":41,"line":74},[39,19092,3015],{"class":49},[39,19094,3018],{"class":49},[39,19096,3022],{"class":3021},[39,19098,2359],{"class":45},[39,19100,19101,19103],{"class":41,"line":99},[39,19102,3007],{"class":49},[39,19104,18992],{"class":1319},[39,19106,19107,19109],{"class":41,"line":106},[39,19108,3007],{"class":49},[39,19110,18773],{"class":1319},[39,19112,19113,19115,19117,19119,19121,19123,19125,19127,19129,19131,19133],{"class":41,"line":112},[39,19114,6420],{"class":49},[39,19116,18277],{"class":3021},[39,19118,1221],{"class":45},[39,19120,18282],{"class":3021},[39,19122,11640],{"class":49},[39,19124,139],{"class":254},[39,19126,60],{"class":45},[39,19128,18197],{"class":3021},[39,19130,11640],{"class":49},[39,19132,19],{"class":254},[39,19134,209],{"class":45},[39,19136,19137],{"class":41,"line":118},[39,19138,2611],{"class":45},[39,19140,19141,19143,19145,19147,19149,19151,19153,19155,19157,19159,19161,19163],{"class":41,"line":413},[39,19142,15794],{"class":49},[39,19144,18307],{"class":45},[39,19146,50],{"class":49},[39,19148,17398],{"class":45},[39,19150,18314],{"class":3021},[39,19152,18317],{"class":45},[39,19154,18320],{"class":3021},[39,19156,14106],{"class":45},[39,19158,1732],{"class":49},[39,19160,16944],{"class":45},[39,19162,18320],{"class":3021},[39,19164,6692],{"class":45},[39,19166,19167,19169,19171,19173,19175,19177,19179,19181,19183,19185,19187,19189],{"class":41,"line":419},[39,19168,15794],{"class":49},[39,19170,18337],{"class":45},[39,19172,50],{"class":49},[39,19174,17398],{"class":45},[39,19176,18314],{"class":3021},[39,19178,18317],{"class":45},[39,19180,18348],{"class":3021},[39,19182,14106],{"class":45},[39,19184,1732],{"class":49},[39,19186,16944],{"class":45},[39,19188,18348],{"class":3021},[39,19190,6692],{"class":45},[39,19192,19193,19195,19197,19199,19201,19203,19205,19207,19209,19211,19213],{"class":41,"line":425},[39,19194,15794],{"class":49},[39,19196,18365],{"class":45},[39,19198,50],{"class":49},[39,19200,18370],{"class":3021},[39,19202,18373],{"class":45},[39,19204,1657],{"class":49},[39,19206,18307],{"class":45},[39,19208,1682],{"class":49},[39,19210,18337],{"class":45},[39,19212,1657],{"class":49},[39,19214,18386],{"class":45},[39,19216,19217,19219,19221,19223,19225,19227],{"class":41,"line":443},[39,19218,4159],{"class":49},[39,19220,18393],{"class":45},[39,19222,2108],{"class":49},[39,19224,17398],{"class":45},[39,19226,18400],{"class":3021},[39,19228,18403],{"class":45},[39,19230,19231],{"class":41,"line":449},[39,19232,3088],{"class":45},[39,19234,19235,19237,19239,19241,19243],{"class":41,"line":455},[39,19236,10725],{"class":45},[39,19238,2242],{"class":49},[39,19240,18416],{"class":1319},[39,19242,2510],{"class":49},[39,19244,9896],{"class":45},[39,19246,19247],{"class":41,"line":461},[39,19248,3245],{"class":45},[39,19250,19251],{"class":41,"line":475},[39,19252,17879],{"class":49},[39,19254,19255],{"class":41,"line":665},[39,19256,3088],{"class":45},[39,19258,19259,19261,19263,19265,19267],{"class":41,"line":671},[39,19260,10725],{"class":45},[39,19262,2242],{"class":49},[39,19264,18441],{"class":1319},[39,19266,2510],{"class":49},[39,19268,9896],{"class":45},[39,19270,19271],{"class":41,"line":684},[39,19272,3245],{"class":45},[39,19274,19275],{"class":41,"line":2732},[39,19276,2630],{"class":45},[39,19278,19279,19281,19283],{"class":41,"line":2737},[39,19280,1224],{"class":49},[39,19282,3031],{"class":3021},[39,19284,3034],{"class":45},[39,19286,19287],{"class":41,"line":2751},[39,19288,2611],{"class":45},[39,19290,19291],{"class":41,"line":2756},[39,19292,16109],{"class":102},[39,19294,19295],{"class":41,"line":2785},[39,19296,15856],{"class":45},[39,19298,19299],{"class":41,"line":2790},[39,19300,18478],{"class":45},[39,19302,19303],{"class":41,"line":2807},[39,19304,18050],{"class":102},[39,19306,19307,19309,19311,19313],{"class":41,"line":2812},[39,19308,2616],{"class":45},[39,19310,2242],{"class":49},[39,19312,18491],{"class":1319},[39,19314,2359],{"class":45},[39,19316,19317,19319],{"class":41,"line":2817},[39,19318,15794],{"class":49},[39,19320,18500],{"class":45},[39,19322,19323,19325,19327],{"class":41,"line":2822},[39,19324,3070],{"class":45},[39,19326,2495],{"class":49},[39,19328,18509],{"class":45},[39,19330,19331,19333,19335],{"class":41,"line":2836},[39,19332,17651],{"class":45},[39,19334,18516],{"class":3021},[39,19336,18519],{"class":45},[39,19338,19339,19341,19343,19345],{"class":41,"line":2841},[39,19340,2616],{"class":45},[39,19342,2242],{"class":49},[39,19344,18528],{"class":1319},[39,19346,2359],{"class":45},[39,19348,19349,19351],{"class":41,"line":3635},[39,19350,15794],{"class":49},[39,19352,18537],{"class":45},[39,19354,19355,19357,19359,19361,19363],{"class":41,"line":3649},[39,19356,3070],{"class":45},[39,19358,2495],{"class":49},[39,19360,2018],{"class":45},[39,19362,2495],{"class":49},[39,19364,18550],{"class":45},[39,19366,19367,19369,19371],{"class":41,"line":3657},[39,19368,18555],{"class":45},[39,19370,18558],{"class":3021},[39,19372,18561],{"class":45},[39,19374,19375,19377,19379],{"class":41,"line":3662},[39,19376,17651],{"class":45},[39,19378,18568],{"class":3021},[39,19380,18571],{"class":45},[39,19382,19383,19385,19387,19389],{"class":41,"line":3668},[39,19384,2616],{"class":45},[39,19386,2242],{"class":49},[39,19388,18580],{"class":1319},[39,19390,2359],{"class":45},[39,19392,19393,19395],{"class":41,"line":3674},[39,19394,15794],{"class":49},[39,19396,18589],{"class":45},[39,19398,19399,19401,19403,19405,19407],{"class":41,"line":3679},[39,19400,3070],{"class":45},[39,19402,2495],{"class":49},[39,19404,18598],{"class":45},[39,19406,2495],{"class":49},[39,19408,18603],{"class":45},[39,19410,19411],{"class":41,"line":9004},[39,19412,18608],{"class":45},[39,19414,19415,19417,19419],{"class":41,"line":9028},[39,19416,18613],{"class":45},[39,19418,18558],{"class":3021},[39,19420,18618],{"class":45},[39,19422,19423,19425],{"class":41,"line":9033},[39,19424,18623],{"class":3021},[39,19426,18626],{"class":45},[39,19428,19429],{"class":41,"line":9039},[39,19430,2630],{"class":45},[14,19432,19434],{"id":19433},"_82对象的初始化清理","8.2对象的初始化清理",[2205,19436,19437,19440],{},[1174,19438,19439],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[1174,19441,19442],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[1188,19444,19446],{"id":19445},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,19448,19449,19450,19453],{},"对象的",[304,19451,19452],{},"初始化和清理","也是两个非常重要的安全问题",[19,19455,19456],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,19458,19459],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,19461,19462,19463,19466,19467,19470],{},"c++利用了",[304,19464,19465],{},"构造函数","和",[304,19468,19469],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,19472,19473,19474],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[304,19475,19476],{},"我们不提供构造和析构，编译器会提供",[19,19478,19479],{},[304,19480,19481],{},"编译器提供的构造函数和析构函数是空实现。",[2205,19483,19484,19487],{},[1174,19485,19486],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[1174,19488,19489,19490,19493],{},"析构函数：主要作用在于对象",[304,19491,19492],{},"销毁前","系统自动调用，执行一些清理工作。",[19,19495,19496,19499],{},[304,19497,19498],{},"构造函数语法：",[36,19500,19501],{},"类名(){}",[1171,19503,19504,19507,19510,19513,19516],{},[1174,19505,19506],{},"构造函数，没有返回值也不写void",[1174,19508,19509],{},"函数名称与类名相同",[1174,19511,19512],{},"构造函数可以有参数，因此可以发生重载",[1174,19514,19515],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[1174,19517,19518,19519,1632],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[36,19520,19521],{},"Person(){}",[19,19523,19524,14851,19527],{},[304,19525,19526],{},"析构函数语法：",[36,19528,19529],{},"~类名(){}",[1171,19531,19532,19535,19538,19544],{},[1174,19533,19534],{},"析构函数，没有返回值也不写void",[1174,19536,19537],{},"函数名称与类名相同,在名称前加上符号  ~",[1174,19539,19540,19541],{},"析构函数不可以有参数，因此",[304,19542,19543],{},"不可以发生重载",[1174,19545,19546],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[29,19548,19550],{"className":1209,"code":19549,"language":1211,"meta":34,"style":34},"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",[36,19551,19552,19558,19562,19566,19571,19578,19582,19595,19599,19604,19611,19615,19628,19632,19636,19640,19644,19652,19656,19664,19668,19672,19680,19684,19689,19693,19700,19704,19717,19721,19729],{"__ignoreMap":34},[39,19553,19554,19556],{"class":41,"line":42},[39,19555,15750],{"class":49},[39,19557,16227],{"class":3021},[39,19559,19560],{"class":41,"line":74},[39,19561,2611],{"class":45},[39,19563,19564],{"class":41,"line":99},[39,19565,15772],{"class":49},[39,19567,19568],{"class":41,"line":106},[39,19569,19570],{"class":102},"    \u002F\u002F构造函数\n",[39,19572,19573,19576],{"class":41,"line":112},[39,19574,19575],{"class":3021},"    Person",[39,19577,3034],{"class":45},[39,19579,19580],{"class":41,"line":118},[39,19581,3088],{"class":45},[39,19583,19584,19586,19588,19591,19593],{"class":41,"line":413},[39,19585,10725],{"class":45},[39,19587,2242],{"class":49},[39,19589,19590],{"class":1319}," \"Person的构造函数调用\"",[39,19592,2510],{"class":49},[39,19594,9896],{"class":45},[39,19596,19597],{"class":41,"line":419},[39,19598,3245],{"class":45},[39,19600,19601],{"class":41,"line":425},[39,19602,19603],{"class":102},"    \u002F\u002F析构函数\n",[39,19605,19606,19609],{"class":41,"line":443},[39,19607,19608],{"class":3021},"    ~Person",[39,19610,3034],{"class":45},[39,19612,19613],{"class":41,"line":449},[39,19614,3088],{"class":45},[39,19616,19617,19619,19621,19624,19626],{"class":41,"line":455},[39,19618,10725],{"class":45},[39,19620,2242],{"class":49},[39,19622,19623],{"class":1319}," \"Person的析构函数调用\"",[39,19625,2510],{"class":49},[39,19627,9896],{"class":45},[39,19629,19630],{"class":41,"line":461},[39,19631,3245],{"class":45},[39,19633,19634],{"class":41,"line":475},[39,19635,3458],{"emptyLinePlaceholder":1145},[39,19637,19638],{"class":41,"line":665},[39,19639,5053],{"class":45},[39,19641,19642],{"class":41,"line":671},[39,19643,3458],{"emptyLinePlaceholder":1145},[39,19645,19646,19648,19650],{"class":41,"line":684},[39,19647,6420],{"class":49},[39,19649,6644],{"class":3021},[39,19651,3034],{"class":45},[39,19653,19654],{"class":41,"line":2732},[39,19655,2611],{"class":45},[39,19657,19658,19661],{"class":41,"line":2737},[39,19659,19660],{"class":45},"    Person p;",[39,19662,19663],{"class":102},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[39,19665,19666],{"class":41,"line":2751},[39,19667,2630],{"class":45},[39,19669,19670],{"class":41,"line":2756},[39,19671,3458],{"emptyLinePlaceholder":1145},[39,19673,19674,19676,19678],{"class":41,"line":2785},[39,19675,1224],{"class":49},[39,19677,3031],{"class":3021},[39,19679,11909],{"class":45},[39,19681,19682],{"class":41,"line":2790},[39,19683,14266],{"class":45},[39,19685,19686],{"class":41,"line":2807},[39,19687,19688],{"class":102},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[39,19690,19691],{"class":41,"line":2812},[39,19692,3458],{"emptyLinePlaceholder":1145},[39,19694,19695,19697],{"class":41,"line":2817},[39,19696,19660],{"class":45},[39,19698,19699],{"class":102},"\u002F\u002F只有构造函数\n",[39,19701,19702],{"class":41,"line":2822},[39,19703,3458],{"emptyLinePlaceholder":1145},[39,19705,19706,19708,19710,19712,19714],{"class":41,"line":2836},[39,19707,3361],{"class":3021},[39,19709,1221],{"class":45},[39,19711,3366],{"class":1319},[39,19713,7022],{"class":45},[39,19715,19716],{"class":102},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[39,19718,19719],{"class":41,"line":2841},[39,19720,3458],{"emptyLinePlaceholder":1145},[39,19722,19723,19725,19727],{"class":41,"line":3635},[39,19724,5148],{"class":49},[39,19726,5151],{"class":56},[39,19728,2359],{"class":45},[39,19730,19731],{"class":41,"line":3649},[39,19732,2630],{"class":45},[19,19734,19735],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[1188,19737,19739],{"id":19738},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,19741,19742],{},"两种分类方式：",[19,19744,19745],{},"​\t按参数分为： 有参构造和无参构造",[19,19747,19748],{},"​\t按类型分为： 普通构造和拷贝构造",[19,19750,19751],{},"三种调用方式：",[19,19753,19754],{},"​\t括号法",[19,19756,19757],{},"​\t显示法",[19,19759,19760],{},"​\t隐式转换法",[29,19762,19764],{"className":1209,"code":19763,"language":1211,"meta":34,"style":34},"#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",[36,19765,19766,19772,19782,19787,19792,19797,19802,19806,19814,19818,19822,19826,19832,19836,19849,19853,19865,19869,19878,19891,19895,19899,19905,19909,19922,19926,19931,19947,19951,19956,19965,19978,19982,19988,19992,19997,20005,20009,20014,20018,20026,20030,20035,20040,20045,20050,20055,20059,20064,20069,20074,20079,20083,20088,20093,20109,20121,20126,20130,20135,20140,20145,20149,20154,20168,20181,20185,20193,20197,20203,20209,20217],{"__ignoreMap":34},[39,19767,19768,19770],{"class":41,"line":42},[39,19769,3007],{"class":49},[39,19771,3010],{"class":1319},[39,19773,19774,19776,19778,19780],{"class":41,"line":74},[39,19775,3015],{"class":49},[39,19777,3018],{"class":49},[39,19779,3022],{"class":3021},[39,19781,2359],{"class":45},[39,19783,19784],{"class":41,"line":99},[39,19785,19786],{"class":102},"\u002F\u002F1.构造函数的分类及调用\n",[39,19788,19789],{"class":41,"line":106},[39,19790,19791],{"class":102},"\u002F\u002F分类\n",[39,19793,19794],{"class":41,"line":112},[39,19795,19796],{"class":102},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[39,19798,19799],{"class":41,"line":118},[39,19800,19801],{"class":102},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[39,19803,19804],{"class":41,"line":413},[39,19805,3458],{"emptyLinePlaceholder":1145},[39,19807,19808,19810,19812],{"class":41,"line":419},[39,19809,15750],{"class":49},[39,19811,16625],{"class":3021},[39,19813,3732],{"class":45},[39,19815,19816],{"class":41,"line":425},[39,19817,2611],{"class":45},[39,19819,19820],{"class":41,"line":443},[39,19821,15772],{"class":49},[39,19823,19824],{"class":41,"line":449},[39,19825,19570],{"class":102},[39,19827,19828,19830],{"class":41,"line":455},[39,19829,19575],{"class":3021},[39,19831,3034],{"class":45},[39,19833,19834],{"class":41,"line":461},[39,19835,3088],{"class":45},[39,19837,19838,19840,19842,19845,19847],{"class":41,"line":475},[39,19839,4509],{"class":45},[39,19841,2242],{"class":49},[39,19843,19844],{"class":1319},"\"Person构造函数无参构造\"",[39,19846,2242],{"class":49},[39,19848,2264],{"class":45},[39,19850,19851],{"class":41,"line":665},[39,19852,3245],{"class":45},[39,19854,19855,19857,19859,19861,19863],{"class":41,"line":671},[39,19856,19575],{"class":3021},[39,19858,1221],{"class":45},[39,19860,1224],{"class":49},[39,19862,2464],{"class":254},[39,19864,209],{"class":45},[39,19866,19867],{"class":41,"line":684},[39,19868,3088],{"class":45},[39,19870,19871,19874,19876],{"class":41,"line":2732},[39,19872,19873],{"class":45},"        age",[39,19875,50],{"class":49},[39,19877,7253],{"class":45},[39,19879,19880,19882,19884,19887,19889],{"class":41,"line":2737},[39,19881,4509],{"class":45},[39,19883,2242],{"class":49},[39,19885,19886],{"class":1319},"\"Person构造函数有参构造\"",[39,19888,2242],{"class":49},[39,19890,2264],{"class":45},[39,19892,19893],{"class":41,"line":2751},[39,19894,3245],{"class":45},[39,19896,19897],{"class":41,"line":2756},[39,19898,19603],{"class":102},[39,19900,19901,19903],{"class":41,"line":2785},[39,19902,19608],{"class":3021},[39,19904,3034],{"class":45},[39,19906,19907],{"class":41,"line":2790},[39,19908,3088],{"class":45},[39,19910,19911,19913,19915,19918,19920],{"class":41,"line":2807},[39,19912,4509],{"class":45},[39,19914,2242],{"class":49},[39,19916,19917],{"class":1319},"\"Person析构函数被调用\"",[39,19919,2242],{"class":49},[39,19921,2264],{"class":45},[39,19923,19924],{"class":41,"line":2812},[39,19925,3245],{"class":45},[39,19927,19928],{"class":41,"line":2817},[39,19929,19930],{"class":102},"    \u002F\u002F拷贝构造函数\n",[39,19932,19933,19935,19937,19939,19941,19943,19945],{"class":41,"line":2822},[39,19934,19575],{"class":3021},[39,19936,1221],{"class":45},[39,19938,7848],{"class":49},[39,19940,16625],{"class":3021},[39,19942,11640],{"class":49},[39,19944,19],{"class":254},[39,19946,209],{"class":45},[39,19948,19949],{"class":41,"line":2836},[39,19950,3088],{"class":45},[39,19952,19953],{"class":41,"line":2841},[39,19954,19955],{"class":102},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[39,19957,19958,19960,19962],{"class":41,"line":3635},[39,19959,19873],{"class":45},[39,19961,50],{"class":49},[39,19963,19964],{"class":45},"p.age;\n",[39,19966,19967,19969,19971,19974,19976],{"class":41,"line":3649},[39,19968,4509],{"class":45},[39,19970,2242],{"class":49},[39,19972,19973],{"class":1319},"\"Person拷贝构造函数被调用\"",[39,19975,2242],{"class":49},[39,19977,2264],{"class":45},[39,19979,19980],{"class":41,"line":3657},[39,19981,3245],{"class":45},[39,19983,19984,19986],{"class":41,"line":3662},[39,19985,3043],{"class":49},[39,19987,8853],{"class":45},[39,19989,19990],{"class":41,"line":3668},[39,19991,5053],{"class":45},[39,19993,19994],{"class":41,"line":3674},[39,19995,19996],{"class":102},"\u002F\u002F调用\n",[39,19998,19999,20001,20003],{"class":41,"line":3679},[39,20000,6420],{"class":49},[39,20002,6644],{"class":3021},[39,20004,3034],{"class":45},[39,20006,20007],{"class":41,"line":9004},[39,20008,2611],{"class":45},[39,20010,20011],{"class":41,"line":9028},[39,20012,20013],{"class":102},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[39,20015,20016],{"class":41,"line":9033},[39,20017,2630],{"class":45},[39,20019,20020,20022,20024],{"class":41,"line":9039},[39,20021,6420],{"class":49},[39,20023,6713],{"class":3021},[39,20025,3034],{"class":45},[39,20027,20028],{"class":41,"line":9066},[39,20029,2611],{"class":45},[39,20031,20032],{"class":41,"line":9071},[39,20033,20034],{"class":102},"    \u002F\u002F1.括号法\n",[39,20036,20037],{"class":41,"line":9077},[39,20038,20039],{"class":102},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[39,20041,20042],{"class":41,"line":9089},[39,20043,20044],{"class":102},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[39,20046,20047],{"class":41,"line":9101},[39,20048,20049],{"class":102},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[39,20051,20052],{"class":41,"line":9113},[39,20053,20054],{"class":102},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[39,20056,20057],{"class":41,"line":10772},[39,20058,3458],{"emptyLinePlaceholder":1145},[39,20060,20061],{"class":41,"line":10797},[39,20062,20063],{"class":102},"    \u002F\u002F注意事项\n",[39,20065,20066],{"class":41,"line":10820},[39,20067,20068],{"class":102},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[39,20070,20071],{"class":41,"line":10844},[39,20072,20073],{"class":102},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[39,20075,20076],{"class":41,"line":10849},[39,20077,20078],{"class":102},"    \u002F\u002F Person p4();\n",[39,20080,20081],{"class":41,"line":10854},[39,20082,3458],{"emptyLinePlaceholder":1145},[39,20084,20085],{"class":41,"line":10859},[39,20086,20087],{"class":102},"    \u002F\u002F2.显示法\n",[39,20089,20090],{"class":41,"line":10868},[39,20091,20092],{"class":45},"    Person p1;\n",[39,20094,20095,20098,20100,20103,20105,20107],{"class":41,"line":10873},[39,20096,20097],{"class":45},"    Person p2",[39,20099,50],{"class":49},[39,20101,20102],{"class":3021},"Person",[39,20104,1221],{"class":45},[39,20106,146],{"class":56},[39,20108,3777],{"class":45},[39,20110,20111,20114,20116,20118],{"class":41,"line":10879},[39,20112,20113],{"class":45},"    Person p3",[39,20115,50],{"class":49},[39,20117,20102],{"class":3021},[39,20119,20120],{"class":45},"(p2);\n",[39,20122,20123],{"class":41,"line":10900},[39,20124,20125],{"class":102},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[39,20127,20128],{"class":41,"line":10906},[39,20129,3458],{"emptyLinePlaceholder":1145},[39,20131,20132],{"class":41,"line":10920},[39,20133,20134],{"class":102},"    \u002F\u002F 注意事项2\n",[39,20136,20137],{"class":41,"line":10926},[39,20138,20139],{"class":102},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[39,20141,20142],{"class":41,"line":10953},[39,20143,20144],{"class":102},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[39,20146,20147],{"class":41,"line":10962},[39,20148,3458],{"emptyLinePlaceholder":1145},[39,20150,20151],{"class":41,"line":10968},[39,20152,20153],{"class":102},"    \u002F\u002F3.隐士转换法\n",[39,20155,20156,20159,20161,20163,20165],{"class":41,"line":10976},[39,20157,20158],{"class":45},"    Person p4",[39,20160,50],{"class":49},[39,20162,146],{"class":56},[39,20164,1273],{"class":45},[39,20166,20167],{"class":102},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[39,20169,20170,20173,20175,20178],{"class":41,"line":10981},[39,20171,20172],{"class":45},"    Person p5",[39,20174,50],{"class":49},[39,20176,20177],{"class":45},"p4;",[39,20179,20180],{"class":102}," \u002F\u002F 这里会调用拷贝构造函数\n",[39,20182,20183],{"class":41,"line":17660},[39,20184,2630],{"class":45},[39,20186,20187,20189,20191],{"class":41,"line":17666},[39,20188,1224],{"class":49},[39,20190,3031],{"class":3021},[39,20192,3034],{"class":45},[39,20194,20195],{"class":41,"line":17689},[39,20196,2611],{"class":45},[39,20198,20199,20201],{"class":41,"line":17695},[39,20200,6689],{"class":3021},[39,20202,6692],{"class":45},[39,20204,20205,20207],{"class":41,"line":17718},[39,20206,6758],{"class":3021},[39,20208,6692],{"class":45},[39,20210,20211,20213,20215],{"class":41,"line":17732},[39,20212,5148],{"class":49},[39,20214,5151],{"class":56},[39,20216,2359],{"class":45},[39,20218,20219],{"class":41,"line":17752},[39,20220,2630],{"class":45},[19,20222,20223,20226],{},[304,20224,20225],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[1188,20228,20230],{"id":20229},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,20232,20233],{},"C++中拷贝构造函数调用时机通常有三种情况",[2205,20235,20236,20239,20242],{},[1174,20237,20238],{},"使用一个已经创建完毕的对象来初始化一个新对象",[1174,20240,20241],{},"值传递的方式给函数参数传值",[1174,20243,20244],{},"以值方式返回局部对象",[29,20246,20248],{"className":1209,"code":20247,"language":1211,"meta":34,"style":34},"#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",[36,20249,20250,20256,20266,20270,20275,20279,20284,20289,20294,20300,20304,20308,20314,20318,20331,20335,20340,20352,20356,20364,20377,20381,20385,20401,20405,20414,20427,20431,20437,20441,20453,20457,20463,20467,20471,20479,20483,20496,20504,20522,20526,20531,20536,20551,20555,20568,20572,20580,20584,20588,20596,20600,20605,20614,20618,20622,20647,20657,20661,20669,20673,20684,20709,20713,20717,20721,20729,20733,20738,20743,20750,20755,20760,20765,20770,20774,20779,20783,20788,20792,20797,20802,20806,20810,20815,20820,20828],{"__ignoreMap":34},[39,20251,20252,20254],{"class":41,"line":42},[39,20253,3007],{"class":49},[39,20255,3010],{"class":1319},[39,20257,20258,20260,20262,20264],{"class":41,"line":74},[39,20259,3015],{"class":49},[39,20261,3018],{"class":49},[39,20263,3022],{"class":3021},[39,20265,2359],{"class":45},[39,20267,20268],{"class":41,"line":99},[39,20269,3458],{"emptyLinePlaceholder":1145},[39,20271,20272],{"class":41,"line":106},[39,20273,20274],{"class":102},"\u002F\u002F拷贝构造函数调用时机\n",[39,20276,20277],{"class":41,"line":112},[39,20278,3458],{"emptyLinePlaceholder":1145},[39,20280,20281],{"class":41,"line":118},[39,20282,20283],{"class":102},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[39,20285,20286],{"class":41,"line":413},[39,20287,20288],{"class":102},"\u002F\u002F2.值传递的方式给函数参数传值\n",[39,20290,20291],{"class":41,"line":419},[39,20292,20293],{"class":102},"\u002F\u002F3.以值方式返回局部对象\n",[39,20295,20296,20298],{"class":41,"line":425},[39,20297,15750],{"class":49},[39,20299,16227],{"class":3021},[39,20301,20302],{"class":41,"line":443},[39,20303,2611],{"class":45},[39,20305,20306],{"class":41,"line":449},[39,20307,15772],{"class":49},[39,20309,20310,20312],{"class":41,"line":455},[39,20311,19575],{"class":3021},[39,20313,3034],{"class":45},[39,20315,20316],{"class":41,"line":461},[39,20317,3088],{"class":45},[39,20319,20320,20322,20324,20327,20329],{"class":41,"line":475},[39,20321,10725],{"class":45},[39,20323,2242],{"class":49},[39,20325,20326],{"class":1319}," \"Person的默认构造函数调用\"",[39,20328,2510],{"class":49},[39,20330,9896],{"class":45},[39,20332,20333],{"class":41,"line":665},[39,20334,3245],{"class":45},[39,20336,20337],{"class":41,"line":671},[39,20338,20339],{"class":102},"    \u002F\u002F有参构造\n",[39,20341,20342,20344,20346,20348,20350],{"class":41,"line":684},[39,20343,19575],{"class":3021},[39,20345,1221],{"class":45},[39,20347,1224],{"class":49},[39,20349,16745],{"class":254},[39,20351,209],{"class":45},[39,20353,20354],{"class":41,"line":2732},[39,20355,3088],{"class":45},[39,20357,20358,20360,20362],{"class":41,"line":2737},[39,20359,16799],{"class":45},[39,20361,50],{"class":49},[39,20363,8853],{"class":45},[39,20365,20366,20368,20370,20373,20375],{"class":41,"line":2751},[39,20367,10725],{"class":45},[39,20369,2242],{"class":49},[39,20371,20372],{"class":1319}," \"Person的有参构造函数调用\"",[39,20374,2510],{"class":49},[39,20376,9896],{"class":45},[39,20378,20379],{"class":41,"line":2756},[39,20380,3245],{"class":45},[39,20382,20383],{"class":41,"line":2785},[39,20384,19930],{"class":102},[39,20386,20387,20389,20391,20393,20395,20397,20399],{"class":41,"line":2790},[39,20388,19575],{"class":3021},[39,20390,1221],{"class":45},[39,20392,7848],{"class":49},[39,20394,16625],{"class":3021},[39,20396,11640],{"class":49},[39,20398,19],{"class":254},[39,20400,209],{"class":45},[39,20402,20403],{"class":41,"line":2807},[39,20404,3088],{"class":45},[39,20406,20407,20409,20411],{"class":41,"line":2812},[39,20408,16799],{"class":45},[39,20410,50],{"class":49},[39,20412,20413],{"class":45}," p.m_Age;\n",[39,20415,20416,20418,20420,20423,20425],{"class":41,"line":2817},[39,20417,10725],{"class":45},[39,20419,2242],{"class":49},[39,20421,20422],{"class":1319}," \"Person的拷贝构造函数调用\"",[39,20424,2510],{"class":49},[39,20426,9896],{"class":45},[39,20428,20429],{"class":41,"line":2822},[39,20430,3245],{"class":45},[39,20432,20433,20435],{"class":41,"line":2836},[39,20434,19608],{"class":3021},[39,20436,3034],{"class":45},[39,20438,20439],{"class":41,"line":2841},[39,20440,3088],{"class":45},[39,20442,20443,20445,20447,20449,20451],{"class":41,"line":3635},[39,20444,10725],{"class":45},[39,20446,2242],{"class":49},[39,20448,19623],{"class":1319},[39,20450,2510],{"class":49},[39,20452,9896],{"class":45},[39,20454,20455],{"class":41,"line":3649},[39,20456,3245],{"class":45},[39,20458,20459,20461],{"class":41,"line":3657},[39,20460,3043],{"class":49},[39,20462,16722],{"class":45},[39,20464,20465],{"class":41,"line":3662},[39,20466,5053],{"class":45},[39,20468,20469],{"class":41,"line":3668},[39,20470,20283],{"class":102},[39,20472,20473,20475,20477],{"class":41,"line":3674},[39,20474,6420],{"class":49},[39,20476,6644],{"class":3021},[39,20478,3034],{"class":45},[39,20480,20481],{"class":41,"line":3679},[39,20482,2611],{"class":45},[39,20484,20485,20488,20490,20492,20494],{"class":41,"line":9004},[39,20486,20487],{"class":45},"    Person ",[39,20489,8186],{"class":3021},[39,20491,1221],{"class":45},[39,20493,1898],{"class":56},[39,20495,3777],{"class":45},[39,20497,20498,20500,20502],{"class":41,"line":9028},[39,20499,20487],{"class":45},[39,20501,8089],{"class":3021},[39,20503,18571],{"class":45},[39,20505,20506,20508,20510,20513,20515,20518,20520],{"class":41,"line":9033},[39,20507,2616],{"class":45},[39,20509,2242],{"class":49},[39,20511,20512],{"class":1319},"\"P2的年龄为：\"",[39,20514,2242],{"class":49},[39,20516,20517],{"class":45},"p2.m_Age",[39,20519,2242],{"class":49},[39,20521,2264],{"class":45},[39,20523,20524],{"class":41,"line":9039},[39,20525,2630],{"class":45},[39,20527,20528],{"class":41,"line":9066},[39,20529,20530],{"class":102},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[39,20532,20533],{"class":41,"line":9071},[39,20534,20535],{"class":102},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[39,20537,20538,20540,20543,20545,20547,20549],{"class":41,"line":9077},[39,20539,6420],{"class":49},[39,20541,20542],{"class":3021}," doWork",[39,20544,1221],{"class":45},[39,20546,20102],{"class":3021},[39,20548,7881],{"class":254},[39,20550,209],{"class":45},[39,20552,20553],{"class":41,"line":9089},[39,20554,2611],{"class":45},[39,20556,20557,20559,20561,20564,20566],{"class":41,"line":9101},[39,20558,7585],{"class":45},[39,20560,2242],{"class":49},[39,20562,20563],{"class":1319}," \"doWork函数调用\"",[39,20565,2510],{"class":49},[39,20567,9896],{"class":45},[39,20569,20570],{"class":41,"line":9113},[39,20571,2630],{"class":45},[39,20573,20574,20576,20578],{"class":41,"line":10772},[39,20575,6420],{"class":49},[39,20577,6713],{"class":3021},[39,20579,3034],{"class":45},[39,20581,20582],{"class":41,"line":10797},[39,20583,2611],{"class":45},[39,20585,20586],{"class":41,"line":10820},[39,20587,16369],{"class":45},[39,20589,20590,20593],{"class":41,"line":10844},[39,20591,20592],{"class":3021},"    doWork",[39,20594,20595],{"class":45},"(p);\n",[39,20597,20598],{"class":41,"line":10849},[39,20599,2630],{"class":45},[39,20601,20602],{"class":41,"line":10854},[39,20603,20604],{"class":102},"\u002F\u002F 3.以值方式返回局部对象\n",[39,20606,20607,20609,20612],{"class":41,"line":10859},[39,20608,20102],{"class":3021},[39,20610,20611],{"class":3021}," doWork2",[39,20613,3034],{"class":45},[39,20615,20616],{"class":41,"line":10868},[39,20617,2611],{"class":45},[39,20619,20620],{"class":41,"line":10873},[39,20621,20092],{"class":45},[39,20623,20624,20626,20628,20630,20632,20634,20636,20638,20640,20642,20644],{"class":41,"line":10879},[39,20625,2616],{"class":45},[39,20627,2242],{"class":49},[39,20629,1221],{"class":45},[39,20631,1224],{"class":49},[39,20633,7574],{"class":49},[39,20635,1632],{"class":45},[39,20637,1557],{"class":49},[39,20639,8186],{"class":45},[39,20641,2242],{"class":49},[39,20643,2307],{"class":45},[39,20645,20646],{"class":102},"\u002F\u002F打印p1的地址\n",[39,20648,20649,20651,20654],{"class":41,"line":10900},[39,20650,5148],{"class":49},[39,20652,20653],{"class":45}," p1;",[39,20655,20656],{"class":102},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[39,20658,20659],{"class":41,"line":10906},[39,20660,2630],{"class":45},[39,20662,20663,20665,20667],{"class":41,"line":10920},[39,20664,6420],{"class":49},[39,20666,6785],{"class":3021},[39,20668,3034],{"class":45},[39,20670,20671],{"class":41,"line":10926},[39,20672,2611],{"class":45},[39,20674,20675,20678,20680,20682],{"class":41,"line":10953},[39,20676,20677],{"class":45},"    Person p ",[39,20679,50],{"class":49},[39,20681,20611],{"class":3021},[39,20683,6692],{"class":45},[39,20685,20686,20688,20690,20692,20694,20696,20698,20700,20702,20704,20706],{"class":41,"line":10962},[39,20687,2616],{"class":45},[39,20689,2242],{"class":49},[39,20691,1221],{"class":45},[39,20693,1224],{"class":49},[39,20695,7574],{"class":49},[39,20697,1632],{"class":45},[39,20699,1557],{"class":49},[39,20701,19],{"class":45},[39,20703,2242],{"class":49},[39,20705,2307],{"class":45},[39,20707,20708],{"class":102},"\u002F\u002F打印p的地址\n",[39,20710,20711],{"class":41,"line":10968},[39,20712,2630],{"class":45},[39,20714,20715],{"class":41,"line":10976},[39,20716,3458],{"emptyLinePlaceholder":1145},[39,20718,20719],{"class":41,"line":10981},[39,20720,3458],{"emptyLinePlaceholder":1145},[39,20722,20723,20725,20727],{"class":41,"line":17660},[39,20724,1224],{"class":49},[39,20726,3031],{"class":3021},[39,20728,3034],{"class":45},[39,20730,20731],{"class":41,"line":17666},[39,20732,2611],{"class":45},[39,20734,20735],{"class":41,"line":17689},[39,20736,20737],{"class":102},"    \u002F\u002F test01();\n",[39,20739,20740],{"class":41,"line":17695},[39,20741,20742],{"class":102},"    \u002F\u002F test02();\n",[39,20744,20745,20748],{"class":41,"line":17718},[39,20746,20747],{"class":3021},"    test03",[39,20749,6692],{"class":45},[39,20751,20752],{"class":41,"line":17732},[39,20753,20754],{"class":102},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[39,20756,20757],{"class":41,"line":17752},[39,20758,20759],{"class":102},"\u002F\u002F 输出结果如下：\n",[39,20761,20762],{"class":41,"line":17758},[39,20763,20764],{"class":102},"\u002F\u002F Person的默认构造函数调用\n",[39,20766,20767],{"class":41,"line":17769},[39,20768,20769],{"class":102},"\u002F\u002F 0x7fffffffceec\n",[39,20771,20772],{"class":41,"line":17792},[39,20773,20769],{"class":102},[39,20775,20776],{"class":41,"line":17814},[39,20777,20778],{"class":102},"\u002F\u002F Person的析构函数调用\n",[39,20780,20781],{"class":41,"line":17819},[39,20782,3458],{"emptyLinePlaceholder":1145},[39,20784,20785],{"class":41,"line":17825},[39,20786,20787],{"class":102},"\u002F\u002F 之前的输出结果如下：\n",[39,20789,20790],{"class":41,"line":17839},[39,20791,20764],{"class":102},[39,20793,20794],{"class":41,"line":17852},[39,20795,20796],{"class":102},"\u002F\u002F 地址\n",[39,20798,20799],{"class":41,"line":17857},[39,20800,20801],{"class":102},"\u002F\u002F Person的拷贝构造函数调用\n",[39,20803,20804],{"class":41,"line":17871},[39,20805,20778],{"class":102},[39,20807,20808],{"class":41,"line":17876},[39,20809,20796],{"class":102},[39,20811,20812],{"class":41,"line":17882},[39,20813,20814],{"class":102},"\u002F\u002F (这两次输出的地址也是不同的) \n",[39,20816,20817],{"class":41,"line":17887},[39,20818,20819],{"class":102},"\u002F\u002F Person的析构函数调用     \n",[39,20821,20822,20824,20826],{"class":41,"line":17901},[39,20823,5148],{"class":49},[39,20825,5151],{"class":56},[39,20827,2359],{"class":45},[39,20829,20830],{"class":41,"line":17906},[39,20831,2630],{"class":45},[19,20833,20834],{},"简化版理解",[29,20836,20838],{"className":1209,"code":20837,"language":1211,"meta":34,"style":34},"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",[36,20839,20840,20848,20852,20858,20871,20882,20886,20898,20911,20919,20923,20939,20952,20961,20965,20970,20976,20989,20993,20997,21004,21008,21012,21017,21025,21029,21045,21058,21071,21075,21080,21088,21092,21096,21101,21106,21122,21130,21137,21143,21147,21151,21156,21164,21168,21172,21195,21202,21206,21210,21218,21222,21232,21254,21258,21262,21266,21274,21278,21283,21288,21294,21298,21308,21312,21320],{"__ignoreMap":34},[39,20841,20842,20844,20846],{"class":41,"line":42},[39,20843,15750],{"class":49},[39,20845,16625],{"class":3021},[39,20847,16628],{"class":45},[39,20849,20850],{"class":41,"line":74},[39,20851,15772],{"class":49},[39,20853,20854,20856],{"class":41,"line":99},[39,20855,19575],{"class":3021},[39,20857,11909],{"class":45},[39,20859,20860,20862,20864,20867,20869],{"class":41,"line":106},[39,20861,10725],{"class":45},[39,20863,2242],{"class":49},[39,20865,20866],{"class":1319}," \"无参构造函数!\"",[39,20868,2510],{"class":49},[39,20870,9896],{"class":45},[39,20872,20873,20876,20878,20880],{"class":41,"line":112},[39,20874,20875],{"class":45},"        mAge ",[39,20877,50],{"class":49},[39,20879,5151],{"class":56},[39,20881,2359],{"class":45},[39,20883,20884],{"class":41,"line":118},[39,20885,3245],{"class":45},[39,20887,20888,20890,20892,20894,20896],{"class":41,"line":413},[39,20889,19575],{"class":3021},[39,20891,1221],{"class":45},[39,20893,1224],{"class":49},[39,20895,16745],{"class":254},[39,20897,13498],{"class":45},[39,20899,20900,20902,20904,20907,20909],{"class":41,"line":419},[39,20901,10725],{"class":45},[39,20903,2242],{"class":49},[39,20905,20906],{"class":1319}," \"有参构造函数!\"",[39,20908,2510],{"class":49},[39,20910,9896],{"class":45},[39,20912,20913,20915,20917],{"class":41,"line":425},[39,20914,20875],{"class":45},[39,20916,50],{"class":49},[39,20918,8853],{"class":45},[39,20920,20921],{"class":41,"line":443},[39,20922,3245],{"class":45},[39,20924,20925,20927,20929,20931,20933,20935,20937],{"class":41,"line":449},[39,20926,19575],{"class":3021},[39,20928,1221],{"class":45},[39,20930,7848],{"class":49},[39,20932,16625],{"class":3021},[39,20934,1557],{"class":49},[39,20936,7881],{"class":254},[39,20938,13498],{"class":45},[39,20940,20941,20943,20945,20948,20950],{"class":41,"line":455},[39,20942,10725],{"class":45},[39,20944,2242],{"class":49},[39,20946,20947],{"class":1319}," \"拷贝构造函数!\"",[39,20949,2510],{"class":49},[39,20951,9896],{"class":45},[39,20953,20954,20956,20958],{"class":41,"line":461},[39,20955,20875],{"class":45},[39,20957,50],{"class":49},[39,20959,20960],{"class":45}," p.mAge;\n",[39,20962,20963],{"class":41,"line":475},[39,20964,3245],{"class":45},[39,20966,20967],{"class":41,"line":665},[39,20968,20969],{"class":102},"    \u002F\u002F析构函数在释放内存之前调用\n",[39,20971,20972,20974],{"class":41,"line":671},[39,20973,19608],{"class":3021},[39,20975,11909],{"class":45},[39,20977,20978,20980,20982,20985,20987],{"class":41,"line":684},[39,20979,10725],{"class":45},[39,20981,2242],{"class":49},[39,20983,20984],{"class":1319}," \"析构函数!\"",[39,20986,2510],{"class":49},[39,20988,9896],{"class":45},[39,20990,20991],{"class":41,"line":2732},[39,20992,3245],{"class":45},[39,20994,20995],{"class":41,"line":2737},[39,20996,15772],{"class":49},[39,20998,20999,21001],{"class":41,"line":2751},[39,21000,3043],{"class":49},[39,21002,21003],{"class":45}," mAge;\n",[39,21005,21006],{"class":41,"line":2756},[39,21007,5053],{"class":45},[39,21009,21010],{"class":41,"line":2785},[39,21011,3458],{"emptyLinePlaceholder":1145},[39,21013,21014],{"class":41,"line":2790},[39,21015,21016],{"class":102},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[39,21018,21019,21021,21023],{"class":41,"line":2807},[39,21020,6420],{"class":49},[39,21022,6644],{"class":3021},[39,21024,11909],{"class":45},[39,21026,21027],{"class":41,"line":2812},[39,21028,3458],{"emptyLinePlaceholder":1145},[39,21030,21031,21033,21036,21038,21040,21042],{"class":41,"line":2817},[39,21032,20487],{"class":45},[39,21034,21035],{"class":3021},"man",[39,21037,1221],{"class":45},[39,21039,1519],{"class":56},[39,21041,7022],{"class":45},[39,21043,21044],{"class":102}," \u002F\u002Fp对象已经创建完毕\n",[39,21046,21047,21049,21052,21055],{"class":41,"line":2822},[39,21048,20487],{"class":45},[39,21050,21051],{"class":3021},"newman",[39,21053,21054],{"class":45},"(man);",[39,21056,21057],{"class":102}," \u002F\u002F调用拷贝构造函数\n",[39,21059,21060,21063,21065,21068],{"class":41,"line":2836},[39,21061,21062],{"class":45},"    Person newman2 ",[39,21064,50],{"class":49},[39,21066,21067],{"class":45}," man;",[39,21069,21070],{"class":102}," \u002F\u002F拷贝构造\n",[39,21072,21073],{"class":41,"line":2841},[39,21074,3458],{"emptyLinePlaceholder":1145},[39,21076,21077],{"class":41,"line":3635},[39,21078,21079],{"class":102},"    \u002F\u002FPerson newman3;\n",[39,21081,21082,21085],{"class":41,"line":3649},[39,21083,21084],{"class":102},"    \u002F\u002Fnewman3 = man;",[39,21086,21087],{"class":102}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[39,21089,21090],{"class":41,"line":3657},[39,21091,2630],{"class":45},[39,21093,21094],{"class":41,"line":3662},[39,21095,3458],{"emptyLinePlaceholder":1145},[39,21097,21098],{"class":41,"line":3668},[39,21099,21100],{"class":102},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[39,21102,21103],{"class":41,"line":3674},[39,21104,21105],{"class":102},"\u002F\u002F相当于Person p1 = p;\n",[39,21107,21108,21110,21112,21114,21116,21119],{"class":41,"line":3679},[39,21109,6420],{"class":49},[39,21111,20542],{"class":3021},[39,21113,1221],{"class":45},[39,21115,20102],{"class":3021},[39,21117,21118],{"class":254}," p1",[39,21120,21121],{"class":45},") {}\n",[39,21123,21124,21126,21128],{"class":41,"line":9004},[39,21125,6420],{"class":49},[39,21127,6713],{"class":3021},[39,21129,11909],{"class":45},[39,21131,21132,21134],{"class":41,"line":9028},[39,21133,19660],{"class":45},[39,21135,21136],{"class":102}," \u002F\u002F无参构造函数\n",[39,21138,21139,21141],{"class":41,"line":9033},[39,21140,20592],{"class":3021},[39,21142,20595],{"class":45},[39,21144,21145],{"class":41,"line":9039},[39,21146,2630],{"class":45},[39,21148,21149],{"class":41,"line":9066},[39,21150,3458],{"emptyLinePlaceholder":1145},[39,21152,21153],{"class":41,"line":9071},[39,21154,21155],{"class":102},"\u002F\u002F3. 以值方式返回局部对象\n",[39,21157,21158,21160,21162],{"class":41,"line":9077},[39,21159,20102],{"class":3021},[39,21161,20611],{"class":3021},[39,21163,3034],{"class":45},[39,21165,21166],{"class":41,"line":9089},[39,21167,2611],{"class":45},[39,21169,21170],{"class":41,"line":9101},[39,21171,20092],{"class":45},[39,21173,21174,21176,21178,21180,21182,21184,21186,21188,21191,21193],{"class":41,"line":9113},[39,21175,7585],{"class":45},[39,21177,2242],{"class":49},[39,21179,2716],{"class":45},[39,21181,1224],{"class":49},[39,21183,7574],{"class":49},[39,21185,1632],{"class":45},[39,21187,1557],{"class":49},[39,21189,21190],{"class":45},"p1 ",[39,21192,2242],{"class":49},[39,21194,9896],{"class":45},[39,21196,21197,21199],{"class":41,"line":10772},[39,21198,5148],{"class":49},[39,21200,21201],{"class":45}," p1;\n",[39,21203,21204],{"class":41,"line":10797},[39,21205,2630],{"class":45},[39,21207,21208],{"class":41,"line":10820},[39,21209,3458],{"emptyLinePlaceholder":1145},[39,21211,21212,21214,21216],{"class":41,"line":10844},[39,21213,6420],{"class":49},[39,21215,6785],{"class":3021},[39,21217,3034],{"class":45},[39,21219,21220],{"class":41,"line":10849},[39,21221,2611],{"class":45},[39,21223,21224,21226,21228,21230],{"class":41,"line":10854},[39,21225,20677],{"class":45},[39,21227,50],{"class":49},[39,21229,20611],{"class":3021},[39,21231,6692],{"class":45},[39,21233,21234,21236,21238,21240,21242,21244,21246,21248,21250,21252],{"class":41,"line":10859},[39,21235,7585],{"class":45},[39,21237,2242],{"class":49},[39,21239,2716],{"class":45},[39,21241,1224],{"class":49},[39,21243,7574],{"class":49},[39,21245,1632],{"class":45},[39,21247,1557],{"class":49},[39,21249,12504],{"class":45},[39,21251,2242],{"class":49},[39,21253,9896],{"class":45},[39,21255,21256],{"class":41,"line":10868},[39,21257,2630],{"class":45},[39,21259,21260],{"class":41,"line":10873},[39,21261,3458],{"emptyLinePlaceholder":1145},[39,21263,21264],{"class":41,"line":10879},[39,21265,3458],{"emptyLinePlaceholder":1145},[39,21267,21268,21270,21272],{"class":41,"line":10900},[39,21269,1224],{"class":49},[39,21271,3031],{"class":3021},[39,21273,11909],{"class":45},[39,21275,21276],{"class":41,"line":10906},[39,21277,3458],{"emptyLinePlaceholder":1145},[39,21279,21280],{"class":41,"line":10920},[39,21281,21282],{"class":102},"    \u002F\u002Ftest01();\n",[39,21284,21285],{"class":41,"line":10926},[39,21286,21287],{"class":102},"    \u002F\u002Ftest02();\n",[39,21289,21290,21292],{"class":41,"line":10953},[39,21291,20747],{"class":3021},[39,21293,6692],{"class":45},[39,21295,21296],{"class":41,"line":10962},[39,21297,3458],{"emptyLinePlaceholder":1145},[39,21299,21300,21302,21304,21306],{"class":41,"line":10968},[39,21301,3361],{"class":3021},[39,21303,1221],{"class":45},[39,21305,3366],{"class":1319},[39,21307,3777],{"class":45},[39,21309,21310],{"class":41,"line":10976},[39,21311,3458],{"emptyLinePlaceholder":1145},[39,21313,21314,21316,21318],{"class":41,"line":10981},[39,21315,5148],{"class":49},[39,21317,5151],{"class":56},[39,21319,2359],{"class":45},[39,21321,21322],{"class":41,"line":17660},[39,21323,2630],{"class":45},[1188,21325,21327],{"id":21326},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,21329,21330],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,21332,21333],{},"1．默认构造函数(无参，函数体为空)",[19,21335,21336],{},"2．默认析构函数(无参，函数体为空)",[19,21338,21339],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,21341,21342],{},"构造函数调用规则如下：",[2205,21344,21345,21348],{},[1174,21346,21347],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[1174,21349,21350],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[29,21352,21354],{"className":1209,"code":21353,"language":1211,"meta":34,"style":34},"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",[36,21355,21356,21364,21368,21373,21379,21391,21395,21400,21412,21421,21433,21437,21441,21457,21466,21478,21482,21486,21492,21504,21508,21512,21518,21522,21526,21534,21538,21550,21555,21563,21567,21585,21589,21593,21601,21605,21610,21618,21633,21646,21650,21655,21662,21678,21691,21695,21699,21707,21711,21717,21721,21731,21735,21743],{"__ignoreMap":34},[39,21357,21358,21360,21362],{"class":41,"line":42},[39,21359,15750],{"class":49},[39,21361,16625],{"class":3021},[39,21363,16628],{"class":45},[39,21365,21366],{"class":41,"line":74},[39,21367,15772],{"class":49},[39,21369,21370],{"class":41,"line":99},[39,21371,21372],{"class":102},"    \u002F\u002F无参（默认）构造函数\n",[39,21374,21375,21377],{"class":41,"line":106},[39,21376,19575],{"class":3021},[39,21378,11909],{"class":45},[39,21380,21381,21383,21385,21387,21389],{"class":41,"line":112},[39,21382,10725],{"class":45},[39,21384,2242],{"class":49},[39,21386,20866],{"class":1319},[39,21388,2510],{"class":49},[39,21390,9896],{"class":45},[39,21392,21393],{"class":41,"line":118},[39,21394,3245],{"class":45},[39,21396,21397],{"class":41,"line":413},[39,21398,21399],{"class":102},"    \u002F\u002F有参构造函数\n",[39,21401,21402,21404,21406,21408,21410],{"class":41,"line":419},[39,21403,19575],{"class":3021},[39,21405,1221],{"class":45},[39,21407,1224],{"class":49},[39,21409,2464],{"class":254},[39,21411,13498],{"class":45},[39,21413,21414,21417,21419],{"class":41,"line":425},[39,21415,21416],{"class":45},"        age ",[39,21418,50],{"class":49},[39,21420,2498],{"class":45},[39,21422,21423,21425,21427,21429,21431],{"class":41,"line":443},[39,21424,10725],{"class":45},[39,21426,2242],{"class":49},[39,21428,20906],{"class":1319},[39,21430,2510],{"class":49},[39,21432,9896],{"class":45},[39,21434,21435],{"class":41,"line":449},[39,21436,3245],{"class":45},[39,21438,21439],{"class":41,"line":455},[39,21440,19930],{"class":102},[39,21442,21443,21445,21447,21449,21451,21453,21455],{"class":41,"line":461},[39,21444,19575],{"class":3021},[39,21446,1221],{"class":45},[39,21448,7848],{"class":49},[39,21450,16625],{"class":3021},[39,21452,1557],{"class":49},[39,21454,7881],{"class":254},[39,21456,13498],{"class":45},[39,21458,21459,21461,21463],{"class":41,"line":475},[39,21460,21416],{"class":45},[39,21462,50],{"class":49},[39,21464,21465],{"class":45}," p.age;\n",[39,21467,21468,21470,21472,21474,21476],{"class":41,"line":665},[39,21469,10725],{"class":45},[39,21471,2242],{"class":49},[39,21473,20947],{"class":1319},[39,21475,2510],{"class":49},[39,21477,9896],{"class":45},[39,21479,21480],{"class":41,"line":671},[39,21481,3245],{"class":45},[39,21483,21484],{"class":41,"line":684},[39,21485,19603],{"class":102},[39,21487,21488,21490],{"class":41,"line":2732},[39,21489,19608],{"class":3021},[39,21491,11909],{"class":45},[39,21493,21494,21496,21498,21500,21502],{"class":41,"line":2737},[39,21495,10725],{"class":45},[39,21497,2242],{"class":49},[39,21499,20984],{"class":1319},[39,21501,2510],{"class":49},[39,21503,9896],{"class":45},[39,21505,21506],{"class":41,"line":2751},[39,21507,3245],{"class":45},[39,21509,21510],{"class":41,"line":2756},[39,21511,15772],{"class":49},[39,21513,21514,21516],{"class":41,"line":2785},[39,21515,3043],{"class":49},[39,21517,8853],{"class":45},[39,21519,21520],{"class":41,"line":2790},[39,21521,5053],{"class":45},[39,21523,21524],{"class":41,"line":2807},[39,21525,3458],{"emptyLinePlaceholder":1145},[39,21527,21528,21530,21532],{"class":41,"line":2812},[39,21529,6420],{"class":49},[39,21531,6644],{"class":3021},[39,21533,3034],{"class":45},[39,21535,21536],{"class":41,"line":2817},[39,21537,2611],{"class":45},[39,21539,21540,21542,21544,21546,21548],{"class":41,"line":2822},[39,21541,20487],{"class":45},[39,21543,8186],{"class":3021},[39,21545,1221],{"class":45},[39,21547,1849],{"class":56},[39,21549,3777],{"class":45},[39,21551,21552],{"class":41,"line":2836},[39,21553,21554],{"class":102},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[39,21556,21557,21559,21561],{"class":41,"line":2841},[39,21558,20487],{"class":45},[39,21560,8089],{"class":3021},[39,21562,18571],{"class":45},[39,21564,21565],{"class":41,"line":3635},[39,21566,3458],{"emptyLinePlaceholder":1145},[39,21568,21569,21571,21573,21576,21578,21581,21583],{"class":41,"line":3649},[39,21570,7585],{"class":45},[39,21572,2242],{"class":49},[39,21574,21575],{"class":1319}," \"p2的年龄为： \"",[39,21577,2510],{"class":49},[39,21579,21580],{"class":45}," p2.age ",[39,21582,2242],{"class":49},[39,21584,9896],{"class":45},[39,21586,21587],{"class":41,"line":3657},[39,21588,2630],{"class":45},[39,21590,21591],{"class":41,"line":3662},[39,21592,3458],{"emptyLinePlaceholder":1145},[39,21594,21595,21597,21599],{"class":41,"line":3668},[39,21596,6420],{"class":49},[39,21598,6713],{"class":3021},[39,21600,3034],{"class":45},[39,21602,21603],{"class":41,"line":3674},[39,21604,2611],{"class":45},[39,21606,21607],{"class":41,"line":3679},[39,21608,21609],{"class":102},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[39,21611,21612,21615],{"class":41,"line":9004},[39,21613,21614],{"class":45},"    Person p1;",[39,21616,21617],{"class":102}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[39,21619,21620,21622,21624,21626,21628,21630],{"class":41,"line":9028},[39,21621,20487],{"class":45},[39,21623,8089],{"class":3021},[39,21625,1221],{"class":45},[39,21627,146],{"class":56},[39,21629,7022],{"class":45},[39,21631,21632],{"class":102}," \u002F\u002F用户提供的有参\n",[39,21634,21635,21637,21640,21643],{"class":41,"line":9033},[39,21636,20487],{"class":45},[39,21638,21639],{"class":3021},"p3",[39,21641,21642],{"class":45},"(p2);",[39,21644,21645],{"class":102}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[39,21647,21648],{"class":41,"line":9039},[39,21649,3458],{"emptyLinePlaceholder":1145},[39,21651,21652],{"class":41,"line":9066},[39,21653,21654],{"class":102},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[39,21656,21657,21660],{"class":41,"line":9071},[39,21658,21659],{"class":45},"    Person p4;",[39,21661,21617],{"class":102},[39,21663,21664,21666,21669,21671,21673,21675],{"class":41,"line":9077},[39,21665,20487],{"class":45},[39,21667,21668],{"class":3021},"p5",[39,21670,1221],{"class":45},[39,21672,146],{"class":56},[39,21674,7022],{"class":45},[39,21676,21677],{"class":102}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[39,21679,21680,21682,21685,21688],{"class":41,"line":9089},[39,21681,20487],{"class":45},[39,21683,21684],{"class":3021},"p6",[39,21686,21687],{"class":45},"(p5);",[39,21689,21690],{"class":102}," \u002F\u002F用户自己提供拷贝构造\n",[39,21692,21693],{"class":41,"line":9101},[39,21694,2630],{"class":45},[39,21696,21697],{"class":41,"line":9113},[39,21698,3458],{"emptyLinePlaceholder":1145},[39,21700,21701,21703,21705],{"class":41,"line":10772},[39,21702,1224],{"class":49},[39,21704,3031],{"class":3021},[39,21706,11909],{"class":45},[39,21708,21709],{"class":41,"line":10797},[39,21710,3458],{"emptyLinePlaceholder":1145},[39,21712,21713,21715],{"class":41,"line":10820},[39,21714,6689],{"class":3021},[39,21716,6692],{"class":45},[39,21718,21719],{"class":41,"line":10844},[39,21720,3458],{"emptyLinePlaceholder":1145},[39,21722,21723,21725,21727,21729],{"class":41,"line":10849},[39,21724,3361],{"class":3021},[39,21726,1221],{"class":45},[39,21728,3366],{"class":1319},[39,21730,3777],{"class":45},[39,21732,21733],{"class":41,"line":10854},[39,21734,3458],{"emptyLinePlaceholder":1145},[39,21736,21737,21739,21741],{"class":41,"line":10859},[39,21738,5148],{"class":49},[39,21740,5151],{"class":56},[39,21742,2359],{"class":45},[39,21744,21745],{"class":41,"line":10868},[39,21746,2630],{"class":45},[1188,21748,21750],{"id":21749},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,21752,21753],{},"浅拷贝：简单的赋值拷贝操作",[19,21755,21756],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[29,21758,21760],{"className":1209,"code":21759,"language":1211,"meta":34,"style":34},"#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",[36,21761,21762,21768,21778,21784,21788,21792,21797,21803,21807,21820,21824,21828,21835,21839,21849,21864,21877,21881,21886,21891,21907,21911,21924,21929,21934,21939,21948,21953,21968,21972,21976,21980,21986,21990,21995,22010,22014,22025,22039,22043,22052,22056,22062,22074,22078,22086,22090,22107,22138,22146,22174,22178,22182,22190,22194,22200],{"__ignoreMap":34},[39,21763,21764,21766],{"class":41,"line":42},[39,21765,3007],{"class":49},[39,21767,3010],{"class":1319},[39,21769,21770,21772,21774,21776],{"class":41,"line":74},[39,21771,3015],{"class":49},[39,21773,3018],{"class":49},[39,21775,3022],{"class":3021},[39,21777,2359],{"class":45},[39,21779,21780,21782],{"class":41,"line":99},[39,21781,15750],{"class":49},[39,21783,16227],{"class":3021},[39,21785,21786],{"class":41,"line":106},[39,21787,2611],{"class":45},[39,21789,21790],{"class":41,"line":112},[39,21791,15772],{"class":49},[39,21793,21794],{"class":41,"line":118},[39,21795,21796],{"class":102},"    \u002F\u002F默认构造函数\n",[39,21798,21799,21801],{"class":41,"line":413},[39,21800,19575],{"class":3021},[39,21802,3034],{"class":45},[39,21804,21805],{"class":41,"line":419},[39,21806,3088],{"class":45},[39,21808,21809,21811,21813,21816,21818],{"class":41,"line":425},[39,21810,4509],{"class":45},[39,21812,2242],{"class":49},[39,21814,21815],{"class":1319},"\"默认构造函数\"",[39,21817,2242],{"class":49},[39,21819,2264],{"class":45},[39,21821,21822],{"class":41,"line":443},[39,21823,3245],{"class":45},[39,21825,21826],{"class":41,"line":449},[39,21827,21399],{"class":102},[39,21829,21830,21832],{"class":41,"line":455},[39,21831,19608],{"class":3021},[39,21833,21834],{"class":45},"(int age,int height)\n",[39,21836,21837],{"class":41,"line":461},[39,21838,3088],{"class":45},[39,21840,21841,21844,21846],{"class":41,"line":475},[39,21842,21843],{"class":45},"        m_Age",[39,21845,50],{"class":49},[39,21847,21848],{"class":45},"age;\n",[39,21850,21851,21854,21856,21858,21861],{"class":41,"line":665},[39,21852,21853],{"class":45},"        m_Height",[39,21855,12773],{"class":49},[39,21857,3440],{"class":49},[39,21859,21860],{"class":45},"(height);",[39,21862,21863],{"class":102},"\u002F\u002F放到堆区\n",[39,21865,21866,21868,21870,21873,21875],{"class":41,"line":671},[39,21867,4509],{"class":45},[39,21869,2242],{"class":49},[39,21871,21872],{"class":1319},"\"有参构造函数\"",[39,21874,2242],{"class":49},[39,21876,2264],{"class":45},[39,21878,21879],{"class":41,"line":684},[39,21880,3245],{"class":45},[39,21882,21883],{"class":41,"line":2732},[39,21884,21885],{"class":102},"    \u002F\u002F深拷贝解决上述问题\n",[39,21887,21888],{"class":41,"line":2737},[39,21889,21890],{"class":102},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[39,21892,21893,21895,21897,21899,21901,21903,21905],{"class":41,"line":2751},[39,21894,19575],{"class":3021},[39,21896,1221],{"class":45},[39,21898,7848],{"class":49},[39,21900,16625],{"class":3021},[39,21902,11640],{"class":49},[39,21904,19],{"class":254},[39,21906,209],{"class":45},[39,21908,21909],{"class":41,"line":2756},[39,21910,3088],{"class":45},[39,21912,21913,21915,21917,21920,21922],{"class":41,"line":2785},[39,21914,4509],{"class":45},[39,21916,2242],{"class":49},[39,21918,21919],{"class":1319},"\"拷贝构造函数\"",[39,21921,2242],{"class":49},[39,21923,2264],{"class":45},[39,21925,21926],{"class":41,"line":2790},[39,21927,21928],{"class":102},"        \u002F\u002F编译器默认的写如下注释部分\n",[39,21930,21931],{"class":41,"line":2807},[39,21932,21933],{"class":102},"        \u002F\u002Fm_Age=p.m_Age;\n",[39,21935,21936],{"class":41,"line":2812},[39,21937,21938],{"class":102},"        \u002F\u002Fm_Height=p.m_Height;\n",[39,21940,21941,21943,21945],{"class":41,"line":2817},[39,21942,21843],{"class":45},[39,21944,50],{"class":49},[39,21946,21947],{"class":45},"p.m_Age;\n",[39,21949,21950],{"class":41,"line":2822},[39,21951,21952],{"class":102},"        \u002F\u002F深拷贝操作\n",[39,21954,21955,21957,21959,21961,21963,21965],{"class":41,"line":2836},[39,21956,21853],{"class":45},[39,21958,12773],{"class":49},[39,21960,3440],{"class":49},[39,21962,1221],{"class":45},[39,21964,1657],{"class":49},[39,21966,21967],{"class":45},"p.m_Height);\n",[39,21969,21970],{"class":41,"line":2841},[39,21971,3245],{"class":45},[39,21973,21974],{"class":41,"line":3635},[39,21975,3458],{"emptyLinePlaceholder":1145},[39,21977,21978],{"class":41,"line":3649},[39,21979,19603],{"class":102},[39,21981,21982,21984],{"class":41,"line":3657},[39,21983,19608],{"class":3021},[39,21985,3034],{"class":45},[39,21987,21988],{"class":41,"line":3662},[39,21989,3088],{"class":45},[39,21991,21992],{"class":41,"line":3668},[39,21993,21994],{"class":102},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[39,21996,21997,21999,22002,22005,22008],{"class":41,"line":3674},[39,21998,3555],{"class":49},[39,22000,22001],{"class":45},"(m_Height ",[39,22003,22004],{"class":49},"!=",[39,22006,22007],{"class":56}," NULL",[39,22009,209],{"class":45},[39,22011,22012],{"class":41,"line":3679},[39,22013,3568],{"class":45},[39,22015,22016,22019,22022],{"class":41,"line":9004},[39,22017,22018],{"class":49},"            delete",[39,22020,22021],{"class":45}," m_Height;",[39,22023,22024],{"class":102}," \u002F\u002F释放堆区内存\n",[39,22026,22027,22030,22032,22034,22036],{"class":41,"line":9028},[39,22028,22029],{"class":45},"            m_Height",[39,22031,50],{"class":49},[39,22033,3450],{"class":56},[39,22035,1273],{"class":45},[39,22037,22038],{"class":102}," \u002F\u002F防止野指针\n",[39,22040,22041],{"class":41,"line":9033},[39,22042,3587],{"class":45},[39,22044,22045,22047,22049],{"class":41,"line":9039},[39,22046,4509],{"class":45},[39,22048,2242],{"class":49},[39,22050,22051],{"class":1319},"\"Person的析构函数调用\"\n",[39,22053,22054],{"class":41,"line":9066},[39,22055,3245],{"class":45},[39,22057,22058,22060],{"class":41,"line":9071},[39,22059,3043],{"class":49},[39,22061,16722],{"class":45},[39,22063,22064,22066,22068,22071],{"class":41,"line":9077},[39,22065,3043],{"class":49},[39,22067,7574],{"class":49},[39,22069,22070],{"class":45},"m_Height;",[39,22072,22073],{"class":102}," \u002F\u002F定义一个指针，指向身高\n",[39,22075,22076],{"class":41,"line":9089},[39,22077,5053],{"class":45},[39,22079,22080,22082,22084],{"class":41,"line":9101},[39,22081,6420],{"class":49},[39,22083,6644],{"class":3021},[39,22085,3034],{"class":45},[39,22087,22088],{"class":41,"line":9113},[39,22089,2611],{"class":45},[39,22091,22092,22094,22096,22098,22100,22102,22105],{"class":41,"line":10772},[39,22093,20487],{"class":45},[39,22095,8186],{"class":3021},[39,22097,1221],{"class":45},[39,22099,1849],{"class":56},[39,22101,60],{"class":45},[39,22103,22104],{"class":56},"160",[39,22106,3777],{"class":45},[39,22108,22109,22111,22113,22116,22118,22121,22123,22126,22128,22131,22133,22135],{"class":41,"line":10797},[39,22110,2616],{"class":45},[39,22112,2242],{"class":49},[39,22114,22115],{"class":1319},"\"p1的年龄为:\"",[39,22117,2242],{"class":49},[39,22119,22120],{"class":45},"p1.m_Age",[39,22122,2242],{"class":49},[39,22124,22125],{"class":1319},"\"身高为：\"",[39,22127,7475],{"class":49},[39,22129,22130],{"class":45},"p1.m_Height",[39,22132,2242],{"class":49},[39,22134,2307],{"class":45},[39,22136,22137],{"class":102},"  \u002F\u002F18\n",[39,22139,22140,22142,22144],{"class":41,"line":10820},[39,22141,20487],{"class":45},[39,22143,8089],{"class":3021},[39,22145,18571],{"class":45},[39,22147,22148,22150,22152,22155,22157,22159,22161,22163,22165,22168,22170,22172],{"class":41,"line":10844},[39,22149,2616],{"class":45},[39,22151,2242],{"class":49},[39,22153,22154],{"class":1319},"\"p2的年龄为：\"",[39,22156,2242],{"class":49},[39,22158,20517],{"class":45},[39,22160,2242],{"class":49},[39,22162,22125],{"class":1319},[39,22164,7475],{"class":49},[39,22166,22167],{"class":45},"p2.m_Height",[39,22169,2242],{"class":49},[39,22171,2307],{"class":45},[39,22173,22137],{"class":102},[39,22175,22176],{"class":41,"line":10849},[39,22177,14266],{"class":45},[39,22179,22180],{"class":41,"line":10854},[39,22181,2630],{"class":45},[39,22183,22184,22186,22188],{"class":41,"line":10859},[39,22185,1224],{"class":49},[39,22187,3031],{"class":3021},[39,22189,3034],{"class":45},[39,22191,22192],{"class":41,"line":10868},[39,22193,2611],{"class":45},[39,22195,22196,22198],{"class":41,"line":10873},[39,22197,6689],{"class":3021},[39,22199,6692],{"class":45},[39,22201,22202],{"class":41,"line":10879},[39,22203,2630],{"class":45},[19,22205,22206],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,22208,22209],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,22211,22212],{},[269,22213],{"alt":34,"src":22214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,22216,22217],{},"浅拷贝问题要使用深拷贝来解决",[19,22219,22220],{},[269,22221],{"alt":34,"src":22222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,22224,22225],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[1188,22227,22229],{"id":22228},"_826初始化列表","8.2.6初始化列表",[19,22231,22232],{},"作用：初始化属性",[19,22234,6238],{},[29,22236,22239],{"className":22237,"code":22238,"language":6244},[6242],"构造函数():属性1(值1),属性2(值2).....{}\n",[36,22240,22238],{"__ignoreMap":34},[19,22242,22243],{},"例子",[29,22245,22247],{"className":1209,"code":22246,"language":1211,"meta":34,"style":34},"#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",[36,22248,22249,22255,22265,22271,22275,22280,22284,22289,22294,22299,22304,22309,22314,22318,22323,22328,22371,22380,22398,22416,22434,22438,22442,22449,22456,22463,22467,22471,22479,22483,22487,22507,22516,22520,22524,22534,22538,22546],{"__ignoreMap":34},[39,22250,22251,22253],{"class":41,"line":42},[39,22252,3007],{"class":49},[39,22254,3010],{"class":1319},[39,22256,22257,22259,22261,22263],{"class":41,"line":74},[39,22258,3015],{"class":49},[39,22260,3018],{"class":49},[39,22262,3022],{"class":3021},[39,22264,2359],{"class":45},[39,22266,22267,22269],{"class":41,"line":99},[39,22268,15750],{"class":49},[39,22270,16227],{"class":3021},[39,22272,22273],{"class":41,"line":106},[39,22274,2611],{"class":45},[39,22276,22277],{"class":41,"line":112},[39,22278,22279],{"class":49},"    public:\n",[39,22281,22282],{"class":41,"line":118},[39,22283,3458],{"emptyLinePlaceholder":1145},[39,22285,22286],{"class":41,"line":413},[39,22287,22288],{"class":102},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[39,22290,22291],{"class":41,"line":419},[39,22292,22293],{"class":102},"    \u002F\u002FPerson(int a, int b, int c) {\n",[39,22295,22296],{"class":41,"line":425},[39,22297,22298],{"class":102},"    \u002F\u002F  m_A = a;\n",[39,22300,22301],{"class":41,"line":443},[39,22302,22303],{"class":102},"    \u002F\u002F  m_B = b;\n",[39,22305,22306],{"class":41,"line":449},[39,22307,22308],{"class":102},"    \u002F\u002F  m_C = c;\n",[39,22310,22311],{"class":41,"line":455},[39,22312,22313],{"class":102},"    \u002F\u002F}\n",[39,22315,22316],{"class":41,"line":461},[39,22317,3458],{"emptyLinePlaceholder":1145},[39,22319,22320],{"class":41,"line":475},[39,22321,22322],{"class":102},"    \u002F\u002F初始化列表方式初始化\n",[39,22324,22325],{"class":41,"line":665},[39,22326,22327],{"class":102},"    \u002F\u002F使用有参构造函数\n",[39,22329,22330,22332,22334,22336,22338,22340,22342,22344,22346,22348,22350,22353,22356,22359,22362,22365,22368],{"class":41,"line":671},[39,22331,19575],{"class":3021},[39,22333,1221],{"class":45},[39,22335,1224],{"class":49},[39,22337,2464],{"class":254},[39,22339,13491],{"class":45},[39,22341,1224],{"class":49},[39,22343,3891],{"class":254},[39,22345,13491],{"class":45},[39,22347,1224],{"class":49},[39,22349,3907],{"class":254},[39,22351,22352],{"class":45},") :",[39,22354,22355],{"class":3021},"m_A",[39,22357,22358],{"class":45},"(a), ",[39,22360,22361],{"class":3021},"m_B",[39,22363,22364],{"class":45},"(b), ",[39,22366,22367],{"class":3021},"m_C",[39,22369,22370],{"class":45},"(c) {}\n",[39,22372,22373,22375,22378],{"class":41,"line":684},[39,22374,15965],{"class":49},[39,22376,22377],{"class":3021}," PrintPerson",[39,22379,11909],{"class":45},[39,22381,22382,22384,22386,22389,22391,22394,22396],{"class":41,"line":2732},[39,22383,10725],{"class":45},[39,22385,2242],{"class":49},[39,22387,22388],{"class":1319}," \"mA:\"",[39,22390,2510],{"class":49},[39,22392,22393],{"class":45}," m_A ",[39,22395,2242],{"class":49},[39,22397,9896],{"class":45},[39,22399,22400,22402,22404,22407,22409,22412,22414],{"class":41,"line":2737},[39,22401,10725],{"class":45},[39,22403,2242],{"class":49},[39,22405,22406],{"class":1319}," \"mB:\"",[39,22408,2510],{"class":49},[39,22410,22411],{"class":45}," m_B ",[39,22413,2242],{"class":49},[39,22415,9896],{"class":45},[39,22417,22418,22420,22422,22425,22427,22430,22432],{"class":41,"line":2751},[39,22419,10725],{"class":45},[39,22421,2242],{"class":49},[39,22423,22424],{"class":1319}," \"mC:\"",[39,22426,2510],{"class":49},[39,22428,22429],{"class":45}," m_C ",[39,22431,2242],{"class":49},[39,22433,9896],{"class":45},[39,22435,22436],{"class":41,"line":2756},[39,22437,3245],{"class":45},[39,22439,22440],{"class":41,"line":2785},[39,22441,16278],{"class":49},[39,22443,22444,22446],{"class":41,"line":2790},[39,22445,3043],{"class":49},[39,22447,22448],{"class":45}," m_A;\n",[39,22450,22451,22453],{"class":41,"line":2807},[39,22452,3043],{"class":49},[39,22454,22455],{"class":45}," m_B;\n",[39,22457,22458,22460],{"class":41,"line":2812},[39,22459,3043],{"class":49},[39,22461,22462],{"class":45}," m_C;\n",[39,22464,22465],{"class":41,"line":2817},[39,22466,5053],{"class":45},[39,22468,22469],{"class":41,"line":2822},[39,22470,3458],{"emptyLinePlaceholder":1145},[39,22472,22473,22475,22477],{"class":41,"line":2836},[39,22474,1224],{"class":49},[39,22476,3031],{"class":3021},[39,22478,7034],{"class":45},[39,22480,22481],{"class":41,"line":2841},[39,22482,2611],{"class":45},[39,22484,22485],{"class":41,"line":3635},[39,22486,3458],{"emptyLinePlaceholder":1145},[39,22488,22489,22491,22493,22495,22497,22499,22501,22503,22505],{"class":41,"line":3649},[39,22490,20487],{"class":45},[39,22492,19],{"class":3021},[39,22494,1221],{"class":45},[39,22496,57],{"class":56},[39,22498,13491],{"class":45},[39,22500,63],{"class":56},[39,22502,13491],{"class":45},[39,22504,68],{"class":56},[39,22506,3777],{"class":45},[39,22508,22509,22511,22514],{"class":41,"line":3657},[39,22510,16922],{"class":45},[39,22512,22513],{"class":3021},"PrintPerson",[39,22515,6692],{"class":45},[39,22517,22518],{"class":41,"line":3662},[39,22519,3458],{"emptyLinePlaceholder":1145},[39,22521,22522],{"class":41,"line":3668},[39,22523,3458],{"emptyLinePlaceholder":1145},[39,22525,22526,22528,22530,22532],{"class":41,"line":3674},[39,22527,3361],{"class":3021},[39,22529,1221],{"class":45},[39,22531,3366],{"class":1319},[39,22533,3777],{"class":45},[39,22535,22536],{"class":41,"line":3679},[39,22537,3458],{"emptyLinePlaceholder":1145},[39,22539,22540,22542,22544],{"class":41,"line":9004},[39,22541,5148],{"class":49},[39,22543,5151],{"class":56},[39,22545,2359],{"class":45},[39,22547,22548],{"class":41,"line":9028},[39,22549,2630],{"class":45},[19,22551,22552,22553,22556,22557],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[304,22554,22555],{},"参数名就是定义的对象属性","，",[304,22558,22559],{},"属性后面的值为有参构造函数的形参",[29,22561,22563],{"className":1209,"code":22562,"language":1211,"meta":34,"style":34},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[36,22564,22565],{"__ignoreMap":34},[39,22566,22567,22569,22571,22573,22576,22578,22581,22583,22586,22588,22591,22593,22596,22598],{"class":41,"line":42},[39,22568,20102],{"class":3021},[39,22570,1221],{"class":45},[39,22572,1224],{"class":49},[39,22574,22575],{"class":45}," a.",[39,22577,1224],{"class":49},[39,22579,22580],{"class":45}," b,",[39,22582,1224],{"class":49},[39,22584,22585],{"class":45}," b):",[39,22587,22355],{"class":3021},[39,22589,22590],{"class":45},"(a),",[39,22592,22361],{"class":3021},[39,22594,22595],{"class":45},"(c),",[39,22597,22367],{"class":3021},[39,22599,22600],{"class":45},"(b) {}\n",[1188,22602,22604],{"id":22603},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,22606,22607],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,22609,15689],{},[29,22611,22613],{"className":1209,"code":22612,"language":1211,"meta":34,"style":34},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[36,22614,22615,22620,22625,22629,22634,22638],{"__ignoreMap":34},[39,22616,22617],{"class":41,"line":42},[39,22618,22619],{"class":45},"A{};\n",[39,22621,22622],{"class":41,"line":74},[39,22623,22624],{"class":45},"B\n",[39,22626,22627],{"class":41,"line":99},[39,22628,2611],{"class":45},[39,22630,22631],{"class":41,"line":106},[39,22632,22633],{"class":45},"    A a;\n",[39,22635,22636],{"class":41,"line":112},[39,22637,2630],{"class":45},[39,22639,22640],{"class":41,"line":118},[39,22641,22642],{"class":102},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,22644,22645],{},"案例",[29,22647,22649],{"className":1209,"code":22648,"language":1211,"meta":34,"style":34},"\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",[36,22650,22651,22656,22663,22667,22672,22677,22691,22695,22705,22716,22720,22727,22731,22744,22748,22753,22758,22762,22768,22772,22776,22780,22811,22815,22826,22830,22836,22840,22853,22857,22861,22865,22870,22875,22879,22887,22891,22908,22927,22931,22939,22943,22949],{"__ignoreMap":34},[39,22652,22653],{"class":41,"line":42},[39,22654,22655],{"class":102},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[39,22657,22658,22660],{"class":41,"line":74},[39,22659,15750],{"class":49},[39,22661,22662],{"class":3021}," Phone\n",[39,22664,22665],{"class":41,"line":99},[39,22666,2611],{"class":45},[39,22668,22669],{"class":41,"line":106},[39,22670,22671],{"class":45},"public：\n",[39,22673,22674],{"class":41,"line":112},[39,22675,22676],{"class":102},"    \u002F\u002F 赋值(构造函数)\n",[39,22678,22679,22682,22684,22686,22689],{"class":41,"line":118},[39,22680,22681],{"class":3021},"    Phone",[39,22683,1221],{"class":45},[39,22685,15973],{"class":3021},[39,22687,22688],{"class":254}," pName",[39,22690,209],{"class":45},[39,22692,22693],{"class":41,"line":413},[39,22694,3088],{"class":45},[39,22696,22697,22700,22702],{"class":41,"line":419},[39,22698,22699],{"class":45},"        m_pName",[39,22701,50],{"class":49},[39,22703,22704],{"class":45},"pName;\n",[39,22706,22707,22709,22711,22714],{"class":41,"line":425},[39,22708,4509],{"class":45},[39,22710,2242],{"class":49},[39,22712,22713],{"class":1319},"\"Phone的构造函数调用\"",[39,22715,2359],{"class":45},[39,22717,22718],{"class":41,"line":443},[39,22719,3245],{"class":45},[39,22721,22722,22725],{"class":41,"line":449},[39,22723,22724],{"class":3021},"    ~Phone",[39,22726,3034],{"class":45},[39,22728,22729],{"class":41,"line":455},[39,22730,3088],{"class":45},[39,22732,22733,22735,22737,22740,22742],{"class":41,"line":461},[39,22734,4509],{"class":45},[39,22736,2242],{"class":49},[39,22738,22739],{"class":1319},"\"Phone析构函数调用\"",[39,22741,2242],{"class":49},[39,22743,2264],{"class":45},[39,22745,22746],{"class":41,"line":475},[39,22747,3245],{"class":45},[39,22749,22750],{"class":41,"line":665},[39,22751,22752],{"class":102},"    \u002F\u002F\n",[39,22754,22755],{"class":41,"line":671},[39,22756,22757],{"class":45},"    string m_PName;\n",[39,22759,22760],{"class":41,"line":684},[39,22761,5053],{"class":45},[39,22763,22764,22766],{"class":41,"line":2732},[39,22765,15750],{"class":49},[39,22767,16227],{"class":3021},[39,22769,22770],{"class":41,"line":2737},[39,22771,2611],{"class":45},[39,22773,22774],{"class":41,"line":2751},[39,22775,15772],{"class":49},[39,22777,22778],{"class":41,"line":2756},[39,22779,18050],{"class":102},[39,22781,22782,22784,22786,22788,22790,22792,22794,22797,22800,22802,22805,22808],{"class":41,"line":2785},[39,22783,19575],{"class":3021},[39,22785,1221],{"class":45},[39,22787,15973],{"class":3021},[39,22789,15976],{"class":254},[39,22791,60],{"class":45},[39,22793,15973],{"class":3021},[39,22795,22796],{"class":254}," pname",[39,22798,22799],{"class":45},"):",[39,22801,16066],{"class":3021},[39,22803,22804],{"class":45},"(name),m_phone.",[39,22806,22807],{"class":3021},"m_PName",[39,22809,22810],{"class":45},"(pname) \n",[39,22812,22813],{"class":41,"line":2790},[39,22814,3088],{"class":45},[39,22816,22817,22819,22821,22824],{"class":41,"line":2807},[39,22818,4509],{"class":45},[39,22820,2242],{"class":49},[39,22822,22823],{"class":1319},"\"Person的构造函数调用\"",[39,22825,2359],{"class":45},[39,22827,22828],{"class":41,"line":2812},[39,22829,3245],{"class":45},[39,22831,22832,22834],{"class":41,"line":2817},[39,22833,19608],{"class":3021},[39,22835,3034],{"class":45},[39,22837,22838],{"class":41,"line":2822},[39,22839,3088],{"class":45},[39,22841,22842,22844,22846,22849,22851],{"class":41,"line":2836},[39,22843,4509],{"class":45},[39,22845,2242],{"class":49},[39,22847,22848],{"class":1319},"\"Person析构函数调用\"",[39,22850,2242],{"class":49},[39,22852,2264],{"class":45},[39,22854,22855],{"class":41,"line":2841},[39,22856,3245],{"class":45},[39,22858,22859],{"class":41,"line":3635},[39,22860,8836],{"class":102},[39,22862,22863],{"class":41,"line":3649},[39,22864,15948],{"class":45},[39,22866,22867],{"class":41,"line":3657},[39,22868,22869],{"class":102},"    \u002F\u002F手机\n",[39,22871,22872],{"class":41,"line":3662},[39,22873,22874],{"class":45},"    Phone m_Phone;\n",[39,22876,22877],{"class":41,"line":3668},[39,22878,5053],{"class":45},[39,22880,22881,22883,22885],{"class":41,"line":3674},[39,22882,6420],{"class":49},[39,22884,6644],{"class":3021},[39,22886,3034],{"class":45},[39,22888,22889],{"class":41,"line":3679},[39,22890,2611],{"class":45},[39,22892,22893,22895,22897,22899,22901,22903,22906],{"class":41,"line":9004},[39,22894,20487],{"class":45},[39,22896,19],{"class":3021},[39,22898,1221],{"class":45},[39,22900,8972],{"class":1319},[39,22902,60],{"class":45},[39,22904,22905],{"class":1319},"\"安卓\"",[39,22907,3777],{"class":45},[39,22909,22910,22912,22914,22917,22919,22922,22924],{"class":41,"line":9028},[39,22911,2616],{"class":45},[39,22913,2242],{"class":49},[39,22915,22916],{"class":45},"p.Name",[39,22918,2242],{"class":49},[39,22920,22921],{"class":1319},"\"拿着：\"",[39,22923,2242],{"class":49},[39,22925,22926],{"class":45},"p.m_phone.m_PName;\n",[39,22928,22929],{"class":41,"line":9033},[39,22930,2630],{"class":45},[39,22932,22933,22935,22937],{"class":41,"line":9039},[39,22934,1224],{"class":49},[39,22936,3031],{"class":3021},[39,22938,3034],{"class":45},[39,22940,22941],{"class":41,"line":9066},[39,22942,2611],{"class":45},[39,22944,22945,22947],{"class":41,"line":9071},[39,22946,6689],{"class":3021},[39,22948,6692],{"class":45},[39,22950,22951],{"class":41,"line":9077},[39,22952,2630],{"class":45},[19,22954,10081],{},[29,22956,22958],{"className":1209,"code":22957,"language":1211,"meta":34,"style":34},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[36,22959,22960,22965],{"__ignoreMap":34},[39,22961,22962],{"class":41,"line":42},[39,22963,22964],{"class":102},"    \u002F\u002F不需要写这个：\n",[39,22966,22967],{"class":41,"line":74},[39,22968,22969],{"class":102},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22971,22972],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[29,22974,22976],{"className":1209,"code":22975,"language":1211,"meta":34,"style":34},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[36,22977,22978],{"__ignoreMap":34},[39,22979,22980,22982,22985,22987,22990,22993],{"class":41,"line":42},[39,22981,20102],{"class":3021},[39,22983,22984],{"class":45},"(string name.string pname):",[39,22986,16066],{"class":3021},[39,22988,22989],{"class":45},"(name),",[39,22991,22992],{"class":3021},"m_phone",[39,22994,22995],{"class":45},"(pname) {}\n",[19,22997,22998,22999,50,23002],{},"采用的是隐式转换法，实际为如下：\n",[36,23000,23001],{},"m_phone(pname)",[36,23003,23004],{},"Phone m_phone=pname",[19,23006,23007,23010],{},[304,23008,23009],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23012,23013],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[1188,23015,23017],{"id":23016},"_828静态对象","8.2.8静态对象",[19,23019,23020],{},"静态对象在成员对象前static，称为静态对象",[19,23022,23023],{},"静态对象分为两类：",[1171,23025,23026],{},[1174,23027,23028],{},"静态成员变量",[2205,23030,23031,23034,23037],{},[1174,23032,23033],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[1174,23035,23036],{},"②在编译阶段分配内存",[1174,23038,23039],{},"③类内声明，类外初始化",[1171,23041,23042],{"start":74},[1174,23043,23044],{},"静态成员函数",[2205,23046,23047,23050],{},[1174,23048,23049],{},"①所有对象共享同一个函数",[1174,23051,23052],{},"②静态成员函数只能访问静态成员变量",[23054,23055,23057],"h4",{"id":23056},"_8281静态成员变量","8.2.8.1静态成员变量",[29,23059,23061],{"className":1209,"code":23060,"language":1211,"meta":34,"style":34},"#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",[36,23062,23063,23069,23079,23085,23089,23093,23098,23103,23108,23116,23120,23124,23128,23136,23140,23144,23149,23162,23166,23174,23178,23184],{"__ignoreMap":34},[39,23064,23065,23067],{"class":41,"line":42},[39,23066,3007],{"class":49},[39,23068,3010],{"class":1319},[39,23070,23071,23073,23075,23077],{"class":41,"line":74},[39,23072,3015],{"class":49},[39,23074,3018],{"class":49},[39,23076,3022],{"class":3021},[39,23078,2359],{"class":45},[39,23080,23081,23083],{"class":41,"line":99},[39,23082,15750],{"class":49},[39,23084,16227],{"class":3021},[39,23086,23087],{"class":41,"line":106},[39,23088,2611],{"class":45},[39,23090,23091],{"class":41,"line":112},[39,23092,15772],{"class":49},[39,23094,23095],{"class":41,"line":118},[39,23096,23097],{"class":102},"    \u002F\u002F非静态成员变量\n",[39,23099,23100],{"class":41,"line":413},[39,23101,23102],{"class":102},"    \u002F\u002F int m_A;\n",[39,23104,23105],{"class":41,"line":419},[39,23106,23107],{"class":102},"    \u002F\u002F定义静态成员变量\n",[39,23109,23110,23112,23114],{"class":41,"line":425},[39,23111,12076],{"class":49},[39,23113,3440],{"class":49},[39,23115,22448],{"class":45},[39,23117,23118],{"class":41,"line":443},[39,23119,3458],{"emptyLinePlaceholder":1145},[39,23121,23122],{"class":41,"line":449},[39,23123,3458],{"emptyLinePlaceholder":1145},[39,23125,23126],{"class":41,"line":455},[39,23127,5053],{"class":45},[39,23129,23130,23132,23134],{"class":41,"line":461},[39,23131,6420],{"class":49},[39,23133,6644],{"class":3021},[39,23135,3034],{"class":45},[39,23137,23138],{"class":41,"line":475},[39,23139,2611],{"class":45},[39,23141,23142],{"class":41,"line":665},[39,23143,16369],{"class":45},[39,23145,23146],{"class":41,"line":671},[39,23147,23148],{"class":102},"    \u002F\u002F输出类成员变量这块内存\n",[39,23150,23151,23153,23155,23158,23160],{"class":41,"line":684},[39,23152,2616],{"class":45},[39,23154,2242],{"class":49},[39,23156,23157],{"class":45},"p.m_A",[39,23159,2242],{"class":49},[39,23161,2264],{"class":45},[39,23163,23164],{"class":41,"line":2732},[39,23165,2630],{"class":45},[39,23167,23168,23170,23172],{"class":41,"line":2737},[39,23169,1224],{"class":49},[39,23171,3031],{"class":3021},[39,23173,3034],{"class":45},[39,23175,23176],{"class":41,"line":2751},[39,23177,2611],{"class":45},[39,23179,23180,23182],{"class":41,"line":2756},[39,23181,6689],{"class":3021},[39,23183,3034],{"class":45},[39,23185,23186],{"class":41,"line":2785},[39,23187,2630],{"class":45},[19,23189,23190],{},"此时输出是报错的：无法解析外部命令",[19,23192,23193],{},"解决这一问题：必须用到类内声明，类外初始化操作",[29,23195,23197],{"className":1209,"code":23196,"language":1211,"meta":34,"style":34},"#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",[36,23198,23199,23205,23215,23221,23225,23229,23234,23242,23246,23251,23266,23274,23278,23282,23287,23292,23304,23309,23320,23325,23330,23343,23347,23355,23359,23365],{"__ignoreMap":34},[39,23200,23201,23203],{"class":41,"line":42},[39,23202,3007],{"class":49},[39,23204,3010],{"class":1319},[39,23206,23207,23209,23211,23213],{"class":41,"line":74},[39,23208,3015],{"class":49},[39,23210,3018],{"class":49},[39,23212,3022],{"class":3021},[39,23214,2359],{"class":45},[39,23216,23217,23219],{"class":41,"line":99},[39,23218,15750],{"class":49},[39,23220,16227],{"class":3021},[39,23222,23223],{"class":41,"line":106},[39,23224,2611],{"class":45},[39,23226,23227],{"class":41,"line":112},[39,23228,15772],{"class":49},[39,23230,23231],{"class":41,"line":118},[39,23232,23233],{"class":102},"    \u002F\u002F类内声明\n",[39,23235,23236,23238,23240],{"class":41,"line":413},[39,23237,12076],{"class":49},[39,23239,3440],{"class":49},[39,23241,22448],{"class":45},[39,23243,23244],{"class":41,"line":419},[39,23245,5053],{"class":45},[39,23247,23248],{"class":41,"line":425},[39,23249,23250],{"class":102},"\u002F\u002F类外初始化\n",[39,23252,23253,23255,23257,23260,23262,23264],{"class":41,"line":443},[39,23254,1224],{"class":49},[39,23256,16625],{"class":3021},[39,23258,23259],{"class":45},"::m_A",[39,23261,50],{"class":49},[39,23263,146],{"class":56},[39,23265,2359],{"class":45},[39,23267,23268,23270,23272],{"class":41,"line":449},[39,23269,6420],{"class":49},[39,23271,6644],{"class":3021},[39,23273,3034],{"class":45},[39,23275,23276],{"class":41,"line":455},[39,23277,2611],{"class":45},[39,23279,23280],{"class":41,"line":461},[39,23281,16369],{"class":45},[39,23283,23284],{"class":41,"line":475},[39,23285,23286],{"class":102},"    \u002F\u002F访问变量的原内存空间\n",[39,23288,23289],{"class":41,"line":665},[39,23290,23291],{"class":102},"    \u002F\u002F100\n",[39,23293,23294,23296,23298,23300,23302],{"class":41,"line":671},[39,23295,2616],{"class":45},[39,23297,2242],{"class":49},[39,23299,23157],{"class":45},[39,23301,2242],{"class":49},[39,23303,2264],{"class":45},[39,23305,23306],{"class":41,"line":684},[39,23307,23308],{"class":45},"    Person p2;\n",[39,23310,23311,23314,23316,23318],{"class":41,"line":2732},[39,23312,23313],{"class":45},"    p2.m_A",[39,23315,50],{"class":49},[39,23317,2780],{"class":56},[39,23319,2359],{"class":45},[39,23321,23322],{"class":41,"line":2737},[39,23323,23324],{"class":102},"    \u002F\u002F继续访问这片空间\n",[39,23326,23327],{"class":41,"line":2751},[39,23328,23329],{"class":102},"    \u002F\u002F200\n",[39,23331,23332,23334,23336,23339,23341],{"class":41,"line":2756},[39,23333,2616],{"class":45},[39,23335,2242],{"class":49},[39,23337,23338],{"class":45},"p2.m_A",[39,23340,2242],{"class":49},[39,23342,2264],{"class":45},[39,23344,23345],{"class":41,"line":2785},[39,23346,2630],{"class":45},[39,23348,23349,23351,23353],{"class":41,"line":2790},[39,23350,1224],{"class":49},[39,23352,3031],{"class":3021},[39,23354,3034],{"class":45},[39,23356,23357],{"class":41,"line":2807},[39,23358,2611],{"class":45},[39,23360,23361,23363],{"class":41,"line":2812},[39,23362,6689],{"class":3021},[39,23364,6692],{"class":45},[39,23366,23367],{"class":41,"line":2817},[39,23368,2630],{"class":45},[19,23370,23371],{},[304,23372,23373],{},"静态变量的访问",[29,23375,23377],{"className":1209,"code":23376,"language":1211,"meta":34,"style":34},"#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",[36,23378,23379,23385,23395,23401,23405,23409,23413,23421,23425,23430,23438,23442,23446,23460,23475,23483,23487,23492,23497,23502,23507,23519,23524,23529,23543,23560,23564,23572,23576,23582],{"__ignoreMap":34},[39,23380,23381,23383],{"class":41,"line":42},[39,23382,3007],{"class":49},[39,23384,3010],{"class":1319},[39,23386,23387,23389,23391,23393],{"class":41,"line":74},[39,23388,3015],{"class":49},[39,23390,3018],{"class":49},[39,23392,3022],{"class":3021},[39,23394,2359],{"class":45},[39,23396,23397,23399],{"class":41,"line":99},[39,23398,15750],{"class":49},[39,23400,16227],{"class":3021},[39,23402,23403],{"class":41,"line":106},[39,23404,2611],{"class":45},[39,23406,23407],{"class":41,"line":112},[39,23408,15772],{"class":49},[39,23410,23411],{"class":41,"line":118},[39,23412,23233],{"class":102},[39,23414,23415,23417,23419],{"class":41,"line":413},[39,23416,12076],{"class":49},[39,23418,3440],{"class":49},[39,23420,22448],{"class":45},[39,23422,23423],{"class":41,"line":419},[39,23424,16278],{"class":49},[39,23426,23427],{"class":41,"line":425},[39,23428,23429],{"class":102},"    \u002F\u002F静态成员变量也是有访问权限的\n",[39,23431,23432,23434,23436],{"class":41,"line":443},[39,23433,12076],{"class":49},[39,23435,3440],{"class":49},[39,23437,22455],{"class":45},[39,23439,23440],{"class":41,"line":449},[39,23441,5053],{"class":45},[39,23443,23444],{"class":41,"line":455},[39,23445,23250],{"class":102},[39,23447,23448,23450,23452,23454,23456,23458],{"class":41,"line":461},[39,23449,1224],{"class":49},[39,23451,16625],{"class":3021},[39,23453,23259],{"class":45},[39,23455,50],{"class":49},[39,23457,146],{"class":56},[39,23459,2359],{"class":45},[39,23461,23462,23464,23466,23469,23471,23473],{"class":41,"line":475},[39,23463,1224],{"class":49},[39,23465,16625],{"class":3021},[39,23467,23468],{"class":45},"::m_B",[39,23470,50],{"class":49},[39,23472,1898],{"class":56},[39,23474,2359],{"class":45},[39,23476,23477,23479,23481],{"class":41,"line":665},[39,23478,6420],{"class":49},[39,23480,6713],{"class":3021},[39,23482,3034],{"class":45},[39,23484,23485],{"class":41,"line":671},[39,23486,2611],{"class":45},[39,23488,23489],{"class":41,"line":684},[39,23490,23491],{"class":102},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[39,23493,23494],{"class":41,"line":2732},[39,23495,23496],{"class":102},"    \u002F\u002F静态成员变量有两种访问方式：\n",[39,23498,23499],{"class":41,"line":2737},[39,23500,23501],{"class":102},"    \u002F\u002F1.通过对象进行访问\n",[39,23503,23504],{"class":41,"line":2751},[39,23505,23506],{"class":45},"    Person p;  \n",[39,23508,23509,23511,23513,23515,23517],{"class":41,"line":2756},[39,23510,2616],{"class":45},[39,23512,2242],{"class":49},[39,23514,23157],{"class":45},[39,23516,2242],{"class":49},[39,23518,2264],{"class":45},[39,23520,23521],{"class":41,"line":2785},[39,23522,23523],{"class":102},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[39,23525,23526],{"class":41,"line":2790},[39,23527,23528],{"class":102},"    \u002F\u002F2.通过类名进行访问\n",[39,23530,23531,23533,23535,23537,23539,23541],{"class":41,"line":2807},[39,23532,2616],{"class":45},[39,23534,2242],{"class":49},[39,23536,20102],{"class":3021},[39,23538,23259],{"class":45},[39,23540,2242],{"class":49},[39,23542,2264],{"class":45},[39,23544,23545,23547,23549,23551,23553,23555,23557],{"class":41,"line":2812},[39,23546,2616],{"class":45},[39,23548,2242],{"class":49},[39,23550,20102],{"class":3021},[39,23552,23468],{"class":45},[39,23554,2242],{"class":49},[39,23556,2307],{"class":45},[39,23558,23559],{"class":102}," \u002F\u002F没有访问权限，报错\n",[39,23561,23562],{"class":41,"line":2817},[39,23563,2630],{"class":45},[39,23565,23566,23568,23570],{"class":41,"line":2822},[39,23567,1224],{"class":49},[39,23569,3031],{"class":3021},[39,23571,3034],{"class":45},[39,23573,23574],{"class":41,"line":2836},[39,23575,2611],{"class":45},[39,23577,23578,23580],{"class":41,"line":2841},[39,23579,6758],{"class":3021},[39,23581,6692],{"class":45},[39,23583,23584],{"class":41,"line":3635},[39,23585,2630],{"class":45},[23054,23587,23589],{"id":23588},"_8282静态成员函数","8.2.8.2静态成员函数",[19,23591,23592],{},"1.静态成员函数定义与访问",[29,23594,23596],{"className":1209,"code":23595,"language":1211,"meta":34,"style":34},"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",[36,23597,23598,23604,23608,23612,23617,23628,23632,23646,23650,23654,23662,23666,23671,23676,23680,23688,23693,23703],{"__ignoreMap":34},[39,23599,23600,23602],{"class":41,"line":42},[39,23601,15750],{"class":49},[39,23603,16227],{"class":3021},[39,23605,23606],{"class":41,"line":74},[39,23607,2611],{"class":45},[39,23609,23610],{"class":41,"line":99},[39,23611,15772],{"class":49},[39,23613,23614],{"class":41,"line":106},[39,23615,23616],{"class":102},"    \u002F\u002F在公共权限下定义静态成员函数\n",[39,23618,23619,23621,23624,23626],{"class":41,"line":112},[39,23620,12076],{"class":49},[39,23622,23623],{"class":49}," void",[39,23625,12441],{"class":3021},[39,23627,3034],{"class":45},[39,23629,23630],{"class":41,"line":118},[39,23631,3088],{"class":45},[39,23633,23634,23637,23639,23642,23644],{"class":41,"line":413},[39,23635,23636],{"class":45},"        coout",[39,23638,2242],{"class":49},[39,23640,23641],{"class":1319},"\"静态成员函数的调用\"",[39,23643,2242],{"class":49},[39,23645,2264],{"class":45},[39,23647,23648],{"class":41,"line":419},[39,23649,3245],{"class":45},[39,23651,23652],{"class":41,"line":425},[39,23653,5053],{"class":45},[39,23655,23656,23658,23660],{"class":41,"line":443},[39,23657,6420],{"class":49},[39,23659,6644],{"class":3021},[39,23661,3034],{"class":45},[39,23663,23664],{"class":41,"line":449},[39,23665,2611],{"class":45},[39,23667,23668],{"class":41,"line":455},[39,23669,23670],{"class":102},"    \u002F\u002F静态成员函数的调用方式:\n",[39,23672,23673],{"class":41,"line":461},[39,23674,23675],{"class":102},"    \u002F\u002F1.通过对象访问\n",[39,23677,23678],{"class":41,"line":475},[39,23679,16369],{"class":45},[39,23681,23682,23684,23686],{"class":41,"line":665},[39,23683,16922],{"class":45},[39,23685,12607],{"class":3021},[39,23687,6692],{"class":45},[39,23689,23690],{"class":41,"line":671},[39,23691,23692],{"class":102},"    \u002F\u002F2.通过类名访问\n",[39,23694,23695,23697,23699,23701],{"class":41,"line":684},[39,23696,19575],{"class":3021},[39,23698,18788],{"class":45},[39,23700,12607],{"class":3021},[39,23702,6692],{"class":45},[39,23704,23705],{"class":41,"line":2732},[39,23706,2630],{"class":45},[1171,23708,23709],{"start":74},[1174,23710,23711],{},"静态成员函数只能访问静态成员变量",[29,23713,23715],{"className":1209,"code":23714,"language":1211,"meta":34,"style":34},"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",[36,23716,23717,23723,23727,23731,23735,23745,23749,23763,23768,23780,23784,23795,23805,23809,23813,23817,23827,23831,23844,23848,23852,23856,23860,23874,23882,23886,23890,23894,23898,23906,23910,23920,23925,23929,23937,23941,23947],{"__ignoreMap":34},[39,23718,23719,23721],{"class":41,"line":42},[39,23720,15750],{"class":49},[39,23722,16227],{"class":3021},[39,23724,23725],{"class":41,"line":74},[39,23726,2611],{"class":45},[39,23728,23729],{"class":41,"line":99},[39,23730,15772],{"class":49},[39,23732,23733],{"class":41,"line":106},[39,23734,23616],{"class":102},[39,23736,23737,23739,23741,23743],{"class":41,"line":112},[39,23738,12076],{"class":49},[39,23740,23623],{"class":49},[39,23742,12441],{"class":3021},[39,23744,3034],{"class":45},[39,23746,23747],{"class":41,"line":118},[39,23748,3088],{"class":45},[39,23750,23751,23754,23756,23758,23760],{"class":41,"line":413},[39,23752,23753],{"class":45},"        m_A",[39,23755,50],{"class":49},[39,23757,1519],{"class":56},[39,23759,1273],{"class":45},[39,23761,23762],{"class":102}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[39,23764,23765],{"class":41,"line":419},[39,23766,23767],{"class":102},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[39,23769,23770,23772,23774,23776,23778],{"class":41,"line":425},[39,23771,23636],{"class":45},[39,23773,2242],{"class":49},[39,23775,23641],{"class":1319},[39,23777,2242],{"class":49},[39,23779,2264],{"class":45},[39,23781,23782],{"class":41,"line":443},[39,23783,3245],{"class":45},[39,23785,23786,23788,23790,23792],{"class":41,"line":449},[39,23787,12076],{"class":49},[39,23789,3440],{"class":49},[39,23791,16504],{"class":45},[39,23793,23794],{"class":102}," \u002F\u002F静态成员变量\n",[39,23796,23797,23799,23802],{"class":41,"line":455},[39,23798,3043],{"class":49},[39,23800,23801],{"class":45}," m_B;",[39,23803,23804],{"class":102}," \u002F\u002F非静态成员变量\n",[39,23806,23807],{"class":41,"line":461},[39,23808,3458],{"emptyLinePlaceholder":1145},[39,23810,23811],{"class":41,"line":475},[39,23812,16278],{"class":49},[39,23814,23815],{"class":41,"line":665},[39,23816,23429],{"class":102},[39,23818,23819,23821,23823,23825],{"class":41,"line":671},[39,23820,12076],{"class":49},[39,23822,23623],{"class":49},[39,23824,14674],{"class":3021},[39,23826,3034],{"class":45},[39,23828,23829],{"class":41,"line":684},[39,23830,3088],{"class":45},[39,23832,23833,23835,23837,23840,23842],{"class":41,"line":2732},[39,23834,4509],{"class":45},[39,23836,2242],{"class":49},[39,23838,23839],{"class":1319},"\"这是私有权限下的静态函数调用\"",[39,23841,2242],{"class":49},[39,23843,2264],{"class":45},[39,23845,23846],{"class":41,"line":2737},[39,23847,3245],{"class":45},[39,23849,23850],{"class":41,"line":2751},[39,23851,3458],{"emptyLinePlaceholder":1145},[39,23853,23854],{"class":41,"line":2756},[39,23855,3458],{"emptyLinePlaceholder":1145},[39,23857,23858],{"class":41,"line":2785},[39,23859,5053],{"class":45},[39,23861,23862,23864,23866,23868,23870,23872],{"class":41,"line":2790},[39,23863,1224],{"class":49},[39,23865,16625],{"class":3021},[39,23867,23259],{"class":45},[39,23869,50],{"class":49},[39,23871,260],{"class":56},[39,23873,2359],{"class":45},[39,23875,23876,23878,23880],{"class":41,"line":2807},[39,23877,6420],{"class":49},[39,23879,6644],{"class":3021},[39,23881,3034],{"class":45},[39,23883,23884],{"class":41,"line":2812},[39,23885,2611],{"class":45},[39,23887,23888],{"class":41,"line":2817},[39,23889,23670],{"class":102},[39,23891,23892],{"class":41,"line":2822},[39,23893,23675],{"class":102},[39,23895,23896],{"class":41,"line":2836},[39,23897,16369],{"class":45},[39,23899,23900,23902,23904],{"class":41,"line":2841},[39,23901,16922],{"class":45},[39,23903,12607],{"class":3021},[39,23905,6692],{"class":45},[39,23907,23908],{"class":41,"line":3635},[39,23909,23692],{"class":102},[39,23911,23912,23914,23916,23918],{"class":41,"line":3649},[39,23913,19575],{"class":3021},[39,23915,18788],{"class":45},[39,23917,12607],{"class":3021},[39,23919,6692],{"class":45},[39,23921,23922],{"class":41,"line":3657},[39,23923,23924],{"class":102},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[39,23926,23927],{"class":41,"line":3662},[39,23928,2630],{"class":45},[39,23930,23931,23933,23935],{"class":41,"line":3668},[39,23932,1224],{"class":49},[39,23934,3031],{"class":3021},[39,23936,3034],{"class":45},[39,23938,23939],{"class":41,"line":3674},[39,23940,2611],{"class":45},[39,23942,23943,23945],{"class":41,"line":3679},[39,23944,6689],{"class":3021},[39,23946,6692],{"class":45},[39,23948,23949],{"class":41,"line":9004},[39,23950,2630],{"class":45},[1188,23952,23954],{"id":23953},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23054,23956,23958],{"id":23957},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23960,23961],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23963,23964],{},"只有非静态成员变量才属于类的对象上",[23966,23967,23969],"h5",{"id":23968},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[29,23971,23973],{"className":1209,"code":23972,"language":1211,"meta":34,"style":34},"#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",[36,23974,23975,23982,23992,23998,24002,24006,24010,24018,24022,24026,24049,24053,24061,24065,24071],{"__ignoreMap":34},[39,23976,23977,23979],{"class":41,"line":42},[39,23978,3007],{"class":49},[39,23980,23981],{"class":1319},"\u003Ciostraem>\n",[39,23983,23984,23986,23988,23990],{"class":41,"line":74},[39,23985,3015],{"class":49},[39,23987,3018],{"class":49},[39,23989,3022],{"class":3021},[39,23991,2359],{"class":45},[39,23993,23994,23996],{"class":41,"line":99},[39,23995,15750],{"class":49},[39,23997,16227],{"class":3021},[39,23999,24000],{"class":41,"line":106},[39,24001,2611],{"class":45},[39,24003,24004],{"class":41,"line":112},[39,24005,3458],{"emptyLinePlaceholder":1145},[39,24007,24008],{"class":41,"line":118},[39,24009,5053],{"class":45},[39,24011,24012,24014,24016],{"class":41,"line":413},[39,24013,6420],{"class":49},[39,24015,6644],{"class":3021},[39,24017,3034],{"class":45},[39,24019,24020],{"class":41,"line":419},[39,24021,2611],{"class":45},[39,24023,24024],{"class":41,"line":425},[39,24025,16369],{"class":45},[39,24027,24028,24030,24032,24035,24037,24040,24042,24044,24046],{"class":41,"line":443},[39,24029,2616],{"class":45},[39,24031,2242],{"class":49},[39,24033,24034],{"class":1319},"\"size of p=\"",[39,24036,2242],{"class":49},[39,24038,24039],{"class":3021},"sizeoif",[39,24041,7595],{"class":45},[39,24043,2242],{"class":49},[39,24045,2307],{"class":45},[39,24047,24048],{"class":102}," \u002F\u002F查看这个空类的占用的内存空间\n",[39,24050,24051],{"class":41,"line":449},[39,24052,2630],{"class":45},[39,24054,24055,24057,24059],{"class":41,"line":455},[39,24056,1224],{"class":49},[39,24058,3031],{"class":3021},[39,24060,3034],{"class":45},[39,24062,24063],{"class":41,"line":461},[39,24064,2611],{"class":45},[39,24066,24067,24069],{"class":41,"line":475},[39,24068,6689],{"class":3021},[39,24070,6692],{"class":45},[39,24072,24073],{"class":41,"line":665},[39,24074,2630],{"class":45},[19,24076,24077],{},"输出结果为：size of p=1",[19,24079,24080],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,24082,24083],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23966,24085,24087],{"id":24086},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[29,24089,24091],{"className":1209,"code":24090,"language":1211,"meta":34,"style":34},"#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",[36,24092,24093,24099,24109,24117,24121,24130,24134,24142,24146,24150,24169,24173,24177,24185,24189,24195],{"__ignoreMap":34},[39,24094,24095,24097],{"class":41,"line":42},[39,24096,3007],{"class":49},[39,24098,3010],{"class":1319},[39,24100,24101,24103,24105,24107],{"class":41,"line":74},[39,24102,3015],{"class":49},[39,24104,3018],{"class":49},[39,24106,3022],{"class":3021},[39,24108,2359],{"class":45},[39,24110,24111,24113,24115],{"class":41,"line":99},[39,24112,15750],{"class":49},[39,24114,16625],{"class":3021},[39,24116,3732],{"class":45},[39,24118,24119],{"class":41,"line":106},[39,24120,2611],{"class":45},[39,24122,24123,24125,24127],{"class":41,"line":112},[39,24124,3043],{"class":49},[39,24126,16504],{"class":45},[39,24128,24129],{"class":102},"\u002F\u002F非静态成员变量\n",[39,24131,24132],{"class":41,"line":118},[39,24133,5053],{"class":45},[39,24135,24136,24138,24140],{"class":41,"line":413},[39,24137,6420],{"class":49},[39,24139,6644],{"class":3021},[39,24141,3034],{"class":45},[39,24143,24144],{"class":41,"line":419},[39,24145,2611],{"class":45},[39,24147,24148],{"class":41,"line":425},[39,24149,16369],{"class":45},[39,24151,24152,24154,24156,24158,24160,24162,24164,24166],{"class":41,"line":443},[39,24153,2616],{"class":45},[39,24155,2242],{"class":49},[39,24157,24034],{"class":1319},[39,24159,2438],{"class":49},[39,24161,7595],{"class":45},[39,24163,2242],{"class":49},[39,24165,2307],{"class":45},[39,24167,24168],{"class":102}," \u002F\u002F查看不是空对象时占用多少内存\n",[39,24170,24171],{"class":41,"line":449},[39,24172,3458],{"emptyLinePlaceholder":1145},[39,24174,24175],{"class":41,"line":455},[39,24176,2630],{"class":45},[39,24178,24179,24181,24183],{"class":41,"line":461},[39,24180,1224],{"class":49},[39,24182,3031],{"class":3021},[39,24184,3034],{"class":45},[39,24186,24187],{"class":41,"line":475},[39,24188,2611],{"class":45},[39,24190,24191,24193],{"class":41,"line":665},[39,24192,6689],{"class":3021},[39,24194,6692],{"class":45},[39,24196,24197],{"class":41,"line":671},[39,24198,2630],{"class":45},[19,24200,24201],{},"输出结果：size of p=4",[19,24203,24204],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[1171,24206,24207],{},[1174,24208,24209],{},"如果加上非静态成员变量，Person类修改如下",[29,24211,24213],{"className":1209,"code":24212,"language":1211,"meta":34,"style":34},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[36,24214,24215,24221,24225,24231,24239,24243,24248],{"__ignoreMap":34},[39,24216,24217,24219],{"class":41,"line":42},[39,24218,15750],{"class":49},[39,24220,16227],{"class":3021},[39,24222,24223],{"class":41,"line":74},[39,24224,2611],{"class":45},[39,24226,24227,24229],{"class":41,"line":99},[39,24228,3043],{"class":49},[39,24230,22448],{"class":45},[39,24232,24233,24235,24237],{"class":41,"line":106},[39,24234,12076],{"class":49},[39,24236,3440],{"class":49},[39,24238,22455],{"class":45},[39,24240,24241],{"class":41,"line":112},[39,24242,5053],{"class":45},[39,24244,24245],{"class":41,"line":118},[39,24246,24247],{"class":102},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[39,24249,24250,24252,24254,24256,24258,24260],{"class":41,"line":413},[39,24251,1224],{"class":49},[39,24253,16625],{"class":3021},[39,24255,23468],{"class":45},[39,24257,50],{"class":49},[39,24259,260],{"class":56},[39,24261,2359],{"class":45},[19,24263,24264],{},"输出结果：4",[19,24266,24267],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[1171,24269,24270],{"start":74},[1174,24271,24272],{},"加上非静态成员函数",[29,24274,24276],{"className":1209,"code":24275,"language":1211,"meta":34,"style":34},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[36,24277,24278,24285,24289,24295,24303,24307,24311,24315],{"__ignoreMap":34},[39,24279,24280,24282],{"class":41,"line":42},[39,24281,15750],{"class":49},[39,24283,24284],{"class":3021},"  Person\n",[39,24286,24287],{"class":41,"line":74},[39,24288,2611],{"class":45},[39,24290,24291,24293],{"class":41,"line":99},[39,24292,3043],{"class":49},[39,24294,22448],{"class":45},[39,24296,24297,24299,24301],{"class":41,"line":106},[39,24298,15965],{"class":49},[39,24300,12441],{"class":3021},[39,24302,3034],{"class":45},[39,24304,24305],{"class":41,"line":112},[39,24306,3088],{"class":45},[39,24308,24309],{"class":41,"line":118},[39,24310,3458],{"emptyLinePlaceholder":1145},[39,24312,24313],{"class":41,"line":413},[39,24314,3245],{"class":45},[39,24316,24317],{"class":41,"line":419},[39,24318,5053],{"class":45},[19,24320,24321],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[1171,24323,24324],{"start":99},[1174,24325,24326],{},"加上静态成员函数",[29,24328,24330],{"className":1209,"code":24329,"language":1211,"meta":34,"style":34},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[36,24331,24332,24338,24342,24348,24356,24360,24364,24368,24379,24383,24387,24391],{"__ignoreMap":34},[39,24333,24334,24336],{"class":41,"line":42},[39,24335,15750],{"class":49},[39,24337,24284],{"class":3021},[39,24339,24340],{"class":41,"line":74},[39,24341,2611],{"class":45},[39,24343,24344,24346],{"class":41,"line":99},[39,24345,3043],{"class":49},[39,24347,22448],{"class":45},[39,24349,24350,24352,24354],{"class":41,"line":106},[39,24351,15965],{"class":49},[39,24353,12441],{"class":3021},[39,24355,3034],{"class":45},[39,24357,24358],{"class":41,"line":112},[39,24359,3088],{"class":45},[39,24361,24362],{"class":41,"line":118},[39,24363,3458],{"emptyLinePlaceholder":1145},[39,24365,24366],{"class":41,"line":413},[39,24367,3245],{"class":45},[39,24369,24370,24372,24374,24377],{"class":41,"line":419},[39,24371,12076],{"class":49},[39,24373,23623],{"class":49},[39,24375,24376],{"class":3021}," func1",[39,24378,3034],{"class":45},[39,24380,24381],{"class":41,"line":425},[39,24382,3088],{"class":45},[39,24384,24385],{"class":41,"line":443},[39,24386,3458],{"emptyLinePlaceholder":1145},[39,24388,24389],{"class":41,"line":449},[39,24390,3245],{"class":45},[39,24392,24393],{"class":41,"line":455},[39,24394,5053],{"class":45},[19,24396,24264],{},[19,24398,24399],{},"解释：静态成员函数也不属于类上",[1133,24401,8730],{},{"title":34,"searchDepth":74,"depth":74,"links":24403},[24404,24410],{"id":15701,"depth":74,"text":15702,"children":24405},[24406,24407,24408,24409],{"id":15705,"depth":99,"text":15706},{"id":16430,"depth":99,"text":16431},{"id":16602,"depth":99,"text":16603},{"id":17061,"depth":99,"text":17062},{"id":19433,"depth":74,"text":19434,"children":24411},[24412,24413,24414,24415,24416,24417,24418,24419,24420],{"id":19445,"depth":99,"text":19446},{"id":19738,"depth":99,"text":19739},{"id":20229,"depth":99,"text":20230},{"id":21326,"depth":99,"text":21327},{"id":21749,"depth":99,"text":21750},{"id":22228,"depth":99,"text":22229},{"id":22603,"depth":99,"text":22604},{"id":23016,"depth":99,"text":23017},{"id":23953,"depth":99,"text":23954},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15666,"description":24421},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":24428,"title":1211,"body":24429,"description":1142,"extension":1143,"meta":24433,"navigation":1145,"path":24435,"seo":24436,"stem":24437,"__hash__":24438},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":24430,"toc":24431},[],{"title":34,"searchDepth":74,"depth":74,"links":24432},[],{"category":24434},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1211,"description":1142},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":24440,"title":24441,"body":24442,"description":34,"extension":1143,"meta":25033,"navigation":1145,"path":25034,"seo":25035,"stem":25036,"__hash__":25037},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":24443,"toc":25015},[24444,24447,24451,24454,24457,24460,24478,24483,24486,24489,24492,24495,24500,24503,24508,24511,24514,24518,24521,24524,24530,24533,24551,24555,24559,24562,24567,24570,24574,24577,24590,24593,24597,24600,24603,24606,24631,24634,24643,24654,24669,24701,24705,24712,24720,24724,24727,24730,24735,24739,24742,24745,24750,24753,24757,24760,24763,24768,24771,24775,24780,24784,24851,24855,24858,24861,24864,24867,24870,24876,24897,24900,24914,24923,24927,24930,24933,24938,24941,24946,24951,24954,24957,24962,24967,24970,24975,24980,24983,24988,24993,24996,24999,25004,25007,25012],[10,24445,24441],{"id":24446},"_1强化学习基本认识",[14,24448,24450],{"id":24449},"_11什么是强化学习","1.1.什么是强化学习",[19,24452,24453],{},"强化学习有两部分组成：智能体和环境；",[19,24455,24456],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,24458,24459],{},"强化学习与监督学习的区别:",[1171,24461,24462,24465,24468,24471],{},[1174,24463,24464],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[1174,24466,24467],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[1174,24469,24470],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[1174,24472,24473,24474,24477],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[304,24475,24476],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,24479,24480],{},[269,24481],{"alt":34,"src":24482},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,24484,24485],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,24487,24488],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,24490,24491],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,24493,24494],{},"获取奖励",[19,24496,24497],{},[269,24498],{"alt":34,"src":24499},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,24501,24502],{},"强化学习可以分成标准强化学习和深度强化学习",[19,24504,24505],{},[269,24506],{"alt":34,"src":24507},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,24509,24510],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,24512,24513],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,24515,24517],{"id":24516},"_12强化学习应用场景","1.2.强化学习应用场景",[19,24519,24520],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,24522,24523],{},"具身智能中的应用",[19,24525,24526,24529],{},[304,24527,24528],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,24531,24532],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,24534,24535,24536,24539,24540,24543,24544,24547,24548],{},"机器人是",[304,24537,24538],{},"躯体","，深度学习是",[304,24541,24542],{},"神经元****网络","，VLA是",[304,24545,24546],{},"通用的行为逻辑","，而强化学习是",[304,24549,24550],{},"教练",[14,24552,24554],{"id":24553},"_13序列决策","1.3.序列决策",[1188,24556,24558],{"id":24557},"_131智能体与环境","1.3.1.智能体与环境",[19,24560,24561],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,24563,24564],{},[269,24565],{"alt":34,"src":24566},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,24568,24569],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[1188,24571,24573],{"id":24572},"_132奖励","1.3.2.奖励",[19,24575,24576],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,24578,24579,24580,24589],{},"取某个策略的表现如何。强化学习的目的就是",[304,24581,24582,24583,24588],{},"最大化",[304,24584,24585],{},[304,24586,24587],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,24591,24592],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[1188,24594,24596],{"id":24595},"_133序列决策","1.3.3.序列决策",[19,24598,24599],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,24601,24602],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,24604,24605],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,24607,24608,24612,24613,24615,24616,24618,24619,24621,24622,14851,24625,14851,24628],{},[24609,24610,24611],"em",{},"Ht"," = ",[24609,24614,1796],{},"1*, a",[24609,24617,57],{},", r",[24609,24620,57],{},", . . . ,* ",[24609,24623,24624],{},"ot",[24609,24626,24627],{},", at ,",[24609,24629,24630],{},"rt",[19,24632,24633],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,24635,24636,24612,24639,2716,24641,1632],{},[24609,24637,24638],{},"st",[24609,24640,1270],{},[24609,24642,24611],{},[19,24644,24645,24646,24649,24650,24653],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[304,24647,24648],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[304,24651,24652],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,24655,24656,24657,24660,24661,24664,24665,24668],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[304,24658,24659],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[304,24662,24663],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[24609,24666,24667],{},"S, A, T, R, Ω, O, γ",")。",[19,24670,24671,24672,24674,24675,24677,24678,1221,24680,24683,24684,24686,24687,1221,24690,24693,24694,24696,24697,24700],{},"其中 ",[24609,24673,1888],{}," 表示状态空间，为隐变量，",[24609,24676,1444],{}," 为动作空间，",[24609,24679,1912],{},[24609,24681,24682],{},"s ′ |s, a",") 为状态转移概率，",[24609,24685,1863],{}," 为奖励函数，",[24609,24688,24689],{},"Ω",[24609,24691,24692],{},"o|s, a",") 为观测概率，",[24609,24695,1790],{}," 为观测空间，",[24609,24698,24699],{},"γ"," 为折扣因子。",[14,24702,24704],{"id":24703},"_14动作空间","1.4.动作空间",[19,24706,24707,24708,24711],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[304,24709,24710],{},"动作空间"," ，动作空间分为:",[1171,24713,24714,24717],{},[1174,24715,24716],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[1174,24718,24719],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,24721,24723],{"id":24722},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,24725,24726],{},"由策略、价值函数、模型三部分组成",[19,24728,24729],{},"这三者组成马尔可夫决策过程",[19,24731,24732],{},[269,24733],{"alt":34,"src":24734},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[1188,24736,24738],{"id":24737},"_151策略","1.5.1.策略",[19,24740,24741],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,24743,24744],{},"策略可分为两种：",[19,24746,24747],{},[269,24748],{"alt":34,"src":24749},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,24751,24752],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[1188,24754,24756],{"id":24755},"_152价值函数","1.5.2.价值函数",[19,24758,24759],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,24761,24762],{},"价值函数中有一个折扣因子，类似于存款利息",[19,24764,24765],{},[269,24766],{"alt":34,"src":24767},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,24769,24770],{},"进入某个状态采取的最优动作可以通过Q函数得到",[1188,24772,24774],{"id":24773},"_153模型","1.5.3.模型",[19,24776,24777],{},[269,24778],{"alt":34,"src":24779},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,24781,24783],{"id":24782},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[1352,24785,24786,24797],{},[1355,24787,24788],{},[1358,24789,24790,24794],{},[1361,24791,24793],{"align":24792},"left","类型",[1361,24795,24796],{"align":24792},"特点",[1398,24798,24799,24809,24819,24829,24841],{},[1358,24800,24801,24806],{},[1403,24802,24803],{"align":24792},[304,24804,24805],{},"基于价值的智能体",[1403,24807,24808],{"align":24792},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[1358,24810,24811,24816],{},[1403,24812,24813],{"align":24792},[304,24814,24815],{},"基于策略的智能体",[1403,24817,24818],{"align":24792},"直接学习策略，没有学习价值函数",[1358,24820,24821,24826],{},[1403,24822,24823],{"align":24792},[304,24824,24825],{},"演员-评论员智能体",[1403,24827,24828],{"align":24792},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[1358,24830,24831,24836],{},[1403,24832,24833],{"align":24792},[304,24834,24835],{},"有模型强化学习智能体",[1403,24837,24838],{"align":24792},[269,24839],{"alt":34,"src":24840},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[1358,24842,24843,24848],{},[1403,24844,24845],{"align":24792},[304,24846,24847],{},"免模型强化学习智能体",[1403,24849,24850],{"align":24792},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24852,24854],{"id":24853},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,24856,24857],{},"学习和规划是序列决策的两个基本问题",[19,24859,24860],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,24862,24863],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,24865,24866],{},"强化学习用到的库：Gym",[19,24868,24869],{},"Gym可以检验强化学习算法的优劣",[19,24871,24872,24875],{},[304,24873,24874],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[29,24877,24881],{"className":24878,"code":24879,"language":24880,"meta":34,"style":34},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[36,24882,24883],{"__ignoreMap":34},[39,24884,24885,24888,24891,24894],{"class":41,"line":42},[39,24886,24887],{"class":3021},"pip",[39,24889,24890],{"class":1319}," install",[39,24892,24893],{"class":1319}," gym==",[39,24895,24896],{"class":56},"0.25.2\n",[19,24898,24899],{},"显示图形界面需要",[29,24901,24903],{"className":24878,"code":24902,"language":24880,"meta":34,"style":34},"pip install pygame\n",[36,24904,24905],{"__ignoreMap":34},[39,24906,24907,24909,24911],{"class":41,"line":42},[39,24908,24887],{"class":3021},[39,24910,24890],{"class":1319},[39,24912,24913],{"class":1319}," pygame\n",[19,24915,24916,24917],{},"有关Gym库的相关文档介绍：",[46,24918,24922],{"href":24919,"rel":24920},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24921],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24924,24926],{"id":24925},"_18一些补充基础概念","1.8.一些补充基础概念",[19,24928,24929],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,24931,24932],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,24934,24935],{},[269,24936],{"alt":34,"src":24937},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,24939,24940],{},"折扣率需要自己来设定",[19,24942,24943],{},[269,24944],{"alt":34,"src":24945},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[1171,24947,24948],{},[1174,24949,24950],{},"状态转移函数：",[19,24952,24953],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24955,24956],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24958,24959],{},[269,24960],{"alt":34,"src":24961},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[1171,24963,24964],{"start":74},[1174,24965,24966],{},"动作价值函数：",[19,24968,24969],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24971,24972],{},[269,24973],{"alt":34,"src":24974},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[1171,24976,24977],{"start":99},[1174,24978,24979],{},"最优动作价值函数：",[19,24981,24982],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[19,24984,24985],{},[269,24986],{"alt":34,"src":24987},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[1171,24989,24990],{"start":106},[1174,24991,24992],{},"状态价值函数:",[19,24994,24995],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24997,24998],{},"它衡量的是“一个具体动作”的长期价值",[19,25000,25001],{},[269,25002],{"alt":34,"src":25003},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25005,25006],{},"几个价值函数之间的比较：",[19,25008,25009],{},[269,25010],{"alt":34,"src":25011},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1133,25013,25014],{},"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":34,"searchDepth":74,"depth":74,"links":25016},[25017,25018,25019,25024,25025,25030,25031,25032],{"id":24449,"depth":74,"text":24450},{"id":24516,"depth":74,"text":24517},{"id":24553,"depth":74,"text":24554,"children":25020},[25021,25022,25023],{"id":24557,"depth":99,"text":24558},{"id":24572,"depth":99,"text":24573},{"id":24595,"depth":99,"text":24596},{"id":24703,"depth":74,"text":24704},{"id":24722,"depth":74,"text":24723,"children":25026},[25027,25028,25029],{"id":24737,"depth":99,"text":24738},{"id":24755,"depth":99,"text":24756},{"id":24773,"depth":99,"text":24774},{"id":24782,"depth":74,"text":24783},{"id":24853,"depth":74,"text":24854},{"id":24925,"depth":74,"text":24926},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":24441,"description":34},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25039,"title":25040,"body":25041,"description":25048,"extension":1143,"meta":25059,"navigation":1145,"path":25060,"seo":25061,"stem":25062,"__hash__":25063},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25042,"toc":25057},[25043,25046,25049,25054],[10,25044,25040],{"id":25045},"_2马尔可夫决策过程",[19,25047,25048],{},"这是强化学习的基本框架",[19,25050,25051],{},[269,25052],{"alt":34,"src":25053},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,25055,25056],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":34,"searchDepth":74,"depth":74,"links":25058},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25040,"description":25048},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25065,"title":25066,"body":25067,"description":34,"extension":1143,"meta":25183,"navigation":1145,"path":25184,"seo":25185,"stem":25186,"__hash__":25187},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25068,"toc":25178},[25069,25072,25076,25079,25084,25089,25092,25097,25100,25105,25108,25112,25117,25120,25125,25130,25135,25138,25142,25147,25150,25155,25160,25165,25170,25173],[10,25070,25066],{"id":25071},"_3动作价值函数",[14,25073,25075],{"id":25074},"_31dqn","3.1.DQN",[19,25077,25078],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,25080,25081],{},[269,25082],{"alt":34,"src":25083},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,25085,25086],{},[269,25087],{"alt":34,"src":25088},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,25090,25091],{},"DQN算法的描述：",[19,25093,25094],{},[269,25095],{"alt":34,"src":25096},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,25098,25099],{},"这里的Dense指的是全连接层",[19,25101,25102],{},[269,25103],{"alt":34,"src":25104},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,25106,25107],{},"当前观测的状态为St，用DQN把St作为输入，给所有的动作打分，选出动作最高的动作作为at，agent做出at动作后，环境会改变状态，用状态转移函数p来随机抽一个新的状态st+1，环境还会告诉我们这一步的奖励Rt，这个奖励可以+-0，奖励是强化学习中的监督信号，DQN要靠这些奖励来训练，有了新的状态St+1，DQN会再对所有的动作打分，agent选择分数最高的动作作为at+1，agent执行at+1后，环境会再更新状态s和再给一个奖励R，然后会继续重复之前的动作 训练DQN的最常用方法是TD算法",[14,25109,25111],{"id":25110},"_32dqn的举例","3.2.DQN的举例",[19,25113,25114],{},[269,25115],{"alt":34,"src":25116},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,25118,25119],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,25121,25122],{},[269,25123],{"alt":34,"src":25124},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,25126,25127],{},[269,25128],{"alt":34,"src":25129},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,25131,25132],{},[269,25133],{"alt":34,"src":25134},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,25136,25137],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25139,25141],{"id":25140},"_33td算法","3.3.TD算法",[19,25143,25144],{},[269,25145],{"alt":34,"src":25146},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,25148,25149],{},"强化学习TD算法公式的粗略解释：",[19,25151,25152],{},[269,25153],{"alt":34,"src":25154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,25156,25157],{},[269,25158],{"alt":34,"src":25159},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,25161,25162],{},[269,25163],{"alt":34,"src":25164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,25166,25167],{},[269,25168],{"alt":34,"src":25169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,25171,25172],{},"TD算法总结：",[19,25174,25175],{},[269,25176],{"alt":34,"src":25177},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":34,"searchDepth":74,"depth":74,"links":25179},[25180,25181,25182],{"id":25074,"depth":74,"text":25075},{"id":25110,"depth":74,"text":25111},{"id":25140,"depth":74,"text":25141},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25066,"description":34},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25189,"title":25190,"body":25191,"description":34,"extension":1143,"meta":25424,"navigation":1145,"path":25425,"seo":25426,"stem":25427,"__hash__":25428},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25192,"toc":25420},[25193,25196,25200,25203,25206,25211,25216,25219,25224,25229,25232,25237,25240,25245,25248,25253,25256,25261,25264,25269,25274,25277,25282,25285,25288,25293,25296,25301,25306,25310,25313,25316,25321,25326,25329,25334,25339,25342,25347,25350,25353,25358,25361,25366,25369,25374,25379,25382,25387,25392,25395,25400,25403,25408,25411],[10,25194,25190],{"id":25195},"_4策略学习",[14,25197,25199],{"id":25198},"_41概念描述","4.1.概念描述",[19,25201,25202],{},"用神经网络（策略网络）近似策略函数",[19,25204,25205],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,25207,25208],{},[269,25209],{"alt":34,"src":25210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,25212,25213],{},[269,25214],{"alt":34,"src":25215},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,25217,25218],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,25220,25221],{},[269,25222],{"alt":34,"src":25223},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,25225,25226],{},[269,25227],{"alt":34,"src":25228},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,25230,25231],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,25233,25234],{},[269,25235],{"alt":34,"src":25236},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,25238,25239],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,25241,25242],{},[269,25243],{"alt":34,"src":25244},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,25246,25247],{},"改进theta要用到策略梯度算法",[19,25249,25250],{},[269,25251],{"alt":34,"src":25252},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,25254,25255],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,25257,25258],{},[269,25259],{"alt":34,"src":25260},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,25262,25263],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,25265,25266],{},[269,25267],{"alt":34,"src":25268},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,25270,25271],{},[269,25272],{"alt":34,"src":25273},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,25275,25276],{},"梯度公式总结：",[19,25278,25279],{},[269,25280],{"alt":34,"src":25281},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,25283,25284],{},"两个公式的分别应用场景：",[19,25286,25287],{},"对于离散的动作：",[19,25289,25290],{},[269,25291],{"alt":34,"src":25292},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,25294,25295],{},"对于连续的动作：",[19,25297,25298],{},[269,25299],{"alt":34,"src":25300},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,25302,25303],{},[269,25304],{"alt":34,"src":25305},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,25307,25309],{"id":25308},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,25311,25312],{},"使用蒙特卡洛来近似计算策略梯度",[19,25314,25315],{},"蒙特卡洛法的解释如下：",[19,25317,25318],{},[269,25319],{"alt":34,"src":25320},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,25322,25323],{},[269,25324],{"alt":34,"src":25325},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,25327,25328],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[1171,25330,25331],{},[1174,25332,25333],{},"方法一：reinforce算法",[19,25335,25336],{},[269,25337],{"alt":34,"src":25338},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,25340,25341],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[1171,25343,25344],{"start":74},[1174,25345,25346],{},"方法二：actor-critic算法",[19,25348,25349],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,25351,25352],{},"两个网络的构建：",[19,25354,25355],{},[269,25356],{"alt":34,"src":25357},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,25359,25360],{},"actor网路：",[19,25362,25363],{},[269,25364],{"alt":34,"src":25365},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,25367,25368],{},"critic网络",[19,25370,25371],{},[269,25372],{"alt":34,"src":25373},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[1171,25375,25376],{"start":99},[1174,25377,25378],{},"网络的训练",[19,25380,25381],{},"网络描述",[19,25383,25384],{},[269,25385],{"alt":34,"src":25386},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,25388,25389],{},[269,25390],{"alt":34,"src":25391},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,25393,25394],{},"TD算法更新梯度：",[19,25396,25397],{},[269,25398],{"alt":34,"src":25399},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,25401,25402],{},"策略网络更新梯度：",[19,25404,25405],{},[269,25406],{"alt":34,"src":25407},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,25409,25410],{},"训练整个流程的具体描述：",[19,25412,25413,25416,25417],{},[269,25414],{"alt":34,"src":25415},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[269,25418],{"alt":34,"src":25419},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":34,"searchDepth":74,"depth":74,"links":25421},[25422,25423],{"id":25198,"depth":74,"text":25199},{"id":25308,"depth":74,"text":25309},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25190,"description":34},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":25430,"title":25431,"body":25432,"description":25439,"extension":1143,"meta":25489,"navigation":1145,"path":25490,"seo":25491,"stem":25492,"__hash__":25493},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":25433,"toc":25485},[25434,25437,25440,25444,25447,25452,25456,25459,25464,25467,25472,25477,25480],[10,25435,25431],{"id":25436},"_5alphago算法",[19,25438,25439],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,25441,25443],{"id":25442},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,25445,25446],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,25448,25449],{},[269,25450],{"alt":34,"src":25451},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,25453,25455],{"id":25454},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,25457,25458],{},"采用强化学习的方式训练策略网络",[19,25460,25461],{},[269,25462],{"alt":34,"src":25463},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,25465,25466],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,25468,25469],{},[269,25470],{"alt":34,"src":25471},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,25473,25474],{},[269,25475],{"alt":34,"src":25476},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,25478,25479],{},"强化学习训练策略网络的总结：",[19,25481,25482],{},[269,25483],{"alt":34,"src":25484},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":34,"searchDepth":74,"depth":74,"links":25486},[25487,25488],{"id":25442,"depth":74,"text":25443},{"id":25454,"depth":74,"text":25455},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":25431,"description":25439},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":25495,"title":25496,"body":25497,"description":25504,"extension":1143,"meta":25507,"navigation":1145,"path":25508,"seo":25509,"stem":25510,"__hash__":25511},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":25498,"toc":25505},[25499,25502],[10,25500,25496],{"id":25501},"_6价值网络",[19,25503,25504],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":34,"searchDepth":74,"depth":74,"links":25506},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":25496,"description":25504},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":25513,"title":25514,"body":25515,"description":25519,"extension":1143,"meta":25520,"navigation":1145,"path":25521,"seo":25522,"stem":25523,"__hash__":25524},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":25516,"toc":25517},[],{"title":34,"searchDepth":74,"depth":74,"links":25518},[],"记录自己的强化学习笔记。",{"category":24434},"\u002Fwiki\u002F2025-12-04",{"title":25514,"description":25519},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":25526,"title":25527,"body":25528,"description":1142,"extension":1143,"meta":25567,"navigation":1145,"path":25568,"seo":25569,"stem":25570,"__hash__":25571},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":25529,"toc":25565},[25530,25533,25536,25542,25545,25551,25554,25559,25562],[10,25531,25527],{"id":25532},"_1-项目概览与官方资源",[19,25534,25535],{},"官方文档：",[19,25537,25538],{},[46,25539,25540],{"href":25540,"rel":25541},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24921],[19,25543,25544],{},"官方代码仓库：",[19,25546,25547],{},[46,25548,25549],{"href":25549,"rel":25550},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24921],[19,25552,25553],{},"复现大体流程：",[19,25555,25556],{},[269,25557],{"alt":34,"src":25558},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,25560,25561],{},"本教程的目标是打通这条链路：",[19,25563,25564],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":34,"searchDepth":74,"depth":74,"links":25566},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":25527,"description":1142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":25573,"title":25574,"body":25575,"description":1142,"extension":1143,"meta":25691,"navigation":1145,"path":25692,"seo":25693,"stem":25694,"__hash__":25695},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":25576,"toc":25686},[25577,25580,25584,25587,25594,25598,25601,25610,25620,25624,25654,25657,25683],[10,25578,25574],{"id":25579},"_2-环境准备与设备连接",[14,25581,25583],{"id":25582},"_21-系统与环境","2.1 系统与环境",[19,25585,25586],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,25588,25589,25590,25593],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[36,25591,25592],{},"lerobot"," 依赖。",[14,25595,25597],{"id":25596},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,25599,25600],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[29,25602,25604],{"className":24878,"code":25603,"language":24880,"meta":34,"style":34},"lerobot-find-out\n",[36,25605,25606],{"__ignoreMap":34},[39,25607,25608],{"class":41,"line":42},[39,25609,25603],{"class":3021},[19,25611,25612,25613,1425,25616,25619],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[36,25614,25615],{},"\u002Fdev\u002FttyACM0",[36,25617,25618],{},"\u002Fdev\u002FttyACM1","）。",[14,25621,25623],{"id":25622},"_23-串口授权","2.3 串口授权",[29,25625,25627],{"className":24878,"code":25626,"language":24880,"meta":34,"style":34},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[36,25628,25629,25643],{"__ignoreMap":34},[39,25630,25631,25634,25637,25640],{"class":41,"line":42},[39,25632,25633],{"class":3021},"sudo",[39,25635,25636],{"class":1319}," chmod",[39,25638,25639],{"class":56}," 666",[39,25641,25642],{"class":1319}," \u002Fdev\u002FttyACM0\n",[39,25644,25645,25647,25649,25651],{"class":41,"line":74},[39,25646,25633],{"class":3021},[39,25648,25636],{"class":1319},[39,25650,25639],{"class":56},[39,25652,25653],{"class":1319}," \u002Fdev\u002FttyACM1\n",[19,25655,25656],{},"说明：",[2205,25658,25659,25664,25670,25680],{},[1174,25660,25661,25663],{},[36,25662,25633],{},"：以 root 权限执行命令。",[1174,25665,25666,25669],{},[36,25667,25668],{},"chmod","：修改设备节点权限。",[1174,25671,25672,25675,25676,25679],{},[36,25673,25674],{},"666","：",[36,25677,25678],{},"rw-rw-rw-","，所有用户可读写。",[1174,25681,25682],{},"串口号必须替换为你机器上的真实端口。",[1133,25684,25685],{},"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":34,"searchDepth":74,"depth":74,"links":25687},[25688,25689,25690],{"id":25582,"depth":74,"text":25583},{"id":25596,"depth":74,"text":25597},{"id":25622,"depth":74,"text":25623},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":25574,"description":1142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25697,"title":25698,"body":25699,"description":1142,"extension":1143,"meta":25860,"navigation":1145,"path":25861,"seo":25862,"stem":25863,"__hash__":25864},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25700,"toc":25856},[25701,25705,25709,25715,25718,25775,25778,25782,25785,25853],[10,25702,25704],{"id":25703},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,25706,25708],{"id":25707},"_31-配置电机-id","3.1 配置电机 ID",[19,25710,25711,25712,25714],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[36,25713,57],{},"，需要改成机械臂链路里不冲突的编号。",[19,25716,25717],{},"方式一：用 LeRobot 命令逐步写入。",[29,25719,25721],{"className":24878,"code":25720,"language":24880,"meta":34,"style":34},"# 主臂舵机配置 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",[36,25722,25723,25728,25736,25743,25748,25752,25757,25763,25770],{"__ignoreMap":34},[39,25724,25725],{"class":41,"line":42},[39,25726,25727],{"class":102},"# 主臂舵机配置 ID\n",[39,25729,25730,25733],{"class":41,"line":74},[39,25731,25732],{"class":3021},"lerobot-setup-motors",[39,25734,25735],{"class":56}," \\\n",[39,25737,25738,25741],{"class":41,"line":99},[39,25739,25740],{"class":56},"  --teleop.type=so101_leader",[39,25742,25735],{"class":56},[39,25744,25745],{"class":41,"line":106},[39,25746,25747],{"class":56},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[39,25749,25750],{"class":41,"line":112},[39,25751,3458],{"emptyLinePlaceholder":1145},[39,25753,25754],{"class":41,"line":118},[39,25755,25756],{"class":102},"# 从臂舵机配置 ID\n",[39,25758,25759,25761],{"class":41,"line":413},[39,25760,25732],{"class":3021},[39,25762,25735],{"class":56},[39,25764,25765,25768],{"class":41,"line":419},[39,25766,25767],{"class":56},"  --robot.type=so101_follower",[39,25769,25735],{"class":56},[39,25771,25772],{"class":41,"line":425},[39,25773,25774],{"class":56},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,25776,25777],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,25779,25781],{"id":25780},"_32-机械臂校准","3.2 机械臂校准",[19,25783,25784],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[29,25786,25788],{"className":24878,"code":25787,"language":24880,"meta":34,"style":34},"# 主臂校准\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",[36,25789,25790,25795,25802,25808,25815,25820,25824,25829,25835,25841,25848],{"__ignoreMap":34},[39,25791,25792],{"class":41,"line":42},[39,25793,25794],{"class":102},"# 主臂校准\n",[39,25796,25797,25800],{"class":41,"line":74},[39,25798,25799],{"class":3021},"lerobot-calibrate",[39,25801,25735],{"class":56},[39,25803,25804,25806],{"class":41,"line":99},[39,25805,25740],{"class":56},[39,25807,25735],{"class":56},[39,25809,25810,25813],{"class":41,"line":106},[39,25811,25812],{"class":56},"  --teleop.port=\u002Fdev\u002FttyACM0",[39,25814,25735],{"class":56},[39,25816,25817],{"class":41,"line":112},[39,25818,25819],{"class":56},"  --teleop.id=my_awesome_leader_arm\n",[39,25821,25822],{"class":41,"line":118},[39,25823,3458],{"emptyLinePlaceholder":1145},[39,25825,25826],{"class":41,"line":413},[39,25827,25828],{"class":102},"# 从臂校准\n",[39,25830,25831,25833],{"class":41,"line":419},[39,25832,25799],{"class":3021},[39,25834,25735],{"class":56},[39,25836,25837,25839],{"class":41,"line":425},[39,25838,25767],{"class":56},[39,25840,25735],{"class":56},[39,25842,25843,25846],{"class":41,"line":443},[39,25844,25845],{"class":56},"  --robot.port=\u002Fdev\u002FttyACM1",[39,25847,25735],{"class":56},[39,25849,25850],{"class":41,"line":449},[39,25851,25852],{"class":56},"  --robot.id=my_awesome_follower_arm\n",[1133,25854,25855],{},"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":34,"searchDepth":74,"depth":74,"links":25857},[25858,25859],{"id":25707,"depth":74,"text":25708},{"id":25780,"depth":74,"text":25781},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25698,"description":1142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25866,"title":25867,"body":25868,"description":1142,"extension":1143,"meta":26059,"navigation":1145,"path":26060,"seo":26061,"stem":26062,"__hash__":26063},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25869,"toc":26055},[25870,25873,25877,25924,25928,25941,26004,26007,26052],[10,25871,25867],{"id":25872},"_4-遥操与相机接入",[14,25874,25876],{"id":25875},"_41-不带相机遥操","4.1 不带相机遥操",[29,25878,25880],{"className":24878,"code":25879,"language":24880,"meta":34,"style":34},"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",[36,25881,25882,25889,25895,25901,25908,25914,25920],{"__ignoreMap":34},[39,25883,25884,25887],{"class":41,"line":42},[39,25885,25886],{"class":3021},"lerobot-teleoperate",[39,25888,25735],{"class":56},[39,25890,25891,25893],{"class":41,"line":74},[39,25892,25767],{"class":56},[39,25894,25735],{"class":56},[39,25896,25897,25899],{"class":41,"line":99},[39,25898,25845],{"class":56},[39,25900,25735],{"class":56},[39,25902,25903,25906],{"class":41,"line":106},[39,25904,25905],{"class":56},"  --robot.id=my_awesome_follower_arm",[39,25907,25735],{"class":56},[39,25909,25910,25912],{"class":41,"line":112},[39,25911,25740],{"class":56},[39,25913,25735],{"class":56},[39,25915,25916,25918],{"class":41,"line":118},[39,25917,25812],{"class":56},[39,25919,25735],{"class":56},[39,25921,25922],{"class":41,"line":413},[39,25923,25819],{"class":56},[14,25925,25927],{"id":25926},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[29,25929,25931],{"className":24878,"code":25930,"language":24880,"meta":34,"style":34},"lerobot-find-cameras opencv\n",[36,25932,25933],{"__ignoreMap":34},[39,25934,25935,25938],{"class":41,"line":42},[39,25936,25937],{"class":3021},"lerobot-find-cameras",[39,25939,25940],{"class":1319}," opencv\n",[29,25942,25944],{"className":24878,"code":25943,"language":24880,"meta":34,"style":34},"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",[36,25945,25946,25952,25958,25964,25970,25980,25986,25992,25999],{"__ignoreMap":34},[39,25947,25948,25950],{"class":41,"line":42},[39,25949,25886],{"class":3021},[39,25951,25735],{"class":56},[39,25953,25954,25956],{"class":41,"line":74},[39,25955,25767],{"class":56},[39,25957,25735],{"class":56},[39,25959,25960,25962],{"class":41,"line":99},[39,25961,25845],{"class":56},[39,25963,25735],{"class":56},[39,25965,25966,25968],{"class":41,"line":106},[39,25967,25905],{"class":56},[39,25969,25735],{"class":56},[39,25971,25972,25975,25978],{"class":41,"line":112},[39,25973,25974],{"class":56},"  --robot.cameras=",[39,25976,25977],{"class":1319},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[39,25979,25735],{"class":56},[39,25981,25982,25984],{"class":41,"line":118},[39,25983,25740],{"class":56},[39,25985,25735],{"class":56},[39,25987,25988,25990],{"class":41,"line":413},[39,25989,25812],{"class":56},[39,25991,25735],{"class":56},[39,25993,25994,25997],{"class":41,"line":419},[39,25995,25996],{"class":56},"  --teleop.id=my_awesome_leader_arm",[39,25998,25735],{"class":56},[39,26000,26001],{"class":41,"line":425},[39,26002,26003],{"class":56},"  --display_data=true\n",[19,26005,26006],{},"相机参数说明：",[2205,26008,26009,26015,26021,26030,26040,26046],{},[1174,26010,26011,26014],{},[36,26012,26013],{},"front","：相机名称。",[1174,26016,26017,26020],{},[36,26018,26019],{},"type: opencv","：相机驱动类型。",[1174,26022,26023,26026,26027,25619],{},[36,26024,26025],{},"index_or_path","：设备编号或设备路径（如 ",[36,26028,26029],{},"\u002Fdev\u002Fvideo4",[1174,26031,26032,26035,26036,26039],{},[36,26033,26034],{},"width"," \u002F ",[36,26037,26038],{},"height","：图像分辨率。",[1174,26041,26042,26045],{},[36,26043,26044],{},"fps","：采样帧率。",[1174,26047,26048,26051],{},[36,26049,26050],{},"--display_data=true","：启用实时可视化。",[1133,26053,26054],{},"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":34,"searchDepth":74,"depth":74,"links":26056},[26057,26058],{"id":25875,"depth":74,"text":25876},{"id":25926,"depth":74,"text":25927},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25867,"description":1142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26065,"title":26066,"body":26067,"description":1142,"extension":1143,"meta":26239,"navigation":1145,"path":26240,"seo":26241,"stem":26242,"__hash__":26243},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26068,"toc":26234},[26069,26073,26077,26082,26087,26090,26132,26138,26142,26191,26196,26200,26203,26211,26216,26221,26226,26231],[10,26070,26072],{"id":26071},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26074,26076],{"id":26075},"_51-生成访问令牌","5.1 生成访问令牌",[19,26078,26079],{},[269,26080],{"alt":34,"src":26081},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,26083,26084],{},[269,26085],{"alt":34,"src":26086},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,26088,26089],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[29,26091,26093],{"className":24878,"code":26092,"language":24880,"meta":34,"style":34},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[36,26094,26095,26108],{"__ignoreMap":34},[39,26096,26097,26100,26103,26105],{"class":41,"line":42},[39,26098,26099],{"class":49},"export",[39,26101,26102],{"class":45}," HF_TOKEN",[39,26104,50],{"class":49},[39,26106,26107],{"class":1319},"\"your_huggingface_token\"\n",[39,26109,26110,26113,26116,26119,26122,26124,26127,26129],{"class":41,"line":74},[39,26111,26112],{"class":3021},"hf",[39,26114,26115],{"class":1319}," auth",[39,26117,26118],{"class":1319}," login",[39,26120,26121],{"class":56}," --token",[39,26123,10780],{"class":1319},[39,26125,26126],{"class":45},"$HF_TOKEN",[39,26128,1462],{"class":1319},[39,26130,26131],{"class":56}," --add-to-git-credential\n",[19,26133,26134,26137],{},[36,26135,26136],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26139,26141],{"id":26140},"_52-验证登录","5.2 验证登录",[29,26143,26145],{"className":24878,"code":26144,"language":24880,"meta":34,"style":34},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[36,26146,26147,26178],{"__ignoreMap":34},[39,26148,26149,26152,26154,26157,26159,26161,26164,26167,26170,26173,26176],{"class":41,"line":42},[39,26150,26151],{"class":45},"HF_USER",[39,26153,50],{"class":49},[39,26155,26156],{"class":45},"$(",[39,26158,26112],{"class":3021},[39,26160,26115],{"class":1319},[39,26162,26163],{"class":1319}," whoami",[39,26165,26166],{"class":49}," |",[39,26168,26169],{"class":3021}," head",[39,26171,26172],{"class":56}," -n",[39,26174,26175],{"class":56}," 1",[39,26177,209],{"class":45},[39,26179,26180,26183,26185,26188],{"class":41,"line":74},[39,26181,26182],{"class":56},"echo",[39,26184,10780],{"class":1319},[39,26186,26187],{"class":45},"$HF_USER",[39,26189,26190],{"class":1319},"\"\n",[19,26192,26193],{},[269,26194],{"alt":34,"src":26195},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26197,26199],{"id":26198},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,26201,26202],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[2205,26204,26205,26208],{},[1174,26206,26207],{},"Dataset Repo（用于上传演示数据）",[1174,26209,26210],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,26212,26213],{},[269,26214],{"alt":34,"src":26215},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,26217,26218],{},[269,26219],{"alt":34,"src":26220},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,26222,26223],{},[269,26224],{"alt":34,"src":26225},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,26227,26228],{},[269,26229],{"alt":34,"src":26230},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1133,26232,26233],{},"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":34,"searchDepth":74,"depth":74,"links":26235},[26236,26237,26238],{"id":26075,"depth":74,"text":26076},{"id":26140,"depth":74,"text":26141},{"id":26198,"depth":74,"text":26199},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26066,"description":1142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26245,"title":26246,"body":26247,"description":1142,"extension":1143,"meta":26444,"navigation":1145,"path":26445,"seo":26446,"stem":26447,"__hash__":26448},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26248,"toc":26439},[26249,26253,26257,26353,26361,26366,26370,26386,26389,26393,26436],[10,26250,26252],{"id":26251},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26254,26256],{"id":26255},"_61-录制示教数据","6.1 录制示教数据",[29,26258,26260],{"className":24878,"code":26259,"language":24880,"meta":34,"style":34},"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",[36,26261,26262,26269,26275,26281,26287,26296,26302,26308,26314,26321,26331,26338,26348],{"__ignoreMap":34},[39,26263,26264,26267],{"class":41,"line":42},[39,26265,26266],{"class":3021},"lerobot-record",[39,26268,25735],{"class":56},[39,26270,26271,26273],{"class":41,"line":74},[39,26272,25767],{"class":56},[39,26274,25735],{"class":56},[39,26276,26277,26279],{"class":41,"line":99},[39,26278,25845],{"class":56},[39,26280,25735],{"class":56},[39,26282,26283,26285],{"class":41,"line":106},[39,26284,25905],{"class":56},[39,26286,25735],{"class":56},[39,26288,26289,26291,26294],{"class":41,"line":112},[39,26290,25974],{"class":56},[39,26292,26293],{"class":1319},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[39,26295,25735],{"class":56},[39,26297,26298,26300],{"class":41,"line":118},[39,26299,25740],{"class":56},[39,26301,25735],{"class":56},[39,26303,26304,26306],{"class":41,"line":413},[39,26305,25812],{"class":56},[39,26307,25735],{"class":56},[39,26309,26310,26312],{"class":41,"line":419},[39,26311,25996],{"class":56},[39,26313,25735],{"class":56},[39,26315,26316,26319],{"class":41,"line":425},[39,26317,26318],{"class":56},"  --display_data=true",[39,26320,25735],{"class":56},[39,26322,26323,26326,26329],{"class":41,"line":443},[39,26324,26325],{"class":56},"  --dataset.repo_id=",[39,26327,26328],{"class":1319},"\"Embodied-AI-6\u002Fso101_test\"",[39,26330,25735],{"class":56},[39,26332,26333,26336],{"class":41,"line":449},[39,26334,26335],{"class":56},"  --dataset.num_episodes=10",[39,26337,25735],{"class":56},[39,26339,26340,26343,26346],{"class":41,"line":455},[39,26341,26342],{"class":56},"  --dataset.single_task=",[39,26344,26345],{"class":1319},"\"Grab the green cube\"",[39,26347,25735],{"class":56},[39,26349,26350],{"class":41,"line":461},[39,26351,26352],{"class":56},"  --resume=true\n",[2205,26354,26355],{},[1174,26356,26357,26360],{},[36,26358,26359],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,26362,26363],{},[269,26364],{"alt":34,"src":26365},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,26367,26369],{"id":26368},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[29,26371,26373],{"className":24878,"code":26372,"language":24880,"meta":34,"style":34},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[36,26374,26375],{"__ignoreMap":34},[39,26376,26377,26380,26383],{"class":41,"line":42},[39,26378,26379],{"class":3021},"rm",[39,26381,26382],{"class":56}," -rf",[39,26384,26385],{"class":1319}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,26387,26388],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,26390,26392],{"id":26391},"_63-回放指定-episode","6.3 回放指定 episode",[29,26394,26396],{"className":24878,"code":26395,"language":24880,"meta":34,"style":34},"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",[36,26397,26398,26405,26411,26417,26423,26431],{"__ignoreMap":34},[39,26399,26400,26403],{"class":41,"line":42},[39,26401,26402],{"class":3021},"lerobot-replay",[39,26404,25735],{"class":56},[39,26406,26407,26409],{"class":41,"line":74},[39,26408,25767],{"class":56},[39,26410,25735],{"class":56},[39,26412,26413,26415],{"class":41,"line":99},[39,26414,25845],{"class":56},[39,26416,25735],{"class":56},[39,26418,26419,26421],{"class":41,"line":106},[39,26420,25905],{"class":56},[39,26422,25735],{"class":56},[39,26424,26425,26427,26429],{"class":41,"line":112},[39,26426,26325],{"class":56},[39,26428,26328],{"class":1319},[39,26430,25735],{"class":56},[39,26432,26433],{"class":41,"line":118},[39,26434,26435],{"class":56},"  --dataset.episode=0\n",[1133,26437,26438],{},"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":34,"searchDepth":74,"depth":74,"links":26440},[26441,26442,26443],{"id":26255,"depth":74,"text":26256},{"id":26368,"depth":74,"text":26369},{"id":26391,"depth":74,"text":26392},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26246,"description":1142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":26450,"title":26451,"body":26452,"description":1142,"extension":1143,"meta":26580,"navigation":1145,"path":26581,"seo":26582,"stem":26583,"__hash__":26584},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":26453,"toc":26578},[26454,26458,26521,26524,26571,26576],[10,26455,26457],{"id":26456},"_7-act-模型训练","7. ACT 模型训练",[29,26459,26461],{"className":24878,"code":26460,"language":24880,"meta":34,"style":34},"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",[36,26462,26463,26470,26478,26485,26492,26499,26506,26513],{"__ignoreMap":34},[39,26464,26465,26468],{"class":41,"line":42},[39,26466,26467],{"class":3021},"lerobot-train",[39,26469,25735],{"class":56},[39,26471,26472,26474,26476],{"class":41,"line":74},[39,26473,26325],{"class":56},[39,26475,26328],{"class":1319},[39,26477,25735],{"class":56},[39,26479,26480,26483],{"class":41,"line":99},[39,26481,26482],{"class":56},"  --policy.type=act",[39,26484,25735],{"class":56},[39,26486,26487,26490],{"class":41,"line":106},[39,26488,26489],{"class":56},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[39,26491,25735],{"class":56},[39,26493,26494,26497],{"class":41,"line":112},[39,26495,26496],{"class":56},"  --job_name=act_so101_test",[39,26498,25735],{"class":56},[39,26500,26501,26504],{"class":41,"line":118},[39,26502,26503],{"class":56},"  --policy.device=cuda",[39,26505,25735],{"class":56},[39,26507,26508,26511],{"class":41,"line":413},[39,26509,26510],{"class":56},"  --wandb.enable=false",[39,26512,25735],{"class":56},[39,26514,26515,26518],{"class":41,"line":419},[39,26516,26517],{"class":56},"  --policy.repo_id=",[39,26519,26520],{"class":1319},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,26522,26523],{},"参数说明：",[2205,26525,26526,26532,26538,26544,26550,26559,26565],{},[1174,26527,26528,26531],{},[36,26529,26530],{},"--dataset.repo_id","：训练数据集仓库。",[1174,26533,26534,26537],{},[36,26535,26536],{},"--policy.type=act","：策略模型类型为 ACT。",[1174,26539,26540,26543],{},[36,26541,26542],{},"--output_dir","：本地训练输出目录。",[1174,26545,26546,26549],{},[36,26547,26548],{},"--job_name","：训练任务名称。",[1174,26551,26552,26555,26556,25619],{},[36,26553,26554],{},"--policy.device","：训练设备（如 ",[36,26557,26558],{},"cuda",[1174,26560,26561,26564],{},[36,26562,26563],{},"--wandb.enable","：是否启用 WandB 可视化。",[1174,26566,26567,26570],{},[36,26568,26569],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,26572,26573],{},[269,26574],{"alt":34,"src":26575},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1133,26577,26438],{},{"title":34,"searchDepth":74,"depth":74,"links":26579},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":26451,"description":1142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":26586,"title":26587,"body":26588,"description":1142,"extension":1143,"meta":26675,"navigation":1145,"path":26676,"seo":26677,"stem":26678,"__hash__":26679},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":26589,"toc":26673},[26590,26593,26596,26663,26671],[10,26591,26587],{"id":26592},"_8-策略部署与自动采集",[19,26594,26595],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[29,26597,26599],{"className":24878,"code":26598,"language":24880,"meta":34,"style":34},"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",[36,26600,26601,26607,26613,26619,26627,26633,26640,26648,26656],{"__ignoreMap":34},[39,26602,26603,26605],{"class":41,"line":42},[39,26604,26266],{"class":3021},[39,26606,25735],{"class":56},[39,26608,26609,26611],{"class":41,"line":74},[39,26610,25767],{"class":56},[39,26612,25735],{"class":56},[39,26614,26615,26617],{"class":41,"line":99},[39,26616,25845],{"class":56},[39,26618,25735],{"class":56},[39,26620,26621,26623,26625],{"class":41,"line":106},[39,26622,25974],{"class":56},[39,26624,26293],{"class":1319},[39,26626,25735],{"class":56},[39,26628,26629,26631],{"class":41,"line":112},[39,26630,25905],{"class":56},[39,26632,25735],{"class":56},[39,26634,26635,26638],{"class":41,"line":118},[39,26636,26637],{"class":56},"  --display_data=false",[39,26639,25735],{"class":56},[39,26641,26642,26644,26646],{"class":41,"line":413},[39,26643,26325],{"class":56},[39,26645,26328],{"class":1319},[39,26647,25735],{"class":56},[39,26649,26650,26652,26654],{"class":41,"line":419},[39,26651,26342],{"class":56},[39,26653,26345],{"class":1319},[39,26655,25735],{"class":56},[39,26657,26658,26661],{"class":41,"line":425},[39,26659,26660],{"class":56},"  --policy.path=",[39,26662,26520],{"class":1319},[2205,26664,26665],{},[1174,26666,26667,26670],{},[36,26668,26669],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1133,26672,26438],{},{"title":34,"searchDepth":74,"depth":74,"links":26674},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":26587,"description":1142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26681,"title":26682,"body":26683,"description":1142,"extension":1143,"meta":26712,"navigation":1145,"path":26713,"seo":26714,"stem":26715,"__hash__":26716},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26684,"toc":26710},[26685,26689,26692,26698,26701,26707],[10,26686,26688],{"id":26687},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,26690,26691],{},"项目地址：",[19,26693,26694],{},[46,26695,26696],{"href":26696,"rel":26697},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24921],[19,26699,26700],{},"参考教程：",[19,26702,26703],{},[46,26704,26705],{"href":26705,"rel":26706},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24921],[19,26708,26709],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":34,"searchDepth":74,"depth":74,"links":26711},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26682,"description":1142},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26718,"title":26719,"body":26720,"description":26724,"extension":1143,"meta":26725,"navigation":1145,"path":26726,"seo":26727,"stem":26728,"__hash__":26729},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26721,"toc":26722},[],{"title":34,"searchDepth":74,"depth":74,"links":26723},[],"act复现",{"category":24434},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26719,"description":26724},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26731,"title":26732,"body":26733,"description":34,"extension":1143,"meta":27035,"navigation":1145,"path":27036,"seo":27037,"stem":27038,"__hash__":27039},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26734,"toc":27027},[26735,26738,26742,26752,26759,26766,26769,26776,26779,26782,26786,26798,26802,26848,26851,26854,26857,26860,26863,26867,26905,26911,26915,26969,26974,26977,26980,26985,26988,26993,26996,26999,27003,27006,27009,27013],[10,26736,26732],{"id":26737},"_1简介",[1188,26739,26741],{"id":26740},"_11什么是-docker","1.1什么是 Docker？",[19,26743,26744,26745,26748,26749],{},"Docker 是一个开源的 ",[304,26746,26747],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[304,26750,26751],{},"一次构建，到处运行。",[19,26753,26754,26755,26758],{},"“ ",[304,26756,26757],{},"一次构建，到处运行"," ”也就是说：",[1171,26760,26761],{},[1174,26762,26763],{},[304,26764,26765],{},"之前：",[19,26767,26768],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[1171,26770,26771],{},[1174,26772,26773],{},[304,26774,26775],{},"使用docker后：",[19,26777,26778],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,26780,26781],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[1188,26783,26785],{"id":26784},"_12它是怎么工作的","1.2.它是怎么工作的？",[2205,26787,26788,26791],{},[1174,26789,26790],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[1174,26792,26793,26794,26797],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[304,26795,26796],{},"无论在哪运行都一样稳定"," 。",[1188,26799,26801],{"id":26800},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[1352,26803,26804,26814],{},[1355,26805,26806],{},[1358,26807,26808,26811],{},[1361,26809,26810],{"align":24792},"概念",[1361,26812,26813],{"align":24792},"解释",[1398,26815,26816,26824,26832,26840],{},[1358,26817,26818,26821],{},[1403,26819,26820],{"align":24792},"镜像",[1403,26822,26823],{"align":24792},"Image，运行容器的模板，像是一个应用快照",[1358,26825,26826,26829],{},[1403,26827,26828],{"align":24792},"容器",[1403,26830,26831],{"align":24792},"Container，运行中的镜像实例，有自己的文件系统、网络等",[1358,26833,26834,26837],{},[1403,26835,26836],{"align":24792},"Dockerfile",[1403,26838,26839],{"align":24792},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[1358,26841,26842,26845],{},[1403,26843,26844],{"align":24792},"仓库",[1403,26846,26847],{"align":24792},"Registry，存放镜像的地方，比如 Docker Hub",[19,26849,26850],{},"抽象化理解:",[19,26852,26853],{},"Docker镜像≈C++类",[19,26855,26856],{},"Docker容器≈C++类实例(即对象)",[19,26858,26859],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,26861,26862],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[1188,26864,26866],{"id":26865},"_14类比理解","1.4.类比理解",[1352,26868,26869,26879],{},[1355,26870,26871],{},[1358,26872,26873,26876],{},[1361,26874,26875],{"align":24792},"传统部署",[1361,26877,26878],{"align":24792},"Docker部署",[1398,26880,26881,26889,26897],{},[1358,26882,26883,26886],{},[1403,26884,26885],{"align":24792},"手动安装依赖、调试版本不一致问题",[1403,26887,26888],{"align":24792},"一次打包环境和代码",[1358,26890,26891,26894],{},[1403,26892,26893],{"align":24792},"程序“裸奔”跑在系统上",[1403,26895,26896],{"align":24792},"程序“穿着容器”隔离运行",[1358,26898,26899,26902],{},[1403,26900,26901],{"align":24792},"容易“在我电脑上能跑”",[1403,26903,26904],{"align":24792},"保证“无论在哪都能跑”",[19,26906,26907,26908],{},"就像快递包裹： ",[304,26909,26910],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[1188,26912,26914],{"id":26913},"_15docker-的核心优势","1.5.Docker 的核心优势",[1352,26916,26917,26927],{},[1355,26918,26919],{},[1358,26920,26921,26924],{},[1361,26922,26923],{"align":24792},"优势",[1361,26925,26926],{"align":24792},"说明",[1398,26928,26929,26937,26945,26953,26961],{},[1358,26930,26931,26934],{},[1403,26932,26933],{"align":24792},"轻量级",[1403,26935,26936],{"align":24792},"基于系统内核共享，启动速度快，占资源少",[1358,26938,26939,26942],{},[1403,26940,26941],{"align":24792},"跨平台",[1403,26943,26944],{"align":24792},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[1358,26946,26947,26950],{},[1403,26948,26949],{"align":24792},"易于迁移部署",[1403,26951,26952],{"align":24792},"应用和环境一起封装，不怕依赖不一致",[1358,26954,26955,26958],{},[1403,26956,26957],{"align":24792},"易于版本控制",[1403,26959,26960],{"align":24792},"镜像版本可控，支持回滚",[1358,26962,26963,26966],{},[1403,26964,26965],{"align":24792},"生态丰富",[1403,26967,26968],{"align":24792},"Docker Hub 上有成千上万的现成镜像可用",[1171,26970,26971],{},[1174,26972,26973],{},"在Linux上可以几乎实现无性能损失。",[19,26975,26976],{},"docker里的发行版和本机共用Linux内核。",[19,26978,26979],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[1171,26981,26982],{},[1174,26983,26984],{},"可以快速部署在绝大多数Linux发行版",[19,26986,26987],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[1171,26989,26990],{},[1174,26991,26992],{},"配置环境简单",[19,26994,26995],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26997,26998],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[1171,27000,27001],{},[1174,27002,26965],{},[19,27004,27005],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27007,27008],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[1188,27010,27012],{"id":27011},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[2205,27014,27015,27018,27021,27024],{},[1174,27016,27017],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[1174,27019,27020],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[1174,27022,27023],{},"微服务架构：每个服务一个容器，灵活组合",[1174,27025,27026],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":34,"searchDepth":74,"depth":74,"links":27028},[27029,27030,27031,27032,27033,27034],{"id":26740,"depth":99,"text":26741},{"id":26784,"depth":99,"text":26785},{"id":26800,"depth":99,"text":26801},{"id":26865,"depth":99,"text":26866},{"id":26913,"depth":99,"text":26914},{"id":27011,"depth":99,"text":27012},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26732,"description":34},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27041,"title":27042,"body":27043,"description":34,"extension":1143,"meta":27776,"navigation":1145,"path":27777,"seo":27778,"stem":27779,"__hash__":27780},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27044,"toc":27771},[27045,27048,27052,27055,27058,27064,27070,27074,27083,27086,27143,27146,27197,27200,27283,27286,27323,27327,27338,27351,27358,27361,27441,27444,27494,27497,27520,27524,27531,27534,27550,27556,27559,27575,27581,27584,27600,27614,27620,27640,27646,27649,27661,27667,27670,27684,27690,27693,27713,27718,27721,27724,27728,27731,27734,27737,27744,27747,27750,27753,27758,27763,27768],[10,27046,27042],{"id":27047},"_2安装docker",[1188,27049,27051],{"id":27050},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,27053,27054],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,27056,27057],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,27059,27060],{},[46,27061,27062],{"href":27062,"rel":27063},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24921],[19,27065,27066],{},[46,27067,27068],{"href":27068,"rel":27069},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24921],[23054,27071,27073],{"id":27072},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,27075,27076,27077,27082],{},"以下内容根据 ",[46,27078,27081],{"href":27079,"rel":27080},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24921],"官方文档"," 修改而来。",[19,27084,27085],{},"如果你过去安装过 docker，先删掉：",[29,27087,27089],{"className":24878,"code":27088,"language":24880,"meta":34,"style":34},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[36,27090,27091],{"__ignoreMap":34},[39,27092,27093,27095,27098,27101,27104,27107,27110,27113,27116,27119,27122,27125,27128,27131,27134,27137,27140],{"class":41,"line":42},[39,27094,4083],{"class":49},[39,27096,27097],{"class":45}," pkg ",[39,27099,27100],{"class":49},"in",[39,27102,27103],{"class":1319}," docker.io",[39,27105,27106],{"class":1319}," docker-doc",[39,27108,27109],{"class":1319}," docker-compose",[39,27111,27112],{"class":1319}," docker-compose-v2",[39,27114,27115],{"class":1319}," podman-docker",[39,27117,27118],{"class":1319}," containerd",[39,27120,27121],{"class":1319}," runc",[39,27123,27124],{"class":45},"; ",[39,27126,27127],{"class":49},"do",[39,27129,27130],{"class":3021}," sudo",[39,27132,27133],{"class":1319}," apt-get",[39,27135,27136],{"class":1319}," remove",[39,27138,27139],{"class":45}," $pkg; ",[39,27141,27142],{"class":49},"done\n",[19,27144,27145],{},"首先安装依赖和GPG：",[29,27147,27151],{"className":27148,"code":27149,"language":27150,"meta":34,"style":34},"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",[36,27152,27153,27158,27163,27168,27173,27178,27183,27187,27192],{"__ignoreMap":34},[39,27154,27155],{"class":41,"line":42},[39,27156,27157],{},"# Add Docker's official GPG key:\n",[39,27159,27160],{"class":41,"line":74},[39,27161,27162],{},"sudo apt-get update\n",[39,27164,27165],{"class":41,"line":99},[39,27166,27167],{},"sudo apt-get install ca-certificates curl\n",[39,27169,27170],{"class":41,"line":106},[39,27171,27172],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[39,27174,27175],{"class":41,"line":112},[39,27176,27177],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[39,27179,27180],{"class":41,"line":118},[39,27181,27182],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[39,27184,27185],{"class":41,"line":413},[39,27186,3458],{"emptyLinePlaceholder":1145},[39,27188,27189],{"class":41,"line":419},[39,27190,27191],{},"# 如果上面这行报错就弄下面这行\n",[39,27193,27194],{"class":41,"line":425},[39,27195,27196],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,27198,27199],{},"信任 Docker 的 GPG 公钥并添加仓库：",[29,27201,27203],{"className":24878,"code":27202,"language":24880,"meta":34,"style":34},"# 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",[36,27204,27205,27210,27216,27233,27266],{"__ignoreMap":34},[39,27206,27207],{"class":41,"line":42},[39,27208,27209],{"class":102},"# Add the repository to Apt sources:\n",[39,27211,27212,27214],{"class":41,"line":74},[39,27213,26182],{"class":56},[39,27215,25735],{"class":56},[39,27217,27218,27221,27224,27227,27230],{"class":41,"line":99},[39,27219,27220],{"class":1319},"  \"deb [arch=$(",[39,27222,27223],{"class":3021},"dpkg",[39,27225,27226],{"class":56}," --print-architecture",[39,27228,27229],{"class":1319},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[39,27231,27232],{"class":56},"\\\n",[39,27234,27235,27238,27240,27242,27245,27248,27250,27252,27255,27257,27259,27262,27264],{"class":41,"line":106},[39,27236,27237],{"class":1319},"  \"",[39,27239,26156],{"class":45},[39,27241,1758],{"class":56},[39,27243,27244],{"class":1319}," \u002Fetc\u002Fos-release",[39,27246,27247],{"class":45}," && ",[39,27249,26182],{"class":56},[39,27251,10780],{"class":1319},[39,27253,27254],{"class":45},"$VERSION_CODENAME",[39,27256,1462],{"class":1319},[39,27258,1632],{"class":45},[39,27260,27261],{"class":1319},"\" stable\"",[39,27263,26166],{"class":49},[39,27265,25735],{"class":56},[39,27267,27268,27271,27274,27277,27280],{"class":41,"line":112},[39,27269,27270],{"class":3021},"  sudo",[39,27272,27273],{"class":1319}," tee",[39,27275,27276],{"class":1319}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[39,27278,27279],{"class":49}," >",[39,27281,27282],{"class":1319}," \u002Fdev\u002Fnull\n",[19,27284,27285],{},"最后安装",[29,27287,27289],{"className":24878,"code":27288,"language":24880,"meta":34,"style":34},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[36,27290,27291,27300],{"__ignoreMap":34},[39,27292,27293,27295,27297],{"class":41,"line":42},[39,27294,25633],{"class":3021},[39,27296,27133],{"class":1319},[39,27298,27299],{"class":1319}," update\n",[39,27301,27302,27304,27306,27308,27311,27314,27317,27320],{"class":41,"line":74},[39,27303,25633],{"class":3021},[39,27305,27133],{"class":1319},[39,27307,24890],{"class":1319},[39,27309,27310],{"class":1319}," docker-ce",[39,27312,27313],{"class":1319}," docker-ce-cli",[39,27315,27316],{"class":1319}," containerd.io",[39,27318,27319],{"class":1319}," docker-buildx-plugin",[39,27321,27322],{"class":1319}," docker-compose-plugin\n",[23054,27324,27326],{"id":27325},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,27328,27329,27330,27333,27334,27337],{},"查看自己自己包管理工具版本（dnf是 ",[304,27331,27332],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[304,27335,27336],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[29,27339,27341],{"className":24878,"code":27340,"language":24880,"meta":34,"style":34},"dnf --version\n",[36,27342,27343],{"__ignoreMap":34},[39,27344,27345,27348],{"class":41,"line":42},[39,27346,27347],{"class":3021},"dnf",[39,27349,27350],{"class":56}," --version\n",[19,27352,27076,27353,27357],{},[46,27354,27081],{"href":27355,"rel":27356},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24921]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,27359,27360],{},"如果你之前安装过 docker，请先删掉",[29,27362,27364],{"className":24878,"code":27363,"language":24880,"meta":34,"style":34},"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",[36,27365,27366,27380,27387,27394,27401,27408,27415,27422,27429,27436],{"__ignoreMap":34},[39,27367,27368,27370,27373,27375,27378],{"class":41,"line":42},[39,27369,25633],{"class":3021},[39,27371,27372],{"class":1319}," dnf",[39,27374,27136],{"class":1319},[39,27376,27377],{"class":1319}," docker",[39,27379,25735],{"class":56},[39,27381,27382,27385],{"class":41,"line":74},[39,27383,27384],{"class":1319},"                  docker-client",[39,27386,25735],{"class":56},[39,27388,27389,27392],{"class":41,"line":99},[39,27390,27391],{"class":1319},"                  docker-client-latest",[39,27393,25735],{"class":56},[39,27395,27396,27399],{"class":41,"line":106},[39,27397,27398],{"class":1319},"                  docker-common",[39,27400,25735],{"class":56},[39,27402,27403,27406],{"class":41,"line":112},[39,27404,27405],{"class":1319},"                  docker-latest",[39,27407,25735],{"class":56},[39,27409,27410,27413],{"class":41,"line":118},[39,27411,27412],{"class":1319},"                  docker-latest-logrotate",[39,27414,25735],{"class":56},[39,27416,27417,27420],{"class":41,"line":413},[39,27418,27419],{"class":1319},"                  docker-logrotate",[39,27421,25735],{"class":56},[39,27423,27424,27427],{"class":41,"line":419},[39,27425,27426],{"class":1319},"                  docker-selinux",[39,27428,25735],{"class":56},[39,27430,27431,27434],{"class":41,"line":425},[39,27432,27433],{"class":1319},"                  docker-engine-selinux",[39,27435,25735],{"class":56},[39,27437,27438],{"class":41,"line":443},[39,27439,27440],{"class":1319},"                  docker-engine\n",[19,27442,27443],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[29,27445,27447],{"className":24878,"code":27446,"language":24880,"meta":34,"style":34},"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",[36,27448,27449,27463,27478],{"__ignoreMap":34},[39,27450,27451,27453,27455,27458,27460],{"class":41,"line":42},[39,27452,25633],{"class":3021},[39,27454,27372],{"class":1319},[39,27456,27457],{"class":56}," -y",[39,27459,24890],{"class":1319},[39,27461,27462],{"class":1319}," dnf-plugins-core\n",[39,27464,27465,27467,27469,27472,27475],{"class":41,"line":74},[39,27466,25633],{"class":3021},[39,27468,27372],{"class":1319},[39,27470,27471],{"class":1319}," config-manager",[39,27473,27474],{"class":1319}," addrepo",[39,27476,27477],{"class":56}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[39,27479,27480,27482,27485,27488,27491],{"class":41,"line":99},[39,27481,25633],{"class":3021},[39,27483,27484],{"class":1319}," sed",[39,27486,27487],{"class":56}," -i",[39,27489,27490],{"class":1319}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[39,27492,27493],{"class":1319}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,27495,27496],{},"最后安装：",[29,27498,27500],{"className":24878,"code":27499,"language":24880,"meta":34,"style":34},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[36,27501,27502],{"__ignoreMap":34},[39,27503,27504,27506,27508,27510,27512,27514,27516,27518],{"class":41,"line":42},[39,27505,25633],{"class":3021},[39,27507,27372],{"class":1319},[39,27509,24890],{"class":1319},[39,27511,27310],{"class":1319},[39,27513,27313],{"class":1319},[39,27515,27316],{"class":1319},[39,27517,27319],{"class":1319},[39,27519,27322],{"class":1319},[1188,27521,27523],{"id":27522},"_22配置环境","2.2.配置环境",[23054,27525,27527,27530],{"id":27526},"_221检查-docker-服务状态",[304,27528,27529],{},"2.2.1.检查 Docker 服务状态"," ：",[19,27532,27533],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[29,27535,27537],{"className":24878,"code":27536,"language":24880,"meta":34,"style":34},"systemctl status docker\n",[36,27538,27539],{"__ignoreMap":34},[39,27540,27541,27544,27547],{"class":41,"line":42},[39,27542,27543],{"class":3021},"systemctl",[39,27545,27546],{"class":1319}," status",[39,27548,27549],{"class":1319}," docker\n",[23054,27551,27553,27530],{"id":27552},"_222启动-docker-服务",[304,27554,27555],{},"2.2.2.启动 Docker 服务",[19,27557,27558],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[29,27560,27562],{"className":24878,"code":27561,"language":24880,"meta":34,"style":34},"sudo systemctl start docker\n",[36,27563,27564],{"__ignoreMap":34},[39,27565,27566,27568,27571,27573],{"class":41,"line":42},[39,27567,25633],{"class":3021},[39,27569,27570],{"class":1319}," systemctl",[39,27572,5242],{"class":1319},[39,27574,27549],{"class":1319},[23054,27576,27578,27530],{"id":27577},"_223设置-docker-开机自启",[304,27579,27580],{},"2.2.3.设置 Docker 开机自启",[19,27582,27583],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[29,27585,27587],{"className":24878,"code":27586,"language":24880,"meta":34,"style":34},"sudo systemctl enable docker\n",[36,27588,27589],{"__ignoreMap":34},[39,27590,27591,27593,27595,27598],{"class":41,"line":42},[39,27592,25633],{"class":3021},[39,27594,27570],{"class":1319},[39,27596,27597],{"class":1319}," enable",[39,27599,27549],{"class":1319},[23054,27601,27603,14851,27606,14851,27611,27530],{"id":27602},"_224将用户添加到-docker-组",[304,27604,27605],{},"2.2.4.将用户添加到",[304,27607,27608],{},[36,27609,27610],{},"docker",[304,27612,27613],{},"组",[19,27615,27616,27617,27619],{},"使用以下命令将当前用户添加到 ",[36,27618,27610],{}," 组：",[29,27621,27623],{"className":24878,"code":27622,"language":24880,"meta":34,"style":34},"sudo usermod -aG docker $USER\n",[36,27624,27625],{"__ignoreMap":34},[39,27626,27627,27629,27632,27635,27637],{"class":41,"line":42},[39,27628,25633],{"class":3021},[39,27630,27631],{"class":1319}," usermod",[39,27633,27634],{"class":56}," -aG",[39,27636,27377],{"class":1319},[39,27638,27639],{"class":45}," $USER\n",[23054,27641,27643,27530],{"id":27642},"_225退出并重新登录",[304,27644,27645],{},"2.2.5.退出并重新登录",[19,27647,27648],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[29,27650,27652],{"className":24878,"code":27651,"language":24880,"meta":34,"style":34},"newgrp docker\n",[36,27653,27654],{"__ignoreMap":34},[39,27655,27656,27659],{"class":41,"line":42},[39,27657,27658],{"class":3021},"newgrp",[39,27660,27549],{"class":1319},[23054,27662,27664,27530],{"id":27663},"_226重新启动-docker-服务如果需要",[304,27665,27666],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,27668,27669],{},"确保 Docker 服务正在运行，可以使用以下命令：",[29,27671,27672],{"className":24878,"code":27561,"language":24880,"meta":34,"style":34},[36,27673,27674],{"__ignoreMap":34},[39,27675,27676,27678,27680,27682],{"class":41,"line":42},[39,27677,25633],{"class":3021},[39,27679,27570],{"class":1319},[39,27681,5242],{"class":1319},[39,27683,27549],{"class":1319},[23054,27685,27687,27530],{"id":27686},"_227重启电脑后检查-docker-服务状态",[304,27688,27689],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,27691,27692],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[29,27694,27696],{"className":24878,"code":27695,"language":24880,"meta":34,"style":34},"sudo reboot\nsystemctl status docker\n",[36,27697,27698,27705],{"__ignoreMap":34},[39,27699,27700,27702],{"class":41,"line":42},[39,27701,25633],{"class":3021},[39,27703,27704],{"class":1319}," reboot\n",[39,27706,27707,27709,27711],{"class":41,"line":74},[39,27708,27543],{"class":3021},[39,27710,27546],{"class":1319},[39,27712,27549],{"class":1319},[19,27714,27715],{},[269,27716],{"alt":34,"src":27717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,27719,27720],{},"第三行显示enabled说明开机自启动成功",[19,27722,27723],{},"按q退出",[1188,27725,27727],{"id":27726},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,27729,27730],{},"优先使用linux来使用docker是比较好的",[19,27732,27733],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,27735,27736],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,27738,27739,27740],{},"官方下载安装:",[46,27741,27742],{"href":27742,"rel":27743},"https:\u002F\u002Fwww.docker.com\u002F",[24921],[19,27745,27746],{},"Windows的Docker显卡直通与USB直通:",[19,27748,27749],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,27751,27752],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,27754,27755],{},[269,27756],{"alt":34,"src":27757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,27759,27760],{},[269,27761],{"alt":34,"src":27762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,27764,27765],{},[269,27766],{"alt":34,"src":27767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1133,27769,27770],{},"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":34,"searchDepth":74,"depth":74,"links":27772},[27773,27774,27775],{"id":27050,"depth":99,"text":27051},{"id":27522,"depth":99,"text":27523},{"id":27726,"depth":99,"text":27727},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27042,"description":34},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27782,"title":27783,"body":27784,"description":27791,"extension":1143,"meta":28484,"navigation":1145,"path":28485,"seo":28486,"stem":28487,"__hash__":28488},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27785,"toc":28478},[27786,27789,27792,27796,27801,27806,27809,27837,27842,27851,27854,27859,27863,27870,27875,27881,27885,27888,27892,27897,27989,27994,28012,28017,28038,28043,28059,28063,28068,28097,28102,28148,28153,28197,28205,28222,28227,28243,28248,28262,28265,28268,28271,28274,28303,28306,28311,28315,28318,28321,28327,28330,28333,28336,28398,28405,28410,28413,28431,28435,28438,28455,28458,28461,28475],[10,27787,27783],{"id":27788},"_3docker直通",[19,27790,27791],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[1188,27793,27795],{"id":27794},"_31usb直通","3.1.USB直通",[19,27797,27798],{},[269,27799],{"alt":34,"src":27800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[1171,27802,27803],{},[1174,27804,27805],{},"方法一(不是很推荐新手)：",[19,27807,27808],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[29,27810,27812],{"className":24878,"code":27811,"language":24880,"meta":34,"style":34},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[36,27813,27814,27822,27827],{"__ignoreMap":34},[39,27815,27816,27819],{"class":41,"line":42},[39,27817,27818],{"class":3021},"ls",[39,27820,27821],{"class":1319}," \u002Fdev\n",[39,27823,27824],{"class":41,"line":74},[39,27825,27826],{"class":102},"#例如\n",[39,27828,27829,27832,27834],{"class":41,"line":99},[39,27830,27831],{"class":45},"--device",[39,27833,50],{"class":49},[39,27835,27836],{"class":1319},"\u002Fdev\u002Ftty_USB0\n",[1171,27838,27839],{"start":74},[1174,27840,27841],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[29,27843,27845],{"className":24878,"code":27844,"language":24880,"meta":34,"style":34},"--privileged\n",[36,27846,27847],{"__ignoreMap":34},[39,27848,27849],{"class":41,"line":42},[39,27850,27844],{"class":3021},[19,27852,27853],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,27855,27856],{},[269,27857],{"alt":34,"src":27858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[1188,27860,27862],{"id":27861},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,27864,27865,27866,27869],{},"NVIDIA Container Toolkit使用户 ",[304,27867,27868],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,27871,27872],{},[269,27873],{"alt":34,"src":27874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,27876,27877],{},[46,27878,27879],{"href":27879,"rel":27880},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24921],[23054,27882,27884],{"id":27883},"_321安装","3.2.1.安装",[19,27886,27887],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23966,27889,27891],{"id":27890},"_3211ubuntu","3.2.1.1.Ubuntu",[1171,27893,27894],{},[1174,27895,27896],{},"配置存储库 并更新",[29,27898,27900],{"className":24878,"code":27899,"language":24880,"meta":34,"style":34},"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",[36,27901,27902,27931,27951,27963,27975,27981],{"__ignoreMap":34},[39,27903,27904,27907,27910,27913,27915,27917,27920,27923,27926,27929],{"class":41,"line":42},[39,27905,27906],{"class":3021},"curl",[39,27908,27909],{"class":56}," -fsSL",[39,27911,27912],{"class":1319}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[39,27914,26166],{"class":49},[39,27916,27130],{"class":3021},[39,27918,27919],{"class":1319}," gpg",[39,27921,27922],{"class":56}," --dearmor",[39,27924,27925],{"class":56}," -o",[39,27927,27928],{"class":1319}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[39,27930,25735],{"class":56},[39,27932,27933,27936,27938,27941,27944,27947,27949],{"class":41,"line":74},[39,27934,27935],{"class":45},"  && ",[39,27937,27906],{"class":3021},[39,27939,27940],{"class":56}," -s",[39,27942,27943],{"class":56}," -L",[39,27945,27946],{"class":1319}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[39,27948,26166],{"class":49},[39,27950,25735],{"class":56},[39,27952,27953,27956,27959,27961],{"class":41,"line":99},[39,27954,27955],{"class":3021},"    sed",[39,27957,27958],{"class":1319}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[39,27960,26166],{"class":49},[39,27962,25735],{"class":56},[39,27964,27965,27968,27970,27973],{"class":41,"line":106},[39,27966,27967],{"class":3021},"    sudo",[39,27969,27273],{"class":1319},[39,27971,27972],{"class":1319}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[39,27974,25735],{"class":56},[39,27976,27977,27979],{"class":41,"line":112},[39,27978,27935],{"class":45},[39,27980,27232],{"class":56},[39,27982,27983,27985,27987],{"class":41,"line":118},[39,27984,27967],{"class":3021},[39,27986,27133],{"class":1319},[39,27988,27299],{"class":1319},[1171,27990,27991],{"start":74},[1174,27992,27993],{},"安装nvidia-docker2",[29,27995,27997],{"className":24878,"code":27996,"language":24880,"meta":34,"style":34},"sudo apt-get install -y nvidia-docker2\n",[36,27998,27999],{"__ignoreMap":34},[39,28000,28001,28003,28005,28007,28009],{"class":41,"line":42},[39,28002,25633],{"class":3021},[39,28004,27133],{"class":1319},[39,28006,24890],{"class":1319},[39,28008,27457],{"class":56},[39,28010,28011],{"class":1319}," nvidia-docker2\n",[1171,28013,28014],{"start":99},[1174,28015,28016],{},"使用nvidia-ctk命令配置container runtime",[29,28018,28020],{"className":24878,"code":28019,"language":24880,"meta":34,"style":34},"sudo nvidia-ctk runtime configure --runtime=docker\n",[36,28021,28022],{"__ignoreMap":34},[39,28023,28024,28026,28029,28032,28035],{"class":41,"line":42},[39,28025,25633],{"class":3021},[39,28027,28028],{"class":1319}," nvidia-ctk",[39,28030,28031],{"class":1319}," runtime",[39,28033,28034],{"class":1319}," configure",[39,28036,28037],{"class":56}," --runtime=docker\n",[1171,28039,28040],{"start":106},[1174,28041,28042],{},"重启docker服务:",[29,28044,28046],{"className":24878,"code":28045,"language":24880,"meta":34,"style":34},"sudo systemctl restart docker\n",[36,28047,28048],{"__ignoreMap":34},[39,28049,28050,28052,28054,28057],{"class":41,"line":42},[39,28051,25633],{"class":3021},[39,28053,27570],{"class":1319},[39,28055,28056],{"class":1319}," restart",[39,28058,27549],{"class":1319},[23966,28060,28062],{"id":28061},"_3212fedora","3.2.1.2.Fedora",[1171,28064,28065],{},[1174,28066,28067],{},"配置存储库",[29,28069,28071],{"className":24878,"code":28070,"language":24880,"meta":34,"style":34},"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",[36,28072,28073,28088],{"__ignoreMap":34},[39,28074,28075,28077,28079,28081,28084,28086],{"class":41,"line":42},[39,28076,27906],{"class":3021},[39,28078,27940],{"class":56},[39,28080,27943],{"class":56},[39,28082,28083],{"class":1319}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[39,28085,26166],{"class":49},[39,28087,25735],{"class":56},[39,28089,28090,28092,28094],{"class":41,"line":74},[39,28091,25633],{"class":3021},[39,28093,27273],{"class":1319},[39,28095,28096],{"class":1319}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[1171,28098,28099],{"start":74},[1174,28100,28101],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[29,28103,28105],{"className":24878,"code":28104,"language":24880,"meta":34,"style":34},"# 如果是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",[36,28106,28107,28112,28126,28130,28135],{"__ignoreMap":34},[39,28108,28109],{"class":41,"line":42},[39,28110,28111],{"class":102},"# 如果是RHEL或者Rocky（DNF4）\n",[39,28113,28114,28116,28118,28120,28123],{"class":41,"line":74},[39,28115,25633],{"class":3021},[39,28117,27372],{"class":1319},[39,28119,27471],{"class":1319},[39,28121,28122],{"class":56}," --add-repo",[39,28124,28125],{"class":1319}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[39,28127,28128],{"class":41,"line":99},[39,28129,3458],{"emptyLinePlaceholder":1145},[39,28131,28132],{"class":41,"line":106},[39,28133,28134],{"class":102},"# 如果是Feodra41+（DNF5）\n",[39,28136,28137,28139,28141,28143,28145],{"class":41,"line":112},[39,28138,25633],{"class":3021},[39,28140,27372],{"class":1319},[39,28142,27471],{"class":1319},[39,28144,27474],{"class":1319},[39,28146,28147],{"class":56}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[1171,28149,28150],{"start":99},[1174,28151,28152],{},"安装NVIDIA Container Toolki包",[29,28154,28156],{"className":24878,"code":28155,"language":24880,"meta":34,"style":34},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[36,28157,28158,28163,28176,28180,28185],{"__ignoreMap":34},[39,28159,28160],{"class":41,"line":42},[39,28161,28162],{"class":102},"# 如果是RHEL或者Rocky\n",[39,28164,28165,28167,28169,28171,28173],{"class":41,"line":74},[39,28166,25633],{"class":3021},[39,28168,27372],{"class":1319},[39,28170,24890],{"class":1319},[39,28172,27457],{"class":56},[39,28174,28175],{"class":1319}," nvidia-container-toolkit\n",[39,28177,28178],{"class":41,"line":99},[39,28179,3458],{"emptyLinePlaceholder":1145},[39,28181,28182],{"class":41,"line":106},[39,28183,28184],{"class":102},"# 如果是Fedora\n",[39,28186,28187,28189,28191,28193,28195],{"class":41,"line":112},[39,28188,25633],{"class":3021},[39,28190,27372],{"class":1319},[39,28192,24890],{"class":1319},[39,28194,27457],{"class":56},[39,28196,28175],{"class":1319},[1171,28198,28199],{"start":106},[1174,28200,28201,28202,28204],{},"安装nvidia-docker2 ： 在Fedora上使用",[36,28203,27347],{},"进行安装",[29,28206,28208],{"className":24878,"code":28207,"language":24880,"meta":34,"style":34},"sudo dnf install -y nvidia-docker2\n",[36,28209,28210],{"__ignoreMap":34},[39,28211,28212,28214,28216,28218,28220],{"class":41,"line":42},[39,28213,25633],{"class":3021},[39,28215,27372],{"class":1319},[39,28217,24890],{"class":1319},[39,28219,27457],{"class":56},[39,28221,28011],{"class":1319},[1171,28223,28224],{"start":112},[1174,28225,28226],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[29,28228,28229],{"className":24878,"code":28019,"language":24880,"meta":34,"style":34},[36,28230,28231],{"__ignoreMap":34},[39,28232,28233,28235,28237,28239,28241],{"class":41,"line":42},[39,28234,25633],{"class":3021},[39,28236,28028],{"class":1319},[39,28238,28031],{"class":1319},[39,28240,28034],{"class":1319},[39,28242,28037],{"class":56},[1171,28244,28245],{"start":118},[1174,28246,28247],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[29,28249,28250],{"className":24878,"code":28045,"language":24880,"meta":34,"style":34},[36,28251,28252],{"__ignoreMap":34},[39,28253,28254,28256,28258,28260],{"class":41,"line":42},[39,28255,25633],{"class":3021},[39,28257,27570],{"class":1319},[39,28259,28056],{"class":1319},[39,28261,27549],{"class":1319},[19,28263,28264],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,28266,28267],{},"方法：",[19,28269,28270],{},"1️⃣nvidia-smi",[19,28272,28273],{},"2️⃣运行nvidia cuda 容器进行测试",[29,28275,28277],{"className":24878,"code":28276,"language":24880,"meta":34,"style":34},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[36,28278,28279],{"__ignoreMap":34},[39,28280,28281,28283,28285,28288,28291,28294,28297,28300],{"class":41,"line":42},[39,28282,25633],{"class":3021},[39,28284,27377],{"class":1319},[39,28286,28287],{"class":1319}," run",[39,28289,28290],{"class":56}," --rm",[39,28292,28293],{"class":56}," --gpus",[39,28295,28296],{"class":1319}," all",[39,28298,28299],{"class":1319}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[39,28301,28302],{"class":1319}," nvidia-smi\n",[19,28304,28305],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,28307,28308],{},[269,28309],{"alt":34,"src":28310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[1188,28312,28314],{"id":28313},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,28316,28317],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,28319,28320],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,28322,28323],{},[46,28324,28325],{"href":28325,"rel":28326},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24921],[19,28328,28329],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,28331,28332],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,28334,28335],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[1352,28337,28338,28354],{},[1355,28339,28340],{},[1358,28341,28342,28345,28348,28351],{},[1361,28343,28344],{"align":24792},"镜像类型",[1361,28346,28347],{"align":24792},"适用场景",[1361,28349,28350],{"align":24792},"示例标签",[1361,28352,28353],{"align":24792},"大小",[1398,28355,28356,28370,28384],{},[1358,28357,28358,28361,28364,28367],{},[1403,28359,28360],{"align":24792},"base",[1403,28362,28363],{"align":24792},"仅需 CUDA 运行时库",[1403,28365,28366],{"align":24792},"12.4.0-base-ubuntu22.04",[1403,28368,28369],{"align":24792},"~240MB",[1358,28371,28372,28375,28378,28381],{},[1403,28373,28374],{"align":24792},"runtime",[1403,28376,28377],{"align":24792},"部署编译后的应用（含数学库）",[1403,28379,28380],{"align":24792},"12.4.0-runtime-ubuntu22.04",[1403,28382,28383],{"align":24792},"~2GB",[1358,28385,28386,28389,28392,28395],{},[1403,28387,28388],{"align":24792},"devel",[1403,28390,28391],{"align":24792},"开发环境（含编译工具）",[1403,28393,28394],{"align":24792},"12.4.0-devel-ubuntu22.04",[1403,28396,28397],{"align":24792},"~3GB",[19,28399,28400,28401,28404],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[36,28402,28403],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,28406,28407],{},[269,28408],{"alt":34,"src":28409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,28411,28412],{},"在dockerfile里就可以开头这么写：",[29,28414,28416],{"className":24878,"code":28415,"language":24880,"meta":34,"style":34},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[36,28417,28418,28423],{"__ignoreMap":34},[39,28419,28420],{"class":41,"line":42},[39,28421,28422],{"class":102},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[39,28424,28425,28428],{"class":41,"line":74},[39,28426,28427],{"class":3021},"FROM",[39,28429,28430],{"class":1319}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[1188,28432,28434],{"id":28433},"_34配置以太网","3.4.配置以太网",[19,28436,28437],{},"指定网络模式",[29,28439,28441],{"className":24878,"code":28440,"language":24880,"meta":34,"style":34},"--net=host \\\n",[36,28442,28443],{"__ignoreMap":34},[39,28444,28445,28448,28450,28453],{"class":41,"line":42},[39,28446,28447],{"class":45},"--net",[39,28449,50],{"class":49},[39,28451,28452],{"class":1319},"host",[39,28454,25735],{"class":3021},[19,28456,28457],{},"启动参数里加上这行即可。具体在下方",[19,28459,28460],{},"--net选项：指定网络模式，该选项有以下参数可选：",[2205,28462,28463,28466,28469,28472],{},[1174,28464,28465],{},"--net=bridge:默认选项，表示连接到默认的网桥",[1174,28467,28468],{},"--net=host:容器使用宿主机的网络",[1174,28470,28471],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[1174,28473,28474],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1133,28476,28477],{},"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":34,"searchDepth":74,"depth":74,"links":28479},[28480,28481,28482,28483],{"id":27794,"depth":99,"text":27795},{"id":27861,"depth":99,"text":27862},{"id":28313,"depth":99,"text":28314},{"id":28433,"depth":99,"text":28434},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27783,"description":27791},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":28490,"title":28491,"body":28492,"description":28499,"extension":1143,"meta":28505,"navigation":1145,"path":28506,"seo":28507,"stem":28508,"__hash__":28509},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":28493,"toc":28503},[28494,28497,28500],[10,28495,28491],{"id":28496},"_4dockerhub换源",[19,28498,28499],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,28501,28502],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":34,"searchDepth":74,"depth":74,"links":28504},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":28491,"description":28499},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":28511,"title":28512,"body":28513,"description":34,"extension":1143,"meta":29525,"navigation":1145,"path":29526,"seo":29527,"stem":29528,"__hash__":29529},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":28514,"toc":29520},[28515,28518,28522,28528,28532,28535,28875,28878,28881,28884,28889,28894,28897,28900,28903,28906,28925,28928,28939,28945,29127,29137,29153,29416,29418,29443,29458,29467,29517],[10,28516,28512],{"id":28517},"_5docker命令学习",[1188,28519,28521],{"id":28520},"_51参考文档","5.1.参考文档",[19,28523,28524],{},[46,28525,28526],{"href":28526,"rel":28527},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24921],[1188,28529,28531],{"id":28530},"_52常用命令","5.2.常用命令",[19,28533,28534],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[1352,28536,28537,28550],{},[1355,28538,28539],{},[1358,28540,28541,28544,28547],{},[1361,28542,28543],{"align":24792},"命令",[1361,28545,28546],{"align":24792},"描述",[1361,28548,28549],{"align":24792},"示例",[1398,28551,28552,28563,28574,28585,28596,28607,28618,28629,28639,28650,28661,28672,28682,28693,28704,28715,28725,28735,28745,28755,28766,28777,28788,28799,28810,28821,28831,28842,28853,28864],{},[1358,28553,28554,28557,28560],{},[1403,28555,28556],{"align":24792},"docker run",[1403,28558,28559],{"align":24792},"创建并启动一个新的容器。",[1403,28561,28562],{"align":24792},"docker run -it ubuntu bash",[1358,28564,28565,28568,28571],{},[1403,28566,28567],{"align":24792},"docker build",[1403,28569,28570],{"align":24792},"通过指定的 Dockerfile 创建一个新的镜像。",[1403,28572,28573],{"align":24792},"docker build -t myimage .",[1358,28575,28576,28579,28582],{},[1403,28577,28578],{"align":24792},"docker pull",[1403,28580,28581],{"align":24792},"从 Docker 仓库拉取镜像。",[1403,28583,28584],{"align":24792},"docker pull ubuntu",[1358,28586,28587,28590,28593],{},[1403,28588,28589],{"align":24792},"docker push",[1403,28591,28592],{"align":24792},"将本地镜像推送到 Docker 仓库。",[1403,28594,28595],{"align":24792},"docker push myimage",[1358,28597,28598,28601,28604],{},[1403,28599,28600],{"align":24792},"docker stop",[1403,28602,28603],{"align":24792},"停止一个正在运行的容器。",[1403,28605,28606],{"align":24792},"docker stop container_id",[1358,28608,28609,28612,28615],{},[1403,28610,28611],{"align":24792},"docker start",[1403,28613,28614],{"align":24792},"启动一个已经存在的容器。",[1403,28616,28617],{"align":24792},"docker start container_id",[1358,28619,28620,28623,28626],{},[1403,28621,28622],{"align":24792},"docker restart",[1403,28624,28625],{"align":24792},"重新启动容器。",[1403,28627,28628],{"align":24792},"docker restart container_id",[1358,28630,28631,28634,28637],{},[1403,28632,28633],{"align":24792},"docker ps",[1403,28635,28636],{"align":24792},"列出当前正在运行的容器。",[1403,28638,28633],{"align":24792},[1358,28640,28641,28644,28647],{},[1403,28642,28643],{"align":24792},"docker rm",[1403,28645,28646],{"align":24792},"删除一个或多个停止的容器。",[1403,28648,28649],{"align":24792},"docker rm container_id",[1358,28651,28652,28655,28658],{},[1403,28653,28654],{"align":24792},"docker exec",[1403,28656,28657],{"align":24792},"在一个正在运行的容器中执行命令。",[1403,28659,28660],{"align":24792},"docker exec -it container_id bash",[1358,28662,28663,28666,28669],{},[1403,28664,28665],{"align":24792},"docker logs",[1403,28667,28668],{"align":24792},"查看容器的日志输出。",[1403,28670,28671],{"align":24792},"docker logs container_id",[1358,28673,28674,28677,28680],{},[1403,28675,28676],{"align":24792},"docker images",[1403,28678,28679],{"align":24792},"列出本地所有镜像。",[1403,28681,28676],{"align":24792},[1358,28683,28684,28687,28690],{},[1403,28685,28686],{"align":24792},"docker rmi",[1403,28688,28689],{"align":24792},"删除一个或多个镜像。",[1403,28691,28692],{"align":24792},"docker rmi myimage",[1358,28694,28695,28698,28701],{},[1403,28696,28697],{"align":24792},"docker network",[1403,28699,28700],{"align":24792},"管理 Docker 网络。",[1403,28702,28703],{"align":24792},"docker network ls",[1358,28705,28706,28709,28712],{},[1403,28707,28708],{"align":24792},"docker volume",[1403,28710,28711],{"align":24792},"管理 Docker 数据卷。",[1403,28713,28714],{"align":24792},"docker volume ls",[1358,28716,28717,28720,28723],{},[1403,28718,28719],{"align":24792},"docker-compose up",[1403,28721,28722],{"align":24792},"启动 docker-compose.yml 中定义的所有服务。",[1403,28724,28719],{"align":24792},[1358,28726,28727,28730,28733],{},[1403,28728,28729],{"align":24792},"docker-compose down",[1403,28731,28732],{"align":24792},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[1403,28734,28729],{"align":24792},[1358,28736,28737,28740,28743],{},[1403,28738,28739],{"align":24792},"docker info",[1403,28741,28742],{"align":24792},"显示 Docker 系统的详细信息。",[1403,28744,28739],{"align":24792},[1358,28746,28747,28750,28753],{},[1403,28748,28749],{"align":24792},"docker stats",[1403,28751,28752],{"align":24792},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[1403,28754,28749],{"align":24792},[1358,28756,28757,28760,28763],{},[1403,28758,28759],{"align":24792},"docker inspect",[1403,28761,28762],{"align":24792},"查看容器或镜像的详细信息（JSON 格式）。",[1403,28764,28765],{"align":24792},"docker inspect container_id",[1358,28767,28768,28771,28774],{},[1403,28769,28770],{"align":24792},"docker save",[1403,28772,28773],{"align":24792},"将一个镜像保存为 tar 文件。",[1403,28775,28776],{"align":24792},"docker save -o myimage.tar myimage",[1358,28778,28779,28782,28785],{},[1403,28780,28781],{"align":24792},"docker load",[1403,28783,28784],{"align":24792},"从 tar 文件中加载镜像。",[1403,28786,28787],{"align":24792},"docker load -i myimage.tar",[1358,28789,28790,28793,28796],{},[1403,28791,28792],{"align":24792},"docker tag",[1403,28794,28795],{"align":24792},"为镜像添加标签（tag）。",[1403,28797,28798],{"align":24792},"docker tag myimage myimage:v1",[1358,28800,28801,28804,28807],{},[1403,28802,28803],{"align":24792},"docker buildx build",[1403,28805,28806],{"align":24792},"使用 Buildx 构建多架构镜像。",[1403,28808,28809],{"align":24792},"docker buildx build -t myimage .",[1358,28811,28812,28815,28818],{},[1403,28813,28814],{"align":24792},"docker buildx create",[1403,28816,28817],{"align":24792},"创建一个新的 Buildx 构建实例。",[1403,28819,28820],{"align":24792},"docker buildx create –use",[1358,28822,28823,28826,28829],{},[1403,28824,28825],{"align":24792},"docker buildx ls",[1403,28827,28828],{"align":24792},"列出所有可用的 Buildx 构建实例。",[1403,28830,28825],{"align":24792},[1358,28832,28833,28836,28839],{},[1403,28834,28835],{"align":24792},"docker buildx use",[1403,28837,28838],{"align":24792},"设置当前的 Buildx 构建实例。",[1403,28840,28841],{"align":24792},"docker buildx use mybuilder",[1358,28843,28844,28847,28850],{},[1403,28845,28846],{"align":24792},"docker buildx bake",[1403,28848,28849],{"align":24792},"使用 Bake 文件批量构建镜像。",[1403,28851,28852],{"align":24792},"docker buildx bake -f bake.hcl",[1358,28854,28855,28858,28861],{},[1403,28856,28857],{"align":24792},"docker buildx build –push",[1403,28859,28860],{"align":24792},"构建镜像并推送到镜像仓库。",[1403,28862,28863],{"align":24792},"docker buildx build –push -t myimage .",[1358,28865,28866,28869,28872],{},[1403,28867,28868],{"align":24792},"docker buildx build –platform",[1403,28870,28871],{"align":24792},"构建镜像并为多个平台生成支持。",[1403,28873,28874],{"align":24792},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,28876,28877],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,28879,28880],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,28882,28883],{},"docker images 可以查看已经下载的镜像",[19,28885,28886],{},[269,28887],{"alt":34,"src":28888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,28890,28891],{},[304,28892,28893],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,28895,28896],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,28898,28899],{},"docker container logs 查看容器日志",[19,28901,28902],{},"docker top 查看容器里的进程",[19,28904,28905],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[29,28907,28909],{"className":24878,"code":28908,"language":24880,"meta":34,"style":34},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[36,28910,28911],{"__ignoreMap":34},[39,28912,28913,28916,28919,28922],{"class":41,"line":42},[39,28914,28915],{"class":3021},"如：docker",[39,28917,28918],{"class":1319}," cp",[39,28920,28921],{"class":1319}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[39,28923,28924],{"class":1319}," \u002Fmydata\u002Fnginx\n",[19,28926,28927],{},"docker run时在启动容器的时候会有几个常用的选项：",[2205,28929,28930,28933,28936],{},[1174,28931,28932],{},"-d选项：表示后台运行",[1174,28934,28935],{},"-P选项：随机端口映射",[1174,28937,28938],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[1188,28940,28942],{"id":28941},"_53run命令的参数非常重要",[304,28943,28944],{},"5.3.run命令的参数（非常重要）",[1352,28946,28947,28960],{},[1355,28948,28949],{},[1358,28950,28951,28954,28957],{},[1361,28952,28953],{"align":24792},"参数\u002F配置",[1361,28955,28956],{"align":24792},"功能说明",[1361,28958,28959],{"align":24792},"重要性与参考依据",[1398,28961,28962,28973,28984,28995,29006,29017,29028,29039,29050,29061,29072,29083,29094,29105,29116],{},[1358,28963,28964,28967,28970],{},[1403,28965,28966],{"align":24792},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[1403,28968,28969],{"align":24792},"指定容器名称，便于后续管理",[1403,28971,28972],{"align":24792},"替代随机生成的容器名。",[1358,28974,28975,28978,28981],{},[1403,28976,28977],{"align":24792},"–gpus all",[1403,28979,28980],{"align":24792},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[1403,28982,28983],{"align":24792},"用于CUDA加速等GPU依赖任务。",[1358,28985,28986,28989,28992],{},[1403,28987,28988],{"align":24792},"-e NVIDIA_DRIVER_CAPABILITIES=all",[1403,28990,28991],{"align":24792},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[1403,28993,28994],{"align":24792},"确保容器内GPU功能完整67。",[1358,28996,28997,29000,29003],{},[1403,28998,28999],{"align":24792},"-dit",[1403,29001,29002],{"align":24792},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[1403,29004,29005],{"align":24792},"允许容器在后台运行并支持交互操作。",[1358,29007,29008,29011,29014],{},[1403,29009,29010],{"align":24792},"–privileged",[1403,29012,29013],{"align":24792},"赋予容器完全主机权限（可访问设备、内核模块等）",[1403,29015,29016],{"align":24792},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[1358,29018,29019,29022,29025],{},[1403,29020,29021],{"align":24792},"–net=host",[1403,29023,29024],{"align":24792},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[1403,29026,29027],{"align":24792},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[1358,29029,29030,29033,29036],{},[1403,29031,29032],{"align":24792},"–group-add audio–group-add video–group-add dialout",[1403,29034,29035],{"align":24792},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[1403,29037,29038],{"align":24792},"避免权限问题（如避免无法调用摄像头、麦克风）。",[1358,29040,29041,29044,29047],{},[1403,29042,29043],{"align":24792},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[1403,29045,29046],{"align":24792},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[1403,29048,29049],{"align":24792},"支持容器内运行图形界面应用（如OpenCV可视化）。",[1358,29051,29052,29055,29058],{},[1403,29053,29054],{"align":24792},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[1403,29056,29057],{"align":24792},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[1403,29059,29060],{"align":24792},"实现容器内图形显示。",[1358,29062,29063,29066,29069],{},[1403,29064,29065],{"align":24792},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[1403,29067,29068],{"align":24792},"挂载X11认证文件（只读）",[1403,29070,29071],{"align":24792},"确保容器有权连接宿主机显示服务。",[1358,29073,29074,29077,29080],{},[1403,29075,29076],{"align":24792},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[1403,29078,29079],{"align":24792},"挂载Wayland显示协议相关目录",[1403,29081,29082],{"align":24792},"支持Wayland协议的图形显示。",[1358,29084,29085,29088,29091],{},[1403,29086,29087],{"align":24792},"–ulimit nofile=1024:524288",[1403,29089,29090],{"align":24792},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[1403,29092,29093],{"align":24792},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[1358,29095,29096,29099,29102],{},[1403,29097,29098],{"align":24792},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[1403,29100,29101],{"align":24792},"挂载宿主机用户目录到容器内同名路径",[1403,29103,29104],{"align":24792},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[1358,29106,29107,29110,29113],{},[1403,29108,29109],{"align":24792},"-w \u002Fhome\u002Ftungchiahui",[1403,29111,29112],{"align":24792},"设置容器启动后的默认工作目录",[1403,29114,29115],{"align":24792},"直接进入项目路径，方便执行命令2324。",[1358,29117,29118,29121,29124],{},[1403,29119,29120],{"align":24792},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[1403,29122,29123],{"align":24792},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[1403,29125,29126],{"align":24792},"提供预配置的深度学习与机器人开发环境。",[19,29128,29129,29130,29132,29133,29136],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[36,29131,25633],{},"加不加",[36,29134,29135],{},"sudo -E","都无所谓。",[19,29138,29139,29140,29142,29143,29145,29146,29149,29150,29152],{},"用户已经被加到docker组了，不用",[36,29141,25633],{},"也行跑，其次，",[36,29144,25633],{},"运行的话，你的",[36,29147,29148],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[36,29151,29148],{},"更不可能变了。",[29,29154,29156],{"className":24878,"code":29155,"language":24880,"meta":34,"style":34},"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",[36,29157,29158,29171,29181,29191,29203,29210,29217,29224,29234,29243,29252,29266,29278,29290,29299,29309,29318,29333,29366,29393,29404,29411],{"__ignoreMap":34},[39,29159,29160,29162,29164,29166,29169],{"class":41,"line":42},[39,29161,25633],{"class":3021},[39,29163,27377],{"class":1319},[39,29165,28287],{"class":1319},[39,29167,29168],{"class":56}," --name=ros_opencv_cuda",[39,29170,25735],{"class":56},[39,29172,29173,29176,29179],{"class":41,"line":74},[39,29174,29175],{"class":45},"--gpus ",[39,29177,29178],{"class":1319},"all",[39,29180,25735],{"class":56},[39,29182,29183,29186,29189],{"class":41,"line":99},[39,29184,29185],{"class":45},"-e ",[39,29187,29188],{"class":1319},"NVIDIA_DRIVER_CAPABILITIES=all",[39,29190,25735],{"class":56},[39,29192,29193,29195,29198,29201],{"class":41,"line":106},[39,29194,29185],{"class":45},[39,29196,29197],{"class":1319},"DISPLAY=",[39,29199,29200],{"class":45},"$DISPLAY ",[39,29202,27232],{"class":56},[39,29204,29205,29208],{"class":41,"line":112},[39,29206,29207],{"class":45},"-dit ",[39,29209,27232],{"class":56},[39,29211,29212,29215],{"class":41,"line":118},[39,29213,29214],{"class":45},"--privileged ",[39,29216,27232],{"class":56},[39,29218,29219,29222],{"class":41,"line":413},[39,29220,29221],{"class":45},"--net=host ",[39,29223,27232],{"class":56},[39,29225,29226,29229,29232],{"class":41,"line":419},[39,29227,29228],{"class":45},"--group-add ",[39,29230,29231],{"class":1319},"audio",[39,29233,25735],{"class":56},[39,29235,29236,29238,29241],{"class":41,"line":425},[39,29237,29228],{"class":45},[39,29239,29240],{"class":1319},"video",[39,29242,25735],{"class":56},[39,29244,29245,29247,29250],{"class":41,"line":443},[39,29246,29228],{"class":45},[39,29248,29249],{"class":1319},"dialout",[39,29251,25735],{"class":56},[39,29253,29254,29256,29259,29261,29264],{"class":41,"line":449},[39,29255,29185],{"class":45},[39,29257,29258],{"class":1319},"XAUTHORITY=",[39,29260,29148],{"class":45},[39,29262,29263],{"class":1319},"\u002F.Xauthority",[39,29265,25735],{"class":56},[39,29267,29268,29270,29273,29276],{"class":41,"line":455},[39,29269,29185],{"class":45},[39,29271,29272],{"class":1319},"WAYLAND_DISPLAY=",[39,29274,29275],{"class":45},"$WAYLAND_DISPLAY ",[39,29277,27232],{"class":56},[39,29279,29280,29282,29285,29288],{"class":41,"line":461},[39,29281,29185],{"class":45},[39,29283,29284],{"class":1319},"XDG_RUNTIME_DIR=",[39,29286,29287],{"class":45},"$XDG_RUNTIME_DIR ",[39,29289,27232],{"class":56},[39,29291,29292,29294,29297],{"class":41,"line":475},[39,29293,29185],{"class":45},[39,29295,29296],{"class":1319},"QT_QPA_PLATFORM=xcb",[39,29298,25735],{"class":56},[39,29300,29301,29304,29307],{"class":41,"line":665},[39,29302,29303],{"class":45},"-v ",[39,29305,29306],{"class":1319},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[39,29308,25735],{"class":56},[39,29310,29311,29313,29316],{"class":41,"line":671},[39,29312,29303],{"class":45},[39,29314,29315],{"class":1319},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[39,29317,25735],{"class":56},[39,29319,29320,29323,29326,29328,29331],{"class":41,"line":684},[39,29321,29322],{"class":45},"-v $HOME",[39,29324,29325],{"class":1319},"\u002F.Xauthority:",[39,29327,29148],{"class":45},[39,29329,29330],{"class":1319},"\u002F.Xauthority:ro",[39,29332,25735],{"class":56},[39,29334,29335,29337,29340,29342,29345,29348,29350,29353,29355,29357,29359,29361,29364],{"class":41,"line":2732},[39,29336,29303],{"class":45},[39,29338,29339],{"class":1319},"\u002Frun\u002Fuser\u002F",[39,29341,26156],{"class":45},[39,29343,29344],{"class":3021},"id",[39,29346,29347],{"class":56}," -u",[39,29349,1632],{"class":45},[39,29351,29352],{"class":1319},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[39,29354,26156],{"class":45},[39,29356,29344],{"class":3021},[39,29358,29347],{"class":56},[39,29360,1632],{"class":45},[39,29362,29363],{"class":1319},"\u002Fwayland-0",[39,29365,25735],{"class":56},[39,29367,29368,29370,29372,29374,29376,29378,29380,29383,29385,29387,29389,29391],{"class":41,"line":2737},[39,29369,29303],{"class":45},[39,29371,29339],{"class":1319},[39,29373,26156],{"class":45},[39,29375,29344],{"class":3021},[39,29377,29347],{"class":56},[39,29379,1632],{"class":45},[39,29381,29382],{"class":1319},":\u002Frun\u002Fuser\u002F",[39,29384,26156],{"class":45},[39,29386,29344],{"class":3021},[39,29388,29347],{"class":56},[39,29390,14770],{"class":45},[39,29392,27232],{"class":56},[39,29394,29395,29397,29399,29402],{"class":41,"line":2751},[39,29396,29322],{"class":45},[39,29398,2057],{"class":1319},[39,29400,29401],{"class":45},"$HOME ",[39,29403,27232],{"class":56},[39,29405,29406,29409],{"class":41,"line":2756},[39,29407,29408],{"class":45},"-w $HOME ",[39,29410,27232],{"class":56},[39,29412,29413],{"class":41,"line":2785},[39,29414,29415],{"class":45},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,29417,10081],{},[1171,29419,29420,29428,29431,29434],{},[1174,29421,29422,14851,29424,29427],{},[36,29423,29188],{},[36,29425,29426],{},"--gpus all","没有英伟达显卡请注释。",[1174,29429,29430],{},"--name后面请自己为容器起名。",[1174,29432,29433],{},"最后一行仓库名称请你自己找对应的镜像填上。",[1174,29435,29436,29437,29442],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[24609,29438,29439],{},[304,29440,29441],{},"请不要加","。",[29,29444,29446],{"className":24878,"code":29445,"language":24880,"meta":34,"style":34},"--ulimit nofile=1024:524288 \\\n",[36,29447,29448],{"__ignoreMap":34},[39,29449,29450,29453,29456],{"class":41,"line":42},[39,29451,29452],{"class":3021},"--ulimit",[39,29454,29455],{"class":1319}," nofile=1024:524288",[39,29457,25735],{"class":56},[19,29459,29460,29461,29466],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[24609,29462,29463],{},[304,29464,29465],{},"不建议","**.**",[29,29468,29470],{"className":24878,"code":29469,"language":24880,"meta":34,"style":34},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[36,29471,29472,29499,29508],{"__ignoreMap":34},[39,29473,29474,29477,29480,29482,29484,29486,29488,29490,29492,29495,29497],{"class":41,"line":42},[39,29475,29476],{"class":3021},"--user",[39,29478,29479],{"class":45}," $(",[39,29481,29344],{"class":3021},[39,29483,29347],{"class":56},[39,29485,1632],{"class":45},[39,29487,2057],{"class":1319},[39,29489,26156],{"class":45},[39,29491,29344],{"class":3021},[39,29493,29494],{"class":56}," -g",[39,29496,14770],{"class":45},[39,29498,27232],{"class":56},[39,29500,29501,29503,29506],{"class":41,"line":74},[39,29502,29303],{"class":45},[39,29504,29505],{"class":1319},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[39,29507,25735],{"class":56},[39,29509,29510,29512,29515],{"class":41,"line":99},[39,29511,29303],{"class":45},[39,29513,29514],{"class":1319},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[39,29516,25735],{"class":56},[1133,29518,29519],{},"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":34,"searchDepth":74,"depth":74,"links":29521},[29522,29523,29524],{"id":28520,"depth":99,"text":28521},{"id":28530,"depth":99,"text":28531},{"id":28941,"depth":99,"text":28944},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":28512,"description":34},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":29531,"title":29532,"body":29533,"description":34,"extension":1143,"meta":31156,"navigation":1145,"path":31157,"seo":31158,"stem":31159,"__hash__":31160},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":29534,"toc":31151},[29535,29538,29542,29545,29767,29771,29775,29778,29884,29889,29892,29897,29900,29905,29908,29913,29916,29928,29931,29936,29943,29971,29978,30054,30059,30062,30085,30087,30162,30167,30170,30174,30182,30187,30192,30196,30207,30213,30216,30219,30243,30246,30249,30277,30280,30283,30748,30751,30756,30761,30765,30788,30793,30797,30801,30804,30807,30810,30837,30840,30843,30861,30864,30867,30889,30897,30902,30907,30911,30914,30917,30920,30923,30968,30971,30989,30992,30997,31000,31021,31024,31080,31083,31088,31092,31095,31102,31105,31108,31113,31116,31132,31135,31148],[10,29536,29532],{"id":29537},"_6手动创建docker镜像",[1188,29539,29541],{"id":29540},"_61dockerfile","6.1.DockerFile",[19,29543,29544],{},"常用命令：",[1352,29546,29547,29558],{},[1355,29548,29549],{},[1358,29550,29551,29554,29556],{},[1361,29552,29553],{"align":24792},"指令",[1361,29555,26926],{"align":24792},[1361,29557,28549],{"align":24792},[1398,29559,29560,29570,29586,29597,29608,29619,29630,29641,29652,29666,29680,29691,29705,29716,29727,29741,29756],{},[1358,29561,29562,29564,29567],{},[1403,29563,28427],{"align":24792},[1403,29565,29566],{"align":24792},"指定基础镜像，是 Dockerfile 的起点",[1403,29568,29569],{"align":24792},"FROM ubuntu:22.04",[1358,29571,29572,29575,29578],{},[1403,29573,29574],{"align":24792},"LABEL",[1403,29576,29577],{"align":24792},"添加元数据（如作者、版本等）",[1403,29579,29580,29581,29585],{"align":24792},"LABEL maintainer=”",[46,29582,29584],{"href":29583},"mailto:you@example.com","you@example.com","”",[1358,29587,29588,29591,29594],{},[1403,29589,29590],{"align":24792},"ENV",[1403,29592,29593],{"align":24792},"设置环境变量",[1403,29595,29596],{"align":24792},"ENV PORT=8080",[1358,29598,29599,29602,29605],{},[1403,29600,29601],{"align":24792},"ARG",[1403,29603,29604],{"align":24792},"构建参数，只在构建期间可用",[1403,29606,29607],{"align":24792},"ARG VERSION=1.0",[1358,29609,29610,29613,29616],{},[1403,29611,29612],{"align":24792},"RUN",[1403,29614,29615],{"align":24792},"构建镜像时运行命令",[1403,29617,29618],{"align":24792},"RUN apt-get update && apt-get install -y curl",[1358,29620,29621,29624,29627],{},[1403,29622,29623],{"align":24792},"COPY",[1403,29625,29626],{"align":24792},"复制文件到镜像中",[1403,29628,29629],{"align":24792},"COPY . \u002Fapp",[1358,29631,29632,29635,29638],{},[1403,29633,29634],{"align":24792},"ADD",[1403,29636,29637],{"align":24792},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[1403,29639,29640],{"align":24792},"ADD archive.tar.gz \u002Fdata\u002F",[1358,29642,29643,29646,29649],{},[1403,29644,29645],{"align":24792},"WORKDIR",[1403,29647,29648],{"align":24792},"设置工作目录",[1403,29650,29651],{"align":24792},"WORKDIR \u002Fopt",[1358,29653,29654,29657,29660],{},[1403,29655,29656],{"align":24792},"CMD",[1403,29658,29659],{"align":24792},"设置容器启动时默认命令（可被 docker run 覆盖）",[1403,29661,29662,29663],{"align":24792},"CMD ",[39,29664,29665],{},"“node”, “index.js”",[1358,29667,29668,29671,29674],{},[1403,29669,29670],{"align":24792},"ENTRYPOINT",[1403,29672,29673],{"align":24792},"设置容器启动时固定命令（通常用于 CLI 工具等）",[1403,29675,29676,29677],{"align":24792},"ENTRYPOINT ",[39,29678,29679],{},"“python3”",[1358,29681,29682,29685,29688],{},[1403,29683,29684],{"align":24792},"EXPOSE",[1403,29686,29687],{"align":24792},"声明镜像内服务监听的端口（不会自动映射）",[1403,29689,29690],{"align":24792},"EXPOSE 80",[1358,29692,29693,29696,29699],{},[1403,29694,29695],{"align":24792},"VOLUME",[1403,29697,29698],{"align":24792},"声明数据卷挂载点",[1403,29700,29701,29702],{"align":24792},"VOLUME ",[39,29703,29704],{},"“\u002Fdata”",[1358,29706,29707,29710,29713],{},[1403,29708,29709],{"align":24792},"USER",[1403,29711,29712],{"align":24792},"设置后续命令执行的用户",[1403,29714,29715],{"align":24792},"USER appuser",[1358,29717,29718,29721,29724],{},[1403,29719,29720],{"align":24792},"ONBUILD",[1403,29722,29723],{"align":24792},"当镜像作为其他镜像基础镜像时触发的构建指令",[1403,29725,29726],{"align":24792},"ONBUILD COPY . \u002Fsrc",[1358,29728,29729,29732,29735],{},[1403,29730,29731],{"align":24792},"SHELL",[1403,29733,29734],{"align":24792},"更改默认 shell，比如将 sh -c 改为 bash -c",[1403,29736,29737,29738],{"align":24792},"SHELL ",[39,29739,29740],{},"“\u002Fbin\u002Fbash”, “-c”",[1358,29742,29743,29746,29749],{},[1403,29744,29745],{"align":24792},"HEALTHCHECK",[1403,29747,29748],{"align":24792},"定义容器运行时的健康检查命令",[1403,29750,29751,29752],{"align":24792},"`HEALTHCHECK CMD curl –fail ",[46,29753,29754],{"href":29754,"rel":29755},"http:\u002F\u002Flocalhost:8080",[24921],[1358,29757,29758,29761,29764],{},[1403,29759,29760],{"align":24792},"STOPSIGNAL",[1403,29762,29763],{"align":24792},"容器停止时发送的信号",[1403,29765,29766],{"align":24792},"STOPSIGNAL SIGKILL",[1188,29768,29770],{"id":29769},"_62自己创建容器","6.2.自己创建容器",[23054,29772,29774],{"id":29773},"_621手动创建","6.2.1.手动创建",[19,29776,29777],{},"在x86电脑上编译x86的：",[29,29779,29781],{"className":24878,"code":29780,"language":24880,"meta":34,"style":34},"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",[36,29782,29783,29799,29803,29816,29820,29833,29837,29850,29854,29867,29871],{"__ignoreMap":34},[39,29784,29785,29787,29790,29793,29796],{"class":41,"line":42},[39,29786,27610],{"class":3021},[39,29788,29789],{"class":1319}," build",[39,29791,29792],{"class":56}," -t",[39,29794,29795],{"class":1319}," ros-melodic-cuda118-cudnn8-bionic:latest",[39,29797,29798],{"class":1319}," .\n",[39,29800,29801],{"class":41,"line":74},[39,29802,3458],{"emptyLinePlaceholder":1145},[39,29804,29805,29807,29809,29811,29814],{"class":41,"line":99},[39,29806,27610],{"class":3021},[39,29808,29789],{"class":1319},[39,29810,29792],{"class":56},[39,29812,29813],{"class":1319}," ros-noetic-focal:latest",[39,29815,29798],{"class":1319},[39,29817,29818],{"class":41,"line":106},[39,29819,3458],{"emptyLinePlaceholder":1145},[39,29821,29822,29824,29826,29828,29831],{"class":41,"line":112},[39,29823,27610],{"class":3021},[39,29825,29789],{"class":1319},[39,29827,29792],{"class":56},[39,29829,29830],{"class":1319}," ros-humble-jammy:latest",[39,29832,29798],{"class":1319},[39,29834,29835],{"class":41,"line":118},[39,29836,3458],{"emptyLinePlaceholder":1145},[39,29838,29839,29841,29843,29845,29848],{"class":41,"line":413},[39,29840,27610],{"class":3021},[39,29842,29789],{"class":1319},[39,29844,29792],{"class":56},[39,29846,29847],{"class":1319}," ros-jazzy-noble:latest",[39,29849,29798],{"class":1319},[39,29851,29852],{"class":41,"line":419},[39,29853,3458],{"emptyLinePlaceholder":1145},[39,29855,29856,29858,29860,29862,29865],{"class":41,"line":425},[39,29857,27610],{"class":3021},[39,29859,29789],{"class":1319},[39,29861,29792],{"class":56},[39,29863,29864],{"class":1319}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[39,29866,29798],{"class":1319},[39,29868,29869],{"class":41,"line":443},[39,29870,3458],{"emptyLinePlaceholder":1145},[39,29872,29873,29875,29877,29879,29882],{"class":41,"line":449},[39,29874,27610],{"class":3021},[39,29876,29789],{"class":1319},[39,29878,29792],{"class":56},[39,29880,29881],{"class":1319}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[39,29883,29798],{"class":1319},[19,29885,29886],{},[269,29887],{"alt":34,"src":29888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,29890,29891],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,29893,29894],{},[269,29895],{"alt":34,"src":29896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,29898,29899],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[1171,29901,29902],{},[1174,29903,29904],{},"创建 Docker Hub 账户",[19,29906,29907],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[1171,29909,29910],{"start":74},[1174,29911,29912],{},"登录 Docker Hub",[19,29914,29915],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[29,29917,29919],{"className":24878,"code":29918,"language":24880,"meta":34,"style":34},"docker login\n",[36,29920,29921],{"__ignoreMap":34},[39,29922,29923,29925],{"class":41,"line":42},[39,29924,27610],{"class":3021},[39,29926,29927],{"class":1319}," login\n",[19,29929,29930],{},"输入你的 Docker Hub 用户名和密码进行验证。",[1171,29932,29933],{},[1174,29934,29935],{},"为你的镜像打标签",[19,29937,29938,29939,29942],{},"Docker Hub 使用 ",[36,29940,29941],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[29,29944,29946],{"className":24878,"code":29945,"language":24880,"meta":34,"style":34},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[36,29947,29948],{"__ignoreMap":34},[39,29949,29950,29952,29955,29957,29960,29963,29966,29968],{"class":41,"line":42},[39,29951,27610],{"class":3021},[39,29953,29954],{"class":1319}," tag",[39,29956,29847],{"class":1319},[39,29958,29959],{"class":49}," \u003C",[39,29961,29962],{"class":1319},"你的用户",[39,29964,29965],{"class":45},"名",[39,29967,2158],{"class":49},[39,29969,29970],{"class":1319},"\u002Fros-jazzy-noble:latest\n",[19,29972,29973,29974,29977],{},"例如，如果你的 Docker Hub 用户名是 ",[36,29975,29976],{},"tungchiahui","，你应该执行：",[29,29979,29981],{"className":24878,"code":29980,"language":24880,"meta":34,"style":34},"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",[36,29982,29983,29994,29998,30009,30013,30024,30028,30039,30043],{"__ignoreMap":34},[39,29984,29985,29987,29989,29991],{"class":41,"line":42},[39,29986,27610],{"class":3021},[39,29988,29954],{"class":1319},[39,29990,29813],{"class":1319},[39,29992,29993],{"class":1319}," tungchiahui\u002Fros-noetic-focal:latest\n",[39,29995,29996],{"class":41,"line":74},[39,29997,3458],{"emptyLinePlaceholder":1145},[39,29999,30000,30002,30004,30006],{"class":41,"line":99},[39,30001,27610],{"class":3021},[39,30003,29954],{"class":1319},[39,30005,29830],{"class":1319},[39,30007,30008],{"class":1319}," tungchiahui\u002Fros-humble-jammy:latest\n",[39,30010,30011],{"class":41,"line":106},[39,30012,3458],{"emptyLinePlaceholder":1145},[39,30014,30015,30017,30019,30021],{"class":41,"line":112},[39,30016,27610],{"class":3021},[39,30018,29954],{"class":1319},[39,30020,29847],{"class":1319},[39,30022,30023],{"class":1319}," tungchiahui\u002Fros-jazzy-noble:latest\n",[39,30025,30026],{"class":41,"line":118},[39,30027,3458],{"emptyLinePlaceholder":1145},[39,30029,30030,30032,30034,30036],{"class":41,"line":413},[39,30031,27610],{"class":3021},[39,30033,29954],{"class":1319},[39,30035,29864],{"class":1319},[39,30037,30038],{"class":1319}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[39,30040,30041],{"class":41,"line":419},[39,30042,3458],{"emptyLinePlaceholder":1145},[39,30044,30045,30047,30049,30051],{"class":41,"line":425},[39,30046,27610],{"class":3021},[39,30048,29954],{"class":1319},[39,30050,29881],{"class":1319},[39,30052,30053],{"class":1319}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[1171,30055,30056],{"start":74},[1174,30057,30058],{},"推送镜像到 Docker Hub",[19,30060,30061],{},"使用以下命令将镜像推送到 Docker Hub：",[29,30063,30065],{"className":24878,"code":30064,"language":24880,"meta":34,"style":34},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[36,30066,30067],{"__ignoreMap":34},[39,30068,30069,30071,30074,30076,30078,30080,30082],{"class":41,"line":42},[39,30070,27610],{"class":3021},[39,30072,30073],{"class":1319}," push",[39,30075,29959],{"class":49},[39,30077,29962],{"class":1319},[39,30079,29965],{"class":45},[39,30081,2158],{"class":49},[39,30083,30084],{"class":1319},"\u002Fros-noetic-jazzy-noble:latest\n",[19,30086,15689],{},[29,30088,30090],{"className":24878,"code":30089,"language":24880,"meta":34,"style":34},"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",[36,30091,30092,30100,30104,30112,30116,30124,30128,30137,30141,30149,30153],{"__ignoreMap":34},[39,30093,30094,30096,30098],{"class":41,"line":42},[39,30095,27610],{"class":3021},[39,30097,30073],{"class":1319},[39,30099,29993],{"class":1319},[39,30101,30102],{"class":41,"line":74},[39,30103,3458],{"emptyLinePlaceholder":1145},[39,30105,30106,30108,30110],{"class":41,"line":99},[39,30107,27610],{"class":3021},[39,30109,30073],{"class":1319},[39,30111,30008],{"class":1319},[39,30113,30114],{"class":41,"line":106},[39,30115,3458],{"emptyLinePlaceholder":1145},[39,30117,30118,30120,30122],{"class":41,"line":112},[39,30119,27610],{"class":3021},[39,30121,30073],{"class":1319},[39,30123,30023],{"class":1319},[39,30125,30126],{"class":41,"line":118},[39,30127,3458],{"emptyLinePlaceholder":1145},[39,30129,30130,30132,30134],{"class":41,"line":413},[39,30131,27610],{"class":3021},[39,30133,30073],{"class":1319},[39,30135,30136],{"class":1319}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[39,30138,30139],{"class":41,"line":419},[39,30140,3458],{"emptyLinePlaceholder":1145},[39,30142,30143,30145,30147],{"class":41,"line":425},[39,30144,27610],{"class":3021},[39,30146,30073],{"class":1319},[39,30148,30053],{"class":1319},[39,30150,30151],{"class":41,"line":443},[39,30152,3458],{"emptyLinePlaceholder":1145},[39,30154,30155,30157,30159],{"class":41,"line":449},[39,30156,27610],{"class":3021},[39,30158,30073],{"class":1319},[39,30160,30161],{"class":1319}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[1171,30163,30164],{"start":99},[1174,30165,30166],{},"验证推送成功",[19,30168,30169],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,30171,30172],{},[304,30173,4842],{},[2205,30175,30176,30179],{},[1174,30177,30178],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[1174,30180,30181],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,30183,30184],{},[269,30185],{"alt":34,"src":30186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,30188,30189],{},[269,30190],{"alt":34,"src":30191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23054,30193,30195],{"id":30194},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,30197,30198,30199,30202,30203,30206],{},"如果您想在 ",[304,30200,30201],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[304,30204,30205],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,30208,30209,30210],{},"1. ",[304,30211,30212],{},"启用 Docker 跨平台构建",[19,30214,30215],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,30217,30218],{},"第一步：启用 buildx（只需执行一次）",[29,30220,30222],{"className":24878,"code":30221,"language":24880,"meta":34,"style":34},"docker buildx create --name multiarch_builder --use\n",[36,30223,30224],{"__ignoreMap":34},[39,30225,30226,30228,30231,30234,30237,30240],{"class":41,"line":42},[39,30227,27610],{"class":3021},[39,30229,30230],{"class":1319}," buildx",[39,30232,30233],{"class":1319}," create",[39,30235,30236],{"class":56}," --name",[39,30238,30239],{"class":1319}," multiarch_builder",[39,30241,30242],{"class":56}," --use\n",[19,30244,30245],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,30247,30248],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[29,30250,30252],{"className":24878,"code":30251,"language":24880,"meta":34,"style":34},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[36,30253,30254],{"__ignoreMap":34},[39,30255,30256,30258,30260,30262,30265,30268,30271,30274],{"class":41,"line":42},[39,30257,27610],{"class":3021},[39,30259,28287],{"class":1319},[39,30261,28290],{"class":56},[39,30263,30264],{"class":56}," --privileged",[39,30266,30267],{"class":1319}," multiarch\u002Fqemu-user-static",[39,30269,30270],{"class":56}," --reset",[39,30272,30273],{"class":56}," -p",[39,30275,30276],{"class":1319}," yes\n",[19,30278,30279],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,30281,30282],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[29,30284,30286],{"className":24878,"code":30285,"language":24880,"meta":34,"style":34},"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",[36,30287,30288,30330,30334,30339,30349,30359,30368,30374,30378,30382,30392,30400,30409,30415,30419,30423,30433,30441,30450,30456,30460,30464,30474,30482,30491,30497,30501,30505,30515,30523,30532,30538,30542,30546,30556,30564,30573,30579,30583,30587,30597,30605,30614,30620,30624,30628,30638,30646,30655,30661,30665,30669,30679,30687,30696,30702,30706,30710,30721,30729,30738,30744],{"__ignoreMap":34},[39,30289,30290,30292,30294,30296,30299,30302,30304,30306,30309,30311,30313,30315,30317,30320,30323,30325,30328],{"class":41,"line":42},[39,30291,27610],{"class":3021},[39,30293,30230],{"class":1319},[39,30295,29789],{"class":1319},[39,30297,30298],{"class":56}," --platform",[39,30300,30301],{"class":1319}," linux\u002Famd64,linux\u002Farm64",[39,30303,29792],{"class":56},[39,30305,29959],{"class":49},[39,30307,30308],{"class":1319},"你的镜像",[39,30310,29965],{"class":45},[39,30312,2158],{"class":49},[39,30314,2057],{"class":1319},[39,30316,2108],{"class":49},[39,30318,30319],{"class":1319},"标",[39,30321,30322],{"class":45},"签",[39,30324,2158],{"class":49},[39,30326,30327],{"class":56}," --push",[39,30329,29798],{"class":1319},[39,30331,30332],{"class":41,"line":74},[39,30333,3458],{"emptyLinePlaceholder":1145},[39,30335,30336],{"class":41,"line":99},[39,30337,30338],{"class":102},"# 例子：\n",[39,30340,30341,30343,30345,30347],{"class":41,"line":106},[39,30342,27610],{"class":3021},[39,30344,30230],{"class":1319},[39,30346,29789],{"class":1319},[39,30348,25735],{"class":56},[39,30350,30351,30354,30357],{"class":41,"line":112},[39,30352,30353],{"class":45},"--platform ",[39,30355,30356],{"class":1319},"linux\u002Famd64,linux\u002Farm64",[39,30358,25735],{"class":56},[39,30360,30361,30363,30366],{"class":41,"line":118},[39,30362,29792],{"class":56},[39,30364,30365],{"class":1319}," tungchiahui\u002Fros:noetic-focal",[39,30367,25735],{"class":56},[39,30369,30370,30372],{"class":41,"line":413},[39,30371,30327],{"class":56},[39,30373,25735],{"class":56},[39,30375,30376],{"class":41,"line":419},[39,30377,29798],{"class":1319},[39,30379,30380],{"class":41,"line":425},[39,30381,3458],{"emptyLinePlaceholder":1145},[39,30383,30384,30386,30388,30390],{"class":41,"line":443},[39,30385,27610],{"class":3021},[39,30387,30230],{"class":1319},[39,30389,29789],{"class":1319},[39,30391,25735],{"class":56},[39,30393,30394,30396,30398],{"class":41,"line":449},[39,30395,30353],{"class":45},[39,30397,30356],{"class":1319},[39,30399,25735],{"class":56},[39,30401,30402,30404,30407],{"class":41,"line":455},[39,30403,29792],{"class":56},[39,30405,30406],{"class":1319}," tungchiahui\u002Fros:humble-jammy",[39,30408,25735],{"class":56},[39,30410,30411,30413],{"class":41,"line":461},[39,30412,30327],{"class":56},[39,30414,25735],{"class":56},[39,30416,30417],{"class":41,"line":475},[39,30418,29798],{"class":1319},[39,30420,30421],{"class":41,"line":665},[39,30422,3458],{"emptyLinePlaceholder":1145},[39,30424,30425,30427,30429,30431],{"class":41,"line":671},[39,30426,27610],{"class":3021},[39,30428,30230],{"class":1319},[39,30430,29789],{"class":1319},[39,30432,25735],{"class":56},[39,30434,30435,30437,30439],{"class":41,"line":684},[39,30436,30353],{"class":45},[39,30438,30356],{"class":1319},[39,30440,25735],{"class":56},[39,30442,30443,30445,30448],{"class":41,"line":2732},[39,30444,29792],{"class":56},[39,30446,30447],{"class":1319}," tungchiahui\u002Fros:jazzy-noble",[39,30449,25735],{"class":56},[39,30451,30452,30454],{"class":41,"line":2737},[39,30453,30327],{"class":56},[39,30455,25735],{"class":56},[39,30457,30458],{"class":41,"line":2751},[39,30459,29798],{"class":1319},[39,30461,30462],{"class":41,"line":2756},[39,30463,3458],{"emptyLinePlaceholder":1145},[39,30465,30466,30468,30470,30472],{"class":41,"line":2785},[39,30467,27377],{"class":3021},[39,30469,30230],{"class":1319},[39,30471,29789],{"class":1319},[39,30473,25735],{"class":56},[39,30475,30476,30478,30480],{"class":41,"line":2790},[39,30477,30353],{"class":45},[39,30479,30356],{"class":1319},[39,30481,25735],{"class":56},[39,30483,30484,30486,30489],{"class":41,"line":2807},[39,30485,29792],{"class":56},[39,30487,30488],{"class":1319}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[39,30490,25735],{"class":56},[39,30492,30493,30495],{"class":41,"line":2812},[39,30494,30327],{"class":56},[39,30496,25735],{"class":56},[39,30498,30499],{"class":41,"line":2817},[39,30500,29798],{"class":1319},[39,30502,30503],{"class":41,"line":2822},[39,30504,3458],{"emptyLinePlaceholder":1145},[39,30506,30507,30509,30511,30513],{"class":41,"line":2836},[39,30508,27610],{"class":3021},[39,30510,30230],{"class":1319},[39,30512,29789],{"class":1319},[39,30514,25735],{"class":56},[39,30516,30517,30519,30521],{"class":41,"line":2841},[39,30518,30353],{"class":45},[39,30520,30356],{"class":1319},[39,30522,25735],{"class":56},[39,30524,30525,30527,30530],{"class":41,"line":3635},[39,30526,29792],{"class":56},[39,30528,30529],{"class":1319}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[39,30531,25735],{"class":56},[39,30533,30534,30536],{"class":41,"line":3649},[39,30535,30327],{"class":56},[39,30537,25735],{"class":56},[39,30539,30540],{"class":41,"line":3657},[39,30541,29798],{"class":1319},[39,30543,30544],{"class":41,"line":3662},[39,30545,3458],{"emptyLinePlaceholder":1145},[39,30547,30548,30550,30552,30554],{"class":41,"line":3668},[39,30549,27377],{"class":3021},[39,30551,30230],{"class":1319},[39,30553,29789],{"class":1319},[39,30555,25735],{"class":56},[39,30557,30558,30560,30562],{"class":41,"line":3674},[39,30559,30353],{"class":45},[39,30561,30356],{"class":1319},[39,30563,25735],{"class":56},[39,30565,30566,30568,30571],{"class":41,"line":3679},[39,30567,29792],{"class":56},[39,30569,30570],{"class":1319}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[39,30572,25735],{"class":56},[39,30574,30575,30577],{"class":41,"line":9004},[39,30576,30327],{"class":56},[39,30578,25735],{"class":56},[39,30580,30581],{"class":41,"line":9028},[39,30582,29798],{"class":1319},[39,30584,30585],{"class":41,"line":9033},[39,30586,3458],{"emptyLinePlaceholder":1145},[39,30588,30589,30591,30593,30595],{"class":41,"line":9039},[39,30590,27610],{"class":3021},[39,30592,30230],{"class":1319},[39,30594,29789],{"class":1319},[39,30596,25735],{"class":56},[39,30598,30599,30601,30603],{"class":41,"line":9066},[39,30600,30353],{"class":45},[39,30602,30356],{"class":1319},[39,30604,25735],{"class":56},[39,30606,30607,30609,30612],{"class":41,"line":9071},[39,30608,29792],{"class":56},[39,30610,30611],{"class":1319}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[39,30613,25735],{"class":56},[39,30615,30616,30618],{"class":41,"line":9077},[39,30617,30327],{"class":56},[39,30619,25735],{"class":56},[39,30621,30622],{"class":41,"line":9089},[39,30623,29798],{"class":1319},[39,30625,30626],{"class":41,"line":9101},[39,30627,3458],{"emptyLinePlaceholder":1145},[39,30629,30630,30632,30634,30636],{"class":41,"line":9113},[39,30631,27610],{"class":3021},[39,30633,30230],{"class":1319},[39,30635,29789],{"class":1319},[39,30637,25735],{"class":56},[39,30639,30640,30642,30644],{"class":41,"line":10772},[39,30641,30353],{"class":45},[39,30643,30356],{"class":1319},[39,30645,25735],{"class":56},[39,30647,30648,30650,30653],{"class":41,"line":10797},[39,30649,29792],{"class":56},[39,30651,30652],{"class":1319}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[39,30654,25735],{"class":56},[39,30656,30657,30659],{"class":41,"line":10820},[39,30658,30327],{"class":56},[39,30660,25735],{"class":56},[39,30662,30663],{"class":41,"line":10844},[39,30664,29798],{"class":1319},[39,30666,30667],{"class":41,"line":10849},[39,30668,3458],{"emptyLinePlaceholder":1145},[39,30670,30671,30673,30675,30677],{"class":41,"line":10854},[39,30672,27377],{"class":3021},[39,30674,30230],{"class":1319},[39,30676,29789],{"class":1319},[39,30678,25735],{"class":56},[39,30680,30681,30683,30685],{"class":41,"line":10859},[39,30682,30353],{"class":45},[39,30684,30356],{"class":1319},[39,30686,25735],{"class":56},[39,30688,30689,30691,30694],{"class":41,"line":10868},[39,30690,29792],{"class":56},[39,30692,30693],{"class":1319}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[39,30695,25735],{"class":56},[39,30697,30698,30700],{"class":41,"line":10873},[39,30699,30327],{"class":56},[39,30701,25735],{"class":56},[39,30703,30704],{"class":41,"line":10879},[39,30705,29798],{"class":1319},[39,30707,30708],{"class":41,"line":10900},[39,30709,3458],{"emptyLinePlaceholder":1145},[39,30711,30712,30715,30717,30719],{"class":41,"line":10906},[39,30713,30714],{"class":3021},"  docker",[39,30716,30230],{"class":1319},[39,30718,29789],{"class":1319},[39,30720,25735],{"class":56},[39,30722,30723,30725,30727],{"class":41,"line":10920},[39,30724,30353],{"class":45},[39,30726,30356],{"class":1319},[39,30728,25735],{"class":56},[39,30730,30731,30733,30736],{"class":41,"line":10926},[39,30732,29792],{"class":56},[39,30734,30735],{"class":1319}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[39,30737,25735],{"class":56},[39,30739,30740,30742],{"class":41,"line":10953},[39,30741,30327],{"class":56},[39,30743,25735],{"class":56},[39,30745,30746],{"class":41,"line":10962},[39,30747,29798],{"class":1319},[19,30749,30750],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,30752,30753],{},[269,30754],{"alt":34,"src":30755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,30757,30758],{},[269,30759],{"alt":34,"src":30760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23054,30762,30764],{"id":30763},"_623清除构建缓存","6.2.3.清除构建缓存",[29,30766,30768],{"className":24878,"code":30767,"language":24880,"meta":34,"style":34},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[36,30769,30770,30775],{"__ignoreMap":34},[39,30771,30772],{"class":41,"line":42},[39,30773,30774],{"class":102},"# 清理BuildKit构建缓存\n",[39,30776,30777,30779,30782,30785],{"class":41,"line":74},[39,30778,27610],{"class":3021},[39,30780,30781],{"class":1319}," builder",[39,30783,30784],{"class":1319}," prune",[39,30786,30787],{"class":56}," -f\n",[19,30789,30790],{},[269,30791],{"alt":34,"src":30792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[1188,30794,30796],{"id":30795},"_63补充","6.3.补充",[23054,30798,30800],{"id":30799},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,30802,30803],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,30805,30806],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,30808,30809],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[29,30811,30813],{"className":24878,"code":30812,"language":24880,"meta":34,"style":34},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[36,30814,30815,30822],{"__ignoreMap":34},[39,30816,30817,30819],{"class":41,"line":42},[39,30818,28427],{"class":3021},[39,30820,30821],{"class":1319}," nginx\n",[39,30823,30824,30826,30829,30832,30834],{"class":41,"line":74},[39,30825,29612],{"class":3021},[39,30827,30828],{"class":1319}," echo",[39,30830,30831],{"class":1319}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[39,30833,27279],{"class":49},[39,30835,30836],{"class":1319}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,30838,30839],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,30841,30842],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[29,30844,30846],{"className":24878,"code":30845,"language":24880,"meta":34,"style":34},"docker build -t nginx:tuling .\n",[36,30847,30848],{"__ignoreMap":34},[39,30849,30850,30852,30854,30856,30859],{"class":41,"line":42},[39,30851,27610],{"class":3021},[39,30853,29789],{"class":1319},[39,30855,29792],{"class":56},[39,30857,30858],{"class":1319}," nginx:tuling",[39,30860,29798],{"class":1319},[19,30862,30863],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,30865,30866],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[29,30868,30870],{"className":24878,"code":30869,"language":24880,"meta":34,"style":34},"docker run -d -p 92:80 nginx:tuling\n",[36,30871,30872],{"__ignoreMap":34},[39,30873,30874,30876,30878,30881,30883,30886],{"class":41,"line":42},[39,30875,27610],{"class":3021},[39,30877,28287],{"class":1319},[39,30879,30880],{"class":56}," -d",[39,30882,30273],{"class":56},[39,30884,30885],{"class":1319}," 92:80",[39,30887,30888],{"class":1319}," nginx:tuling\n",[19,30890,30891,30892],{},"4、访问 ",[46,30893,30896],{"href":30894,"rel":30895},"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",[24921],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,30898,30899],{},[269,30900],{"alt":34,"src":30901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,30903,30904],{},[269,30905],{"alt":34,"src":30906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23054,30908,30910],{"id":30909},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,30912,30913],{},"只需要知道大体流程即可",[19,30915,30916],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30918,30919],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30921,30922],{},"2、在Dockerfile中添加以下内容",[29,30924,30926],{"className":27148,"code":30925,"language":27150,"meta":34,"style":34},"# 基于哪个镜像\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",[36,30927,30928,30933,30938,30943,30948,30953,30958,30963],{"__ignoreMap":34},[39,30929,30930],{"class":41,"line":42},[39,30931,30932],{},"# 基于哪个镜像\n",[39,30934,30935],{"class":41,"line":74},[39,30936,30937],{},"From java:8\n",[39,30939,30940],{"class":41,"line":99},[39,30941,30942],{},"# 复制文件到容器\n",[39,30944,30945],{"class":41,"line":106},[39,30946,30947],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[39,30949,30950],{"class":41,"line":112},[39,30951,30952],{},"# 声明需要暴露的端口\n",[39,30954,30955],{"class":41,"line":118},[39,30956,30957],{},"EXPOSE 8877\n",[39,30959,30960],{"class":41,"line":413},[39,30961,30962],{},"# 配置容器启动后执行的命令\n",[39,30964,30965],{"class":41,"line":419},[39,30966,30967],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30969,30970],{},"3、使用docker build命令构建镜像",[29,30972,30974],{"className":24878,"code":30973,"language":24880,"meta":34,"style":34},"docker build -t tulingmall-member:0.0.5 .\n",[36,30975,30976],{"__ignoreMap":34},[39,30977,30978,30980,30982,30984,30987],{"class":41,"line":42},[39,30979,27610],{"class":3021},[39,30981,29789],{"class":1319},[39,30983,29792],{"class":56},[39,30985,30986],{"class":1319}," tulingmall-member:0.0.5",[39,30988,29798],{"class":1319},[19,30990,30991],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30993,30994],{},[269,30995],{"alt":34,"src":30996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30998,30999],{},"4、启动镜像，加-d可在后台启动",[29,31001,31003],{"className":24878,"code":31002,"language":24880,"meta":34,"style":34},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[36,31004,31005],{"__ignoreMap":34},[39,31006,31007,31009,31011,31013,31015,31018],{"class":41,"line":42},[39,31008,27610],{"class":3021},[39,31010,28287],{"class":1319},[39,31012,30880],{"class":56},[39,31014,30273],{"class":56},[39,31016,31017],{"class":1319}," 8877:8877",[39,31019,31020],{"class":1319}," tulingmall-member:0.0.5\n",[19,31022,31023],{},"加上JVM参数：",[29,31025,31027],{"className":24878,"code":31026,"language":24880,"meta":34,"style":34},"# --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",[36,31028,31029,31034,31049,31059,31068,31075],{"__ignoreMap":34},[39,31030,31031],{"class":41,"line":42},[39,31032,31033],{"class":102},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[39,31035,31036,31038,31040,31043,31045,31047],{"class":41,"line":74},[39,31037,27610],{"class":3021},[39,31039,28287],{"class":1319},[39,31041,31042],{"class":56},"  -d",[39,31044,30273],{"class":56},[39,31046,31017],{"class":1319},[39,31048,25735],{"class":56},[39,31050,31051,31053,31056],{"class":41,"line":99},[39,31052,29185],{"class":45},[39,31054,31055],{"class":1319},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[39,31057,31058],{"class":56},"  \\\n",[39,31060,31061,31063,31066],{"class":41,"line":106},[39,31062,29185],{"class":45},[39,31064,31065],{"class":1319},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[39,31067,31058],{"class":56},[39,31069,31070,31073],{"class":41,"line":112},[39,31071,31072],{"class":45},"--cap-add=SYS_PTRACE  ",[39,31074,27232],{"class":56},[39,31076,31077],{"class":41,"line":118},[39,31078,31079],{"class":45},"tulingmall-member:0.0.5\n",[19,31081,31082],{},"5、访问会员服务接口",[19,31084,31085],{},[269,31086],{"alt":34,"src":31087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23054,31089,31091],{"id":31090},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,31093,31094],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,31096,31097,31098],{},"阿里云docker镜像仓库：",[46,31099,31100],{"href":31100,"rel":31101},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24921],[19,31103,31104],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,31106,31107],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,31109,31110],{},[269,31111],{"alt":34,"src":31112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,31114,31115],{},"要把镜像推送到镜像仓库",[29,31117,31119],{"className":24878,"code":31118,"language":24880,"meta":34,"style":34},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[36,31120,31121],{"__ignoreMap":34},[39,31122,31123,31125,31127,31129],{"class":41,"line":42},[39,31124,27610],{"class":3021},[39,31126,29954],{"class":1319},[39,31128,30986],{"class":1319},[39,31130,31131],{"class":1319}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,31133,31134],{},"最后将镜像推送到远程仓库",[29,31136,31138],{"className":24878,"code":31137,"language":24880,"meta":34,"style":34},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[36,31139,31140],{"__ignoreMap":34},[39,31141,31142,31144,31146],{"class":41,"line":42},[39,31143,27610],{"class":3021},[39,31145,30073],{"class":1319},[39,31147,31131],{"class":1319},[1133,31149,31150],{},"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":34,"searchDepth":74,"depth":74,"links":31152},[31153,31154,31155],{"id":29540,"depth":99,"text":29541},{"id":29769,"depth":99,"text":29770},{"id":30795,"depth":99,"text":30796},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":29532,"description":34},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31162,"title":31163,"body":31164,"description":34,"extension":1143,"meta":31307,"navigation":1145,"path":31308,"seo":31309,"stem":31310,"__hash__":31311},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31165,"toc":31305},[31166,31169,31174,31179,31182,31187,31192,31195,31200,31205,31208,31213,31216,31219,31222,31225,31228,31231,31251,31273,31276,31279,31299,31302],[10,31167,31163],{"id":31168},"_7vscode远程开发",[1171,31170,31171],{},[1174,31172,31173],{},"插件1：微软Docker工具",[19,31175,31176],{},[269,31177],{"alt":34,"src":31178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,31180,31181],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,31183,31184],{},[269,31185],{"alt":34,"src":31186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[1171,31188,31189],{"start":74},[1174,31190,31191],{},"插件2：微软Docker远程开发工具",[19,31193,31194],{},"下面这是远程开发的插件。",[19,31196,31197],{},[269,31198],{"alt":34,"src":31199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,31201,31202],{},[269,31203],{"alt":34,"src":31204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,31206,31207],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,31209,31210],{},[269,31211],{"alt":34,"src":31212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,31214,31215],{},"安装完拓展之后，vscode进行链接：",[19,31217,31218],{},"1.按ctrl+shift+p",[19,31220,31221],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,31223,31224],{},"3.选择目前运行的容器",[19,31226,31227],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,31229,31230],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[29,31232,31234],{"className":24878,"code":31233,"language":24880,"meta":34,"style":34},"docker run -v 主机目录:容器目录 image-name\n",[36,31235,31236],{"__ignoreMap":34},[39,31237,31238,31240,31242,31245,31248],{"class":41,"line":42},[39,31239,27610],{"class":3021},[39,31241,28287],{"class":1319},[39,31243,31244],{"class":56}," -v",[39,31246,31247],{"class":1319}," 主机目录:容器目录",[39,31249,31250],{"class":1319}," image-name\n",[29,31252,31254],{"className":24878,"code":31253,"language":24880,"meta":34,"style":34},"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",[36,31255,31256],{"__ignoreMap":34},[39,31257,31258,31260,31262,31265,31267,31270],{"class":41,"line":42},[39,31259,27610],{"class":3021},[39,31261,28287],{"class":1319},[39,31263,31264],{"class":56}," -it",[39,31266,31244],{"class":56},[39,31268,31269],{"class":1319}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[39,31271,31272],{"class":1319}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,31274,31275],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,31277,31278],{},"查看挂载情况：",[29,31280,31282],{"className":24878,"code":31281,"language":24880,"meta":34,"style":34},"mount | grep -i project\n",[36,31283,31284],{"__ignoreMap":34},[39,31285,31286,31289,31291,31294,31296],{"class":41,"line":42},[39,31287,31288],{"class":3021},"mount",[39,31290,26166],{"class":49},[39,31292,31293],{"class":3021}," grep",[39,31295,27487],{"class":56},[39,31297,31298],{"class":1319}," project\n",[19,31300,31301],{},"也可以通过ls来进行查看",[1133,31303,31304],{},"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":34,"searchDepth":74,"depth":74,"links":31306},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31163,"description":34},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":31313,"title":31314,"body":31315,"description":1142,"extension":1143,"meta":31319,"navigation":1145,"path":31321,"seo":31322,"stem":31323,"__hash__":31324},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":31316,"toc":31317},[],{"title":34,"searchDepth":74,"depth":74,"links":31318},[],{"category":31320},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":31314,"description":1142},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":31326,"title":31327,"body":31328,"description":1142,"extension":1143,"meta":31332,"navigation":1145,"path":31333,"seo":31334,"stem":31335,"__hash__":31336},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":31329,"toc":31330},[],{"title":34,"searchDepth":74,"depth":74,"links":31331},[],{"category":31320},"\u002Fwiki\u002F2025-11-10-k8s",{"title":31327,"description":1142},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":31338,"title":31339,"body":31340,"description":1142,"extension":1143,"meta":31631,"navigation":1145,"path":31632,"seo":31633,"stem":31634,"__hash__":31635},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":31341,"toc":31629},[31342,31345,31353,31368,31373,31424,31427,31433,31618,31623,31626],[10,31343,31339],{"id":31344},"_1验证深度学习环境",[19,31346,31347,31348],{},"关于环境的安装，看",[46,31349,31352],{"href":31350,"rel":31351},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24921],"Pytorch-->深度学习",[19,31354,31355,31356,31359,31360,31363,31364,31367],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[36,31357,31358],{},"pytorch-cuda=12.4"," 是一个“ ",[304,31361,31362],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[304,31365,31366],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,31369,31370],{},[269,31371],{"alt":34,"src":31372},"\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",[29,31374,31376],{"className":24878,"code":31375,"language":24880,"meta":34,"style":34},"# 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",[36,31377,31378,31383],{"__ignoreMap":34},[39,31379,31380],{"class":41,"line":42},[39,31381,31382],{"class":102},"# CUDA 12.4\n",[39,31384,31385,31388,31390,31393,31396,31399,31402,31405,31407,31410,31413,31416,31419,31421],{"class":41,"line":74},[39,31386,31387],{"class":3021},"conda",[39,31389,24890],{"class":1319},[39,31391,31392],{"class":1319}," pytorch==",[39,31394,31395],{"class":56},"2.5.1",[39,31397,31398],{"class":1319}," torchvision==",[39,31400,31401],{"class":56},"0.20.1",[39,31403,31404],{"class":1319}," torchaudio==",[39,31406,31395],{"class":56},[39,31408,31409],{"class":1319}," pytorch-cuda=",[39,31411,31412],{"class":56},"12.4",[39,31414,31415],{"class":56}," -c",[39,31417,31418],{"class":1319}," pytorch",[39,31420,31415],{"class":56},[39,31422,31423],{"class":1319}," nvidia\n",[19,31425,31426],{},"）：",[19,31428,31429],{},[46,31430,31431],{"href":31431,"rel":31432},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24921],[29,31434,31436],{"className":31,"code":31435,"language":33,"meta":34,"style":34},"# 对深度学习环境进行测试\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",[36,31437,31438,31443,31451,31456,31466,31482,31487,31497,31534,31541,31553,31569,31574,31584,31596,31606],{"__ignoreMap":34},[39,31439,31440],{"class":41,"line":42},[39,31441,31442],{"class":102},"# 对深度学习环境进行测试\n",[39,31444,31445,31448],{"class":41,"line":74},[39,31446,31447],{"class":49},"import",[39,31449,31450],{"class":45}," torch\n",[39,31452,31453],{"class":41,"line":99},[39,31454,31455],{"class":102},"# 查看cuda是否被激活\n",[39,31457,31458,31461,31463],{"class":41,"line":106},[39,31459,31460],{"class":45},"flag",[39,31462,50],{"class":49},[39,31464,31465],{"class":45},"torch.cuda.is_available()\n",[39,31467,31468,31471,31473,31476,31479],{"class":41,"line":112},[39,31469,31470],{"class":56},"print",[39,31472,1221],{"class":45},[39,31474,31475],{"class":1319},"\"cuda:\"",[39,31477,31478],{"class":45},", flag)   ",[39,31480,31481],{"class":102},"#返回true的话说明被激活\n",[39,31483,31484],{"class":41,"line":118},[39,31485,31486],{"class":102},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[39,31488,31489,31492,31494],{"class":41,"line":413},[39,31490,31491],{"class":45},"ngpu",[39,31493,50],{"class":49},[39,31495,31496],{"class":56},"1\n",[39,31498,31499,31502,31504,31507,31510,31512,31515,31518,31521,31523,31525,31527,31529,31532],{"class":41,"line":419},[39,31500,31501],{"class":45},"device",[39,31503,50],{"class":49},[39,31505,31506],{"class":45},"torch.device(",[39,31508,31509],{"class":1319},"\"cuda:0\"",[39,31511,2762],{"class":49},[39,31513,31514],{"class":45},"(torch.cuda.is_available() ",[39,31516,31517],{"class":49},"and",[39,31519,31520],{"class":45}," ngpu",[39,31522,2158],{"class":49},[39,31524,260],{"class":56},[39,31526,14770],{"class":45},[39,31528,2759],{"class":49},[39,31530,31531],{"class":1319}," \"cpu\"",[39,31533,209],{"class":45},[39,31535,31536,31538],{"class":41,"line":425},[39,31537,31470],{"class":56},[39,31539,31540],{"class":45},"(device)\n",[39,31542,31543,31545,31548,31550],{"class":41,"line":443},[39,31544,31470],{"class":56},[39,31546,31547],{"class":45},"(torch.cuda.get_device_name(",[39,31549,260],{"class":56},[39,31551,31552],{"class":45},"))\n",[39,31554,31555,31557,31560,31562,31564,31566],{"class":41,"line":449},[39,31556,31470],{"class":56},[39,31558,31559],{"class":45},"(torch.rand(",[39,31561,68],{"class":56},[39,31563,60],{"class":45},[39,31565,68],{"class":56},[39,31567,31568],{"class":45},").cuda())\n",[39,31570,31571],{"class":41,"line":455},[39,31572,31573],{"class":102},"# 查看cuda和cudnn的版本\n",[39,31575,31576,31579,31581],{"class":41,"line":461},[39,31577,31578],{"class":45},"cuda_version",[39,31580,50],{"class":49},[39,31582,31583],{"class":45},"torch.version.cuda\n",[39,31585,31586,31588,31590,31593],{"class":41,"line":475},[39,31587,31470],{"class":56},[39,31589,1221],{"class":45},[39,31591,31592],{"class":1319},"\"cuda version\"",[39,31594,31595],{"class":45},",cuda_version)\n",[39,31597,31598,31601,31603],{"class":41,"line":665},[39,31599,31600],{"class":45},"cudnn_version",[39,31602,50],{"class":49},[39,31604,31605],{"class":45},"torch.backends.cudnn.version()\n",[39,31607,31608,31610,31612,31615],{"class":41,"line":671},[39,31609,31470],{"class":56},[39,31611,1221],{"class":45},[39,31613,31614],{"class":1319},"\"cudnn version\"",[39,31616,31617],{"class":45},",cudnn_version)\n",[19,31619,31620],{},[269,31621],{"alt":34,"src":31622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[19,31624,31625],{},"cuda:0 指的是一块显卡",[1133,31627,31628],{},"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":34,"searchDepth":74,"depth":74,"links":31630},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":31339,"description":1142},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31637,"title":31638,"body":31639,"description":1142,"extension":1143,"meta":51442,"navigation":1145,"path":51443,"seo":51444,"stem":51445,"__hash__":51446},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31640,"toc":51436},[31641,31644,31648,31652,31655,31660,31665,31668,31673,31678,31683,31686,31690,31695,31699,31704,31707,31712,31715,31718,31721,31724,31729,31732,31737,31742,31747,31752,31755,31759,31762,31767,32371,32376,32379,32384,32387,32390,32854,32857,32860,32863,32866,34917,34920,34925,34930,35725,35728,35733,36511,36515,38174,38178,38892,38896,38900,38905,38910,38915,38918,38923,38928,38933,38938,38943,38947,38952,40234,40239,40242,40245,40248,40403,40406,40409,41625,41630,42325,42329,42333,42338,42343,42346,42351,42356,42361,42366,42371,42376,42381,42386,42391,42396,42401,42406,42411,42416,42421,42426,42431,42436,42441,42446,42451,42456,42461,42466,42471,42476,42481,42486,42491,42496,42500,42504,42507,43985,43989,45636,45640,46334,46338,46341,46344,46888,46891,46895,46898,48295,48299,48302,48879,50666,50670,50673,51433],[10,31642,31638],{"id":31643},"_2经典神经网络",[1188,31645,31647],{"id":31646},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23054,31649,31651],{"id":31650},"_211原理介绍","2.1.1.原理介绍",[19,31653,31654],{},"LeNet-5",[1171,31656,31657],{},[1174,31658,31659],{},"原理",[19,31661,31662],{},[269,31663],{"alt":34,"src":31664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[19,31666,31667],{},"B是batch批次；C是channel通道",[1171,31669,31670],{"start":74},[1174,31671,31672],{},"网络参数详细",[19,31674,31675],{},[269,31676],{"alt":34,"src":31677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[19,31679,31680],{},[269,31681],{"alt":34,"src":31682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[19,31684,31685],{},"AlexNet",[1171,31687,31688],{},[1174,31689,31659],{},[19,31691,31692],{},[269,31693],{"alt":34,"src":31694},"\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",[1171,31696,31697],{"start":74},[1174,31698,31672],{},[19,31700,31701],{},[269,31702],{"alt":34,"src":31703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[19,31705,31706],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,31708,31709],{},[269,31710],{"alt":34,"src":31711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[19,31713,31714],{},"数据处理中的图像增强操作:",[19,31716,31717],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,31719,31720],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,31722,31723],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,31725,31726],{},[269,31727],{"alt":34,"src":31728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[19,31730,31731],{},"提升网络精确度的方法：LRN正则化",[19,31733,31734],{},[269,31735],{"alt":34,"src":31736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[19,31738,31739],{},[269,31740],{"alt":34,"src":31741},"\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",[1171,31743,31744],{"start":99},[1174,31745,31746],{},"AlexNet的总结",[19,31748,31749],{},[269,31750],{"alt":34,"src":31751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[19,31753,31754],{},"比LeNet模型要深一丢丢",[23054,31756,31758],{"id":31757},"_212代码实现","2.1.2.代码实现",[19,31760,31761],{},"（1）LeNet",[1171,31763,31764],{},[1174,31765,31766],{},"模型搭建",[29,31768,31770],{"className":31,"code":31769,"language":33,"meta":34,"style":34},"# 导入库\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",[36,31771,31772,31777,31783,31788,31801,31806,31818,31822,31842,31847,31852,31863,31868,31887,31891,31896,31945,31957,31962,31991,32026,32053,32058,32070,32075,32095,32114,32133,32137,32142,32152,32169,32180,32195,32206,32217,32232,32247,32258,32265,32269,32283,32288,32311,32316,32321,32326,32330,32335,32340,32350],{"__ignoreMap":34},[39,31773,31774],{"class":41,"line":42},[39,31775,31776],{"class":102},"# 导入库\n",[39,31778,31779,31781],{"class":41,"line":74},[39,31780,31447],{"class":49},[39,31782,31450],{"class":45},[39,31784,31785],{"class":41,"line":99},[39,31786,31787],{"class":102},"# 导入神经网络层\n",[39,31789,31790,31793,31796,31798],{"class":41,"line":106},[39,31791,31792],{"class":49},"from",[39,31794,31795],{"class":45}," torch ",[39,31797,31447],{"class":49},[39,31799,31800],{"class":45}," nn\n",[39,31802,31803],{"class":41,"line":112},[39,31804,31805],{"class":102},"# 导入展示神经网络参数的包\n",[39,31807,31808,31810,31813,31815],{"class":41,"line":118},[39,31809,31792],{"class":49},[39,31811,31812],{"class":45}," torchsummary ",[39,31814,31447],{"class":49},[39,31816,31817],{"class":45}," summary\n",[39,31819,31820],{"class":41,"line":413},[39,31821,3458],{"emptyLinePlaceholder":1145},[39,31823,31824,31826,31829,31831,31834,31836,31839],{"class":41,"line":419},[39,31825,15750],{"class":49},[39,31827,31828],{"class":3021}," LeNet",[39,31830,1221],{"class":45},[39,31832,31833],{"class":3021},"nn",[39,31835,1758],{"class":45},[39,31837,31838],{"class":3021},"Module",[39,31840,31841],{"class":45},"):\n",[39,31843,31844],{"class":41,"line":425},[39,31845,31846],{"class":102},"    # 模型初始化:\n",[39,31848,31849],{"class":41,"line":443},[39,31850,31851],{"class":102},"    # 定义一些网络层和激活函数\n",[39,31853,31854,31857,31860],{"class":41,"line":449},[39,31855,31856],{"class":49},"    def",[39,31858,31859],{"class":56}," __init__",[39,31861,31862],{"class":45},"(self):\n",[39,31864,31865],{"class":41,"line":455},[39,31866,31867],{"class":102},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[39,31869,31870,31873,31876,31879,31882,31885],{"class":41,"line":461},[39,31871,31872],{"class":56},"        super",[39,31874,31875],{"class":45},"(LeNet,",[39,31877,31878],{"class":56},"self",[39,31880,31881],{"class":45},").",[39,31883,31884],{"class":56},"__init__",[39,31886,3034],{"class":45},[39,31888,31889],{"class":41,"line":475},[39,31890,3458],{"emptyLinePlaceholder":1145},[39,31892,31893],{"class":41,"line":665},[39,31894,31895],{"class":102},"        # 定义网络层\n",[39,31897,31898,31901,31904,31906,31909,31912,31914,31916,31918,31921,31923,31925,31927,31930,31932,31934,31936,31939,31941,31943],{"class":41,"line":671},[39,31899,31900],{"class":56},"        self",[39,31902,31903],{"class":45},".c1",[39,31905,50],{"class":49},[39,31907,31908],{"class":45},"nn.Conv2d(",[39,31910,31911],{"class":254},"in_channels",[39,31913,50],{"class":49},[39,31915,57],{"class":56},[39,31917,60],{"class":45},[39,31919,31920],{"class":254},"out_channels",[39,31922,50],{"class":49},[39,31924,94],{"class":56},[39,31926,60],{"class":45},[39,31928,31929],{"class":254},"kernel_size",[39,31931,50],{"class":49},[39,31933,89],{"class":56},[39,31935,60],{"class":45},[39,31937,31938],{"class":254},"padding",[39,31940,50],{"class":49},[39,31942,63],{"class":56},[39,31944,209],{"class":45},[39,31946,31947,31949,31952,31954],{"class":41,"line":684},[39,31948,31900],{"class":56},[39,31950,31951],{"class":45},".sig",[39,31953,50],{"class":49},[39,31955,31956],{"class":45},"nn.Sigmoid()\n",[39,31958,31959],{"class":41,"line":2732},[39,31960,31961],{"class":102},"        # 定义池化\n",[39,31963,31964,31966,31969,31971,31974,31976,31978,31980,31982,31985,31987,31989],{"class":41,"line":2737},[39,31965,31900],{"class":56},[39,31967,31968],{"class":45},".s2",[39,31970,50],{"class":49},[39,31972,31973],{"class":45},"nn.AvgPool2d(",[39,31975,31929],{"class":254},[39,31977,50],{"class":49},[39,31979,63],{"class":56},[39,31981,60],{"class":45},[39,31983,31984],{"class":254},"stride",[39,31986,50],{"class":49},[39,31988,63],{"class":56},[39,31990,209],{"class":45},[39,31992,31993,31995,31998,32000,32002,32004,32006,32008,32010,32012,32014,32016,32018,32020,32022,32024],{"class":41,"line":2751},[39,31994,31900],{"class":56},[39,31996,31997],{"class":45},".c3",[39,31999,50],{"class":49},[39,32001,31908],{"class":45},[39,32003,31911],{"class":254},[39,32005,50],{"class":49},[39,32007,94],{"class":56},[39,32009,60],{"class":45},[39,32011,31920],{"class":254},[39,32013,50],{"class":49},[39,32015,1801],{"class":56},[39,32017,60],{"class":45},[39,32019,31929],{"class":254},[39,32021,50],{"class":49},[39,32023,89],{"class":56},[39,32025,209],{"class":45},[39,32027,32028,32030,32033,32035,32037,32039,32041,32043,32045,32047,32049,32051],{"class":41,"line":2756},[39,32029,31900],{"class":56},[39,32031,32032],{"class":45},".s4",[39,32034,50],{"class":49},[39,32036,31973],{"class":45},[39,32038,31929],{"class":254},[39,32040,50],{"class":49},[39,32042,63],{"class":56},[39,32044,60],{"class":45},[39,32046,31984],{"class":254},[39,32048,50],{"class":49},[39,32050,63],{"class":56},[39,32052,209],{"class":45},[39,32054,32055],{"class":41,"line":2785},[39,32056,32057],{"class":102},"        # 定义平展层\n",[39,32059,32060,32062,32065,32067],{"class":41,"line":2790},[39,32061,31900],{"class":56},[39,32063,32064],{"class":45},".flatten",[39,32066,50],{"class":49},[39,32068,32069],{"class":45},"nn.Flatten()\n",[39,32071,32072],{"class":41,"line":2807},[39,32073,32074],{"class":102},"        # 定义全连接层\n",[39,32076,32077,32079,32082,32084,32087,32089,32091,32093],{"class":41,"line":2812},[39,32078,31900],{"class":56},[39,32080,32081],{"class":45},".f5",[39,32083,50],{"class":49},[39,32085,32086],{"class":45},"nn.Linear(",[39,32088,5045],{"class":56},[39,32090,60],{"class":45},[39,32092,2015],{"class":56},[39,32094,209],{"class":45},[39,32096,32097,32099,32102,32104,32106,32108,32110,32112],{"class":41,"line":2817},[39,32098,31900],{"class":56},[39,32100,32101],{"class":45},".f6",[39,32103,50],{"class":49},[39,32105,32086],{"class":45},[39,32107,2015],{"class":56},[39,32109,60],{"class":45},[39,32111,1909],{"class":56},[39,32113,209],{"class":45},[39,32115,32116,32118,32121,32123,32125,32127,32129,32131],{"class":41,"line":2822},[39,32117,31900],{"class":56},[39,32119,32120],{"class":45},".f7",[39,32122,50],{"class":49},[39,32124,32086],{"class":45},[39,32126,1909],{"class":56},[39,32128,60],{"class":45},[39,32130,146],{"class":56},[39,32132,209],{"class":45},[39,32134,32135],{"class":41,"line":2836},[39,32136,3458],{"emptyLinePlaceholder":1145},[39,32138,32139],{"class":41,"line":2841},[39,32140,32141],{"class":102},"    # 写工具->写前向传播\n",[39,32143,32144,32146,32149],{"class":41,"line":3635},[39,32145,31856],{"class":49},[39,32147,32148],{"class":3021}," forward",[39,32150,32151],{"class":45},"(self,x):\n",[39,32153,32154,32157,32159,32161,32164,32166],{"class":41,"line":3649},[39,32155,32156],{"class":45},"        x",[39,32158,50],{"class":49},[39,32160,31878],{"class":56},[39,32162,32163],{"class":45},".sig(",[39,32165,31878],{"class":56},[39,32167,32168],{"class":45},".c1(x))\n",[39,32170,32171,32173,32175,32177],{"class":41,"line":3657},[39,32172,32156],{"class":45},[39,32174,50],{"class":49},[39,32176,31878],{"class":56},[39,32178,32179],{"class":45},".s2(x)\n",[39,32181,32182,32184,32186,32188,32190,32192],{"class":41,"line":3662},[39,32183,32156],{"class":45},[39,32185,50],{"class":49},[39,32187,31878],{"class":56},[39,32189,32163],{"class":45},[39,32191,31878],{"class":56},[39,32193,32194],{"class":45},".c3(x))\n",[39,32196,32197,32199,32201,32203],{"class":41,"line":3668},[39,32198,32156],{"class":45},[39,32200,50],{"class":49},[39,32202,31878],{"class":56},[39,32204,32205],{"class":45},".s4(x)\n",[39,32207,32208,32210,32212,32214],{"class":41,"line":3674},[39,32209,32156],{"class":45},[39,32211,50],{"class":49},[39,32213,31878],{"class":56},[39,32215,32216],{"class":45},".flatten(x)\n",[39,32218,32219,32221,32223,32225,32227,32229],{"class":41,"line":3679},[39,32220,32156],{"class":45},[39,32222,50],{"class":49},[39,32224,31878],{"class":56},[39,32226,32163],{"class":45},[39,32228,31878],{"class":56},[39,32230,32231],{"class":45},".f5(x))\n",[39,32233,32234,32236,32238,32240,32242,32244],{"class":41,"line":9004},[39,32235,32156],{"class":45},[39,32237,50],{"class":49},[39,32239,31878],{"class":56},[39,32241,32163],{"class":45},[39,32243,31878],{"class":56},[39,32245,32246],{"class":45},".f6(x))\n",[39,32248,32249,32251,32253,32255],{"class":41,"line":9028},[39,32250,32156],{"class":45},[39,32252,50],{"class":49},[39,32254,31878],{"class":56},[39,32256,32257],{"class":45},".f7(x)\n",[39,32259,32260,32262],{"class":41,"line":9033},[39,32261,15808],{"class":49},[39,32263,32264],{"class":45}," x\n",[39,32266,32267],{"class":41,"line":9039},[39,32268,3458],{"emptyLinePlaceholder":1145},[39,32270,32271,32273,32276,32278,32281],{"class":41,"line":9066},[39,32272,2596],{"class":49},[39,32274,32275],{"class":56}," __name__",[39,32277,4007],{"class":49},[39,32279,32280],{"class":1319},"\"__main__\"",[39,32282,4797],{"class":45},[39,32284,32285],{"class":41,"line":9071},[39,32286,32287],{"class":102},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[39,32289,32290,32293,32295,32297,32300,32302,32305,32307,32309],{"class":41,"line":9077},[39,32291,32292],{"class":45},"    device",[39,32294,50],{"class":49},[39,32296,31506],{"class":45},[39,32298,32299],{"class":1319},"\"cuda\"",[39,32301,2762],{"class":49},[39,32303,32304],{"class":45}," torch.cuda.is_available() ",[39,32306,2759],{"class":49},[39,32308,31531],{"class":1319},[39,32310,209],{"class":45},[39,32312,32313],{"class":41,"line":9089},[39,32314,32315],{"class":102},"    # 如果就是想指定用cpu用下方代码:\n",[39,32317,32318],{"class":41,"line":9101},[39,32319,32320],{"class":102},"    # device=\"cpu\"\n",[39,32322,32323],{"class":41,"line":9113},[39,32324,32325],{"class":102},"    # print(device)\n",[39,32327,32328],{"class":41,"line":10772},[39,32329,3458],{"emptyLinePlaceholder":1145},[39,32331,32332],{"class":41,"line":10797},[39,32333,32334],{"class":102},"    # 实例化模型\n",[39,32336,32337],{"class":41,"line":10820},[39,32338,32339],{"class":102},"    # 将模型放到设备中去运行\n",[39,32341,32342,32345,32347],{"class":41,"line":10844},[39,32343,32344],{"class":45},"    model",[39,32346,50],{"class":49},[39,32348,32349],{"class":45},"LeNet().to(device)\n",[39,32351,32352,32355,32358,32360,32362,32364,32366,32368],{"class":41,"line":10849},[39,32353,32354],{"class":56},"    print",[39,32356,32357],{"class":45},"(summary(model,(",[39,32359,57],{"class":56},[39,32361,60],{"class":45},[39,32363,2099],{"class":56},[39,32365,60],{"class":45},[39,32367,2099],{"class":56},[39,32369,32370],{"class":45},")))\n",[19,32372,32373],{},[269,32374],{"alt":34,"src":32375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[19,32377,32378],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[1171,32380,32381],{"start":74},[1174,32382,32383],{},"训练",[19,32385,32386],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,32388,32389],{},"在训练之前可以将数据展示看一下",[29,32391,32393],{"className":31,"code":32392,"language":33,"meta":34,"style":34},"# 建立画图的函数，用于展示数据\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",[36,32394,32395,32400,32405,32417,32429,32442,32447,32459,32464,32476,32481,32493,32497,32501,32522,32534,32539,32560,32571,32575,32580,32598,32609,32614,32625,32630,32641,32645,32650,32665,32678,32683,32688,32701,32714,32727,32732,32736,32741,32761,32778,32798,32811,32824,32834,32849],{"__ignoreMap":34},[39,32396,32397],{"class":41,"line":42},[39,32398,32399],{"class":102},"# 建立画图的函数，用于展示数据\n",[39,32401,32402],{"class":41,"line":74},[39,32403,32404],{"class":102},"# torchvision中包含很多内置的数据集\n",[39,32406,32407,32409,32412,32414],{"class":41,"line":99},[39,32408,31792],{"class":49},[39,32410,32411],{"class":45}," sklearn.externals.array_api_compat.torch ",[39,32413,31447],{"class":49},[39,32415,32416],{"class":45}," squeeze\n",[39,32418,32419,32421,32424,32426],{"class":41,"line":106},[39,32420,31792],{"class":49},[39,32422,32423],{"class":45}," torchvision.datasets ",[39,32425,31447],{"class":49},[39,32427,32428],{"class":45}," FashionMNIST\n",[39,32430,32431,32433,32436,32439],{"class":41,"line":112},[39,32432,31447],{"class":49},[39,32434,32435],{"class":45}," numpy ",[39,32437,32438],{"class":49},"as",[39,32440,32441],{"class":45}," np\n",[39,32443,32444],{"class":41,"line":118},[39,32445,32446],{"class":102},"# 引入处理数据集的包\n",[39,32448,32449,32451,32454,32456],{"class":41,"line":413},[39,32450,31792],{"class":49},[39,32452,32453],{"class":45}," torchvision ",[39,32455,31447],{"class":49},[39,32457,32458],{"class":45}," transforms\n",[39,32460,32461],{"class":41,"line":419},[39,32462,32463],{"class":102},"# 从torch库中引入数据处理的包\n",[39,32465,32466,32468,32471,32473],{"class":41,"line":425},[39,32467,31447],{"class":49},[39,32469,32470],{"class":45}," torch.utils.data ",[39,32472,32438],{"class":49},[39,32474,32475],{"class":45}," Data\n",[39,32477,32478],{"class":41,"line":443},[39,32479,32480],{"class":102},"# 导入画图的库\n",[39,32482,32483,32485,32488,32490],{"class":41,"line":449},[39,32484,31447],{"class":49},[39,32486,32487],{"class":45}," matplotlib.pyplot ",[39,32489,32438],{"class":49},[39,32491,32492],{"class":45}," plt\n",[39,32494,32495],{"class":41,"line":455},[39,32496,3458],{"emptyLinePlaceholder":1145},[39,32498,32499],{"class":41,"line":461},[39,32500,3458],{"emptyLinePlaceholder":1145},[39,32502,32503,32506,32508,32511,32514,32516,32519],{"class":41,"line":475},[39,32504,32505],{"class":45},"train_data",[39,32507,50],{"class":49},[39,32509,32510],{"class":45},"FashionMNIST(",[39,32512,32513],{"class":254},"root",[39,32515,50],{"class":49},[39,32517,32518],{"class":1319},"'.\u002Fdata'",[39,32520,32521],{"class":45},",\n",[39,32523,32524,32527,32529,32532],{"class":41,"line":665},[39,32525,32526],{"class":254},"                        train",[39,32528,50],{"class":49},[39,32530,32531],{"class":56},"True",[39,32533,32521],{"class":45},[39,32535,32536],{"class":41,"line":671},[39,32537,32538],{"class":102},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[39,32540,32541,32544,32546,32549,32552,32554,32557],{"class":41,"line":684},[39,32542,32543],{"class":254},"                        transform",[39,32545,50],{"class":49},[39,32547,32548],{"class":45},"transforms.Compose([transforms.Resize(",[39,32550,32551],{"class":254},"size",[39,32553,50],{"class":49},[39,32555,32556],{"class":56},"224",[39,32558,32559],{"class":45},"),transforms.ToTensor()]),\n",[39,32561,32562,32565,32567,32569],{"class":41,"line":2732},[39,32563,32564],{"class":254},"                        download",[39,32566,50],{"class":49},[39,32568,32531],{"class":56},[39,32570,209],{"class":45},[39,32572,32573],{"class":41,"line":2737},[39,32574,3458],{"emptyLinePlaceholder":1145},[39,32576,32577],{"class":41,"line":2751},[39,32578,32579],{"class":102},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[39,32581,32582,32585,32587,32590,32593,32595],{"class":41,"line":2756},[39,32583,32584],{"class":45},"train_loader",[39,32586,50],{"class":49},[39,32588,32589],{"class":45},"Data.DataLoader(",[39,32591,32592],{"class":254},"dataset",[39,32594,50],{"class":49},[39,32596,32597],{"class":45},"train_data,\n",[39,32599,32600,32603,32605,32607],{"class":41,"line":2785},[39,32601,32602],{"class":254},"                             batch_size",[39,32604,50],{"class":49},[39,32606,1416],{"class":56},[39,32608,32521],{"class":45},[39,32610,32611],{"class":41,"line":2790},[39,32612,32613],{"class":102},"                             # 数据是否打乱\n",[39,32615,32616,32619,32621,32623],{"class":41,"line":2807},[39,32617,32618],{"class":254},"                             shuffle",[39,32620,50],{"class":49},[39,32622,32531],{"class":56},[39,32624,32521],{"class":45},[39,32626,32627],{"class":41,"line":2812},[39,32628,32629],{"class":102},"                             # 规定加载数据的进程\n",[39,32631,32632,32635,32637,32639],{"class":41,"line":2817},[39,32633,32634],{"class":254},"                             num_workers",[39,32636,50],{"class":49},[39,32638,260],{"class":56},[39,32640,209],{"class":45},[39,32642,32643],{"class":41,"line":2822},[39,32644,3458],{"emptyLinePlaceholder":1145},[39,32646,32647],{"class":41,"line":2836},[39,32648,32649],{"class":102},"# 获得一个batch的数据\n",[39,32651,32652,32654,32657,32659,32662],{"class":41,"line":2841},[39,32653,4083],{"class":49},[39,32655,32656],{"class":45}," step,(b_x,b_y) ",[39,32658,27100],{"class":49},[39,32660,32661],{"class":56}," enumerate",[39,32663,32664],{"class":45},"(train_loader):\n",[39,32666,32667,32669,32672,32674,32676],{"class":41,"line":3635},[39,32668,4159],{"class":49},[39,32670,32671],{"class":45}," step ",[39,32673,2158],{"class":49},[39,32675,5151],{"class":56},[39,32677,4797],{"class":45},[39,32679,32680],{"class":41,"line":3649},[39,32681,32682],{"class":49},"        break\n",[39,32684,32685],{"class":41,"line":3657},[39,32686,32687],{"class":102},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[39,32689,32690,32693,32695,32698],{"class":41,"line":3662},[39,32691,32692],{"class":45},"batch_x",[39,32694,50],{"class":49},[39,32696,32697],{"class":45},"b_x.squeeze().numpy()  ",[39,32699,32700],{"class":102},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[39,32702,32703,32706,32708,32711],{"class":41,"line":3668},[39,32704,32705],{"class":45},"batch_y",[39,32707,50],{"class":49},[39,32709,32710],{"class":45},"b_y.numpy()   ",[39,32712,32713],{"class":102},"#将张量转换成功numpy数组\n",[39,32715,32716,32719,32721,32724],{"class":41,"line":3674},[39,32717,32718],{"class":45},"class_label",[39,32720,50],{"class":49},[39,32722,32723],{"class":45},"train_data.classes  ",[39,32725,32726],{"class":102},"#训练集标签\n",[39,32728,32729],{"class":41,"line":3679},[39,32730,32731],{"class":102},"# print(class_label)\n",[39,32733,32734],{"class":41,"line":9004},[39,32735,3458],{"emptyLinePlaceholder":1145},[39,32737,32738],{"class":41,"line":9028},[39,32739,32740],{"class":102},"# 可视化一个batch的图像\n",[39,32742,32743,32746,32749,32751,32753,32755,32757,32759],{"class":41,"line":9033},[39,32744,32745],{"class":45},"plt.figure(",[39,32747,32748],{"class":254},"figsize",[39,32750,50],{"class":49},[39,32752,1221],{"class":45},[39,32754,1699],{"class":56},[39,32756,60],{"class":45},[39,32758,89],{"class":56},[39,32760,31552],{"class":45},[39,32762,32763,32765,32768,32770,32773,32775],{"class":41,"line":9039},[39,32764,4083],{"class":49},[39,32766,32767],{"class":45}," ii ",[39,32769,27100],{"class":49},[39,32771,32772],{"class":45}," np.arange(",[39,32774,8414],{"class":56},[39,32776,32777],{"class":45},"(batch_y)):\n",[39,32779,32780,32783,32785,32787,32789,32792,32794,32796],{"class":41,"line":9066},[39,32781,32782],{"class":45},"    plt.subplot(",[39,32784,84],{"class":56},[39,32786,60],{"class":45},[39,32788,1801],{"class":56},[39,32790,32791],{"class":45},",ii ",[39,32793,1682],{"class":49},[39,32795,26175],{"class":56},[39,32797,209],{"class":45},[39,32799,32800,32803,32806,32808],{"class":41,"line":9071},[39,32801,32802],{"class":45},"    plt.imshow(batch_x[ii,:,:],",[39,32804,32805],{"class":254},"cmap",[39,32807,50],{"class":49},[39,32809,32810],{"class":45},"plt.cm.gray)\n",[39,32812,32813,32816,32818,32820,32822],{"class":41,"line":9077},[39,32814,32815],{"class":45},"    plt.title(class_label[batch_y[ii]],",[39,32817,32551],{"class":254},[39,32819,50],{"class":49},[39,32821,146],{"class":56},[39,32823,209],{"class":45},[39,32825,32826,32829,32832],{"class":41,"line":9089},[39,32827,32828],{"class":45},"    plt.axis(",[39,32830,32831],{"class":1319},"\"off\"",[39,32833,209],{"class":45},[39,32835,32836,32839,32842,32844,32847],{"class":41,"line":9101},[39,32837,32838],{"class":45},"    plt.subplots_adjust(",[39,32840,32841],{"class":254},"wspace",[39,32843,50],{"class":49},[39,32845,32846],{"class":56},"0.05",[39,32848,209],{"class":45},[39,32850,32851],{"class":41,"line":9113},[39,32852,32853],{"class":45},"plt.show()\n",[19,32855,32856],{},"用matplotlib进行展示的过程可以后续再补",[19,32858,32859],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,32861,32862],{},"训练次数就是按照批次过整个训练集数据的次数",[19,32864,32865],{},"模型训练：",[29,32867,32869],{"className":31,"code":32868,"language":33,"meta":34,"style":34},"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",[36,32870,32871,32878,32885,32889,32901,32907,32918,32928,32938,32948,32958,32963,32975,32985,32989,32993,32998,33009,33022,33033,33050,33061,33100,33116,33128,33139,33144,33155,33171,33182,33193,33204,33211,33215,33220,33225,33229,33234,33244,33265,33269,33273,33278,33283,33288,33308,33312,33317,33327,33331,33336,33345,33350,33355,33360,33370,33374,33378,33383,33388,33398,33403,33413,33418,33427,33432,33441,33446,33455,33459,33464,33474,33478,33482,33487,33502,33530,33545,33549,33554,33559,33568,33573,33582,33587,33596,33601,33610,33615,33624,33629,33638,33643,33656,33661,33671,33676,33686,33692,33698,33704,33710,33721,33727,33747,33753,33764,33770,33776,33782,33788,33794,33800,33806,33826,33832,33848,33854,33868,33874,33889,33895,33904,33910,33919,33925,33931,33940,33946,33957,33963,33982,33988,33999,34005,34025,34041,34047,34061,34067,34073,34084,34090,34096,34106,34112,34123,34129,34139,34144,34150,34199,34246,34251,34257,34276,34282,34302,34308,34314,34324,34329,34335,34351,34396,34402,34408,34414,34425,34431,34437,34443,34461,34475,34484,34493,34502,34511,34517,34523,34531,34536,34542,34553,34559,34579,34585,34591,34597,34614,34620,34626,34632,34638,34644,34671,34695,34701,34707,34713,34724,34735,34741,34758,34781,34804,34810,34815,34824,34834,34840,34845,34851,34864,34870,34881,34892,34911],{"__ignoreMap":34},[39,32872,32873,32875],{"class":41,"line":42},[39,32874,31447],{"class":49},[39,32876,32877],{"class":45}," copy\n",[39,32879,32880,32882],{"class":41,"line":74},[39,32881,31447],{"class":49},[39,32883,32884],{"class":45}," time\n",[39,32886,32887],{"class":41,"line":99},[39,32888,3458],{"emptyLinePlaceholder":1145},[39,32890,32891,32893,32896,32898],{"class":41,"line":106},[39,32892,31447],{"class":49},[39,32894,32895],{"class":45}," pandas ",[39,32897,32438],{"class":49},[39,32899,32900],{"class":45}," pd\n",[39,32902,32903,32905],{"class":41,"line":112},[39,32904,31447],{"class":49},[39,32906,31450],{"class":45},[39,32908,32909,32911,32913,32915],{"class":41,"line":118},[39,32910,31792],{"class":49},[39,32912,32470],{"class":45},[39,32914,31447],{"class":49},[39,32916,32917],{"class":45}," Dataset\n",[39,32919,32920,32922,32924,32926],{"class":41,"line":413},[39,32921,31792],{"class":49},[39,32923,32423],{"class":45},[39,32925,31447],{"class":49},[39,32927,32428],{"class":45},[39,32929,32930,32932,32934,32936],{"class":41,"line":419},[39,32931,31792],{"class":49},[39,32933,32453],{"class":45},[39,32935,31447],{"class":49},[39,32937,32458],{"class":45},[39,32939,32940,32942,32944,32946],{"class":41,"line":425},[39,32941,31447],{"class":49},[39,32943,32470],{"class":45},[39,32945,32438],{"class":49},[39,32947,32475],{"class":45},[39,32949,32950,32952,32954,32956],{"class":41,"line":443},[39,32951,31447],{"class":49},[39,32953,32487],{"class":45},[39,32955,32438],{"class":49},[39,32957,32492],{"class":45},[39,32959,32960],{"class":41,"line":449},[39,32961,32962],{"class":102},"# 导入模型\n",[39,32964,32965,32967,32970,32972],{"class":41,"line":455},[39,32966,31792],{"class":49},[39,32968,32969],{"class":45}," model ",[39,32971,31447],{"class":49},[39,32973,32974],{"class":45}," LeNet\n",[39,32976,32977,32979,32981,32983],{"class":41,"line":461},[39,32978,31792],{"class":49},[39,32980,31795],{"class":45},[39,32982,31447],{"class":49},[39,32984,31800],{"class":45},[39,32986,32987],{"class":41,"line":475},[39,32988,3458],{"emptyLinePlaceholder":1145},[39,32990,32991],{"class":41,"line":665},[39,32992,3458],{"emptyLinePlaceholder":1145},[39,32994,32995],{"class":41,"line":671},[39,32996,32997],{"class":102},"# 处理训练集与验证集函数--->划分数据集\n",[39,32999,33000,33003,33006],{"class":41,"line":684},[39,33001,33002],{"class":49},"def",[39,33004,33005],{"class":3021}," train_val_data_process",[39,33007,33008],{"class":45},"():\n",[39,33010,33011,33014,33016,33018,33020],{"class":41,"line":2732},[39,33012,33013],{"class":45},"    train_data",[39,33015,50],{"class":49},[39,33017,32510],{"class":45},[39,33019,32518],{"class":1319},[39,33021,32521],{"class":45},[39,33023,33024,33027,33029,33031],{"class":41,"line":2737},[39,33025,33026],{"class":254},"                            train",[39,33028,50],{"class":49},[39,33030,32531],{"class":56},[39,33032,32521],{"class":45},[39,33034,33035,33038,33040,33042,33044,33046,33048],{"class":41,"line":2751},[39,33036,33037],{"class":254},"                            transform",[39,33039,50],{"class":49},[39,33041,32548],{"class":45},[39,33043,32551],{"class":254},[39,33045,50],{"class":49},[39,33047,2099],{"class":56},[39,33049,32559],{"class":45},[39,33051,33052,33055,33057,33059],{"class":41,"line":2756},[39,33053,33054],{"class":254},"                            download",[39,33056,50],{"class":49},[39,33058,32531],{"class":56},[39,33060,209],{"class":45},[39,33062,33063,33066,33068,33071,33074,33076,33079,33081,33083,33086,33088,33090,33093,33095,33097],{"class":41,"line":2785},[39,33064,33065],{"class":45},"    train_data,val_data",[39,33067,50],{"class":49},[39,33069,33070],{"class":45},"Data.random_split(train_data,[",[39,33072,33073],{"class":56},"round",[39,33075,1221],{"class":45},[39,33077,33078],{"class":56},"0.8",[39,33080,1657],{"class":49},[39,33082,8414],{"class":56},[39,33084,33085],{"class":45},"(train_data)),",[39,33087,33073],{"class":56},[39,33089,1221],{"class":45},[39,33091,33092],{"class":56},"0.2",[39,33094,1657],{"class":49},[39,33096,8414],{"class":56},[39,33098,33099],{"class":45},"(train_data))])\n",[39,33101,33102,33105,33107,33110,33112,33114],{"class":41,"line":2790},[39,33103,33104],{"class":45},"    train_dataloader ",[39,33106,50],{"class":49},[39,33108,33109],{"class":45}," Data.DataLoader(",[39,33111,32592],{"class":254},[39,33113,50],{"class":49},[39,33115,32597],{"class":45},[39,33117,33118,33121,33123,33126],{"class":41,"line":2807},[39,33119,33120],{"class":254},"                                       batch_size",[39,33122,50],{"class":49},[39,33124,33125],{"class":56},"128",[39,33127,32521],{"class":45},[39,33129,33130,33133,33135,33137],{"class":41,"line":2812},[39,33131,33132],{"class":254},"                                       shuffle",[39,33134,50],{"class":49},[39,33136,32531],{"class":56},[39,33138,32521],{"class":45},[39,33140,33141],{"class":41,"line":2817},[39,33142,33143],{"class":102},"                                       # 规定8个进程\n",[39,33145,33146,33149,33151,33153],{"class":41,"line":2822},[39,33147,33148],{"class":254},"                                       num_workers",[39,33150,50],{"class":49},[39,33152,1598],{"class":56},[39,33154,209],{"class":45},[39,33156,33157,33160,33162,33164,33166,33168],{"class":41,"line":2836},[39,33158,33159],{"class":45},"    val_dataloader",[39,33161,50],{"class":49},[39,33163,32589],{"class":45},[39,33165,32592],{"class":254},[39,33167,50],{"class":49},[39,33169,33170],{"class":45},"val_data,\n",[39,33172,33173,33176,33178,33180],{"class":41,"line":2841},[39,33174,33175],{"class":254},"                                   batch_size",[39,33177,50],{"class":49},[39,33179,33125],{"class":56},[39,33181,32521],{"class":45},[39,33183,33184,33187,33189,33191],{"class":41,"line":3635},[39,33185,33186],{"class":254},"                                   shuffle",[39,33188,50],{"class":49},[39,33190,32531],{"class":56},[39,33192,32521],{"class":45},[39,33194,33195,33198,33200,33202],{"class":41,"line":3649},[39,33196,33197],{"class":254},"                                   num_workers",[39,33199,50],{"class":49},[39,33201,1598],{"class":56},[39,33203,209],{"class":45},[39,33205,33206,33208],{"class":41,"line":3657},[39,33207,5148],{"class":49},[39,33209,33210],{"class":45}," train_dataloader,val_dataloader\n",[39,33212,33213],{"class":41,"line":3662},[39,33214,3458],{"emptyLinePlaceholder":1145},[39,33216,33217],{"class":41,"line":3668},[39,33218,33219],{"class":102},"# 验证是否出错\n",[39,33221,33222],{"class":41,"line":3674},[39,33223,33224],{"class":102},"# train_val_data_process()\n",[39,33226,33227],{"class":41,"line":3679},[39,33228,3458],{"emptyLinePlaceholder":1145},[39,33230,33231],{"class":41,"line":9004},[39,33232,33233],{"class":102},"# 定义模型训练函数\n",[39,33235,33236,33238,33241],{"class":41,"line":9028},[39,33237,33002],{"class":49},[39,33239,33240],{"class":3021}," train_model_process",[39,33242,33243],{"class":45},"(model,train_dataloader,val_dataloader,num_epochs):\n",[39,33245,33246,33248,33250,33252,33254,33256,33258,33260,33263],{"class":41,"line":9033},[39,33247,32292],{"class":45},[39,33249,50],{"class":49},[39,33251,31506],{"class":45},[39,33253,32299],{"class":1319},[39,33255,2762],{"class":49},[39,33257,32304],{"class":45},[39,33259,2759],{"class":49},[39,33261,33262],{"class":1319}," 'cpu'",[39,33264,209],{"class":45},[39,33266,33267],{"class":41,"line":9039},[39,33268,3458],{"emptyLinePlaceholder":1145},[39,33270,33271],{"class":41,"line":9066},[39,33272,3458],{"emptyLinePlaceholder":1145},[39,33274,33275],{"class":41,"line":9071},[39,33276,33277],{"class":102},"    # 定义优化器\n",[39,33279,33280],{"class":41,"line":9077},[39,33281,33282],{"class":102},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[39,33284,33285],{"class":41,"line":9089},[39,33286,33287],{"class":102},"    # lr为学习率\n",[39,33289,33290,33293,33295,33298,33301,33303,33306],{"class":41,"line":9101},[39,33291,33292],{"class":45},"    optimizer",[39,33294,50],{"class":49},[39,33296,33297],{"class":45},"torch.optim.Adam(model.parameters(),",[39,33299,33300],{"class":254},"lr",[39,33302,50],{"class":49},[39,33304,33305],{"class":56},"0.001",[39,33307,209],{"class":45},[39,33309,33310],{"class":41,"line":9113},[39,33311,3458],{"emptyLinePlaceholder":1145},[39,33313,33314],{"class":41,"line":10772},[39,33315,33316],{"class":102},"    # 定义损失函数使用交叉熵损失函数\n",[39,33318,33319,33322,33324],{"class":41,"line":10797},[39,33320,33321],{"class":45},"    criterion",[39,33323,50],{"class":49},[39,33325,33326],{"class":45},"nn.CrossEntropyLoss()\n",[39,33328,33329],{"class":41,"line":10820},[39,33330,3458],{"emptyLinePlaceholder":1145},[39,33332,33333],{"class":41,"line":10844},[39,33334,33335],{"class":102},"    # 将模型放到GPU中进行训练\n",[39,33337,33338,33340,33342],{"class":41,"line":10849},[39,33339,32344],{"class":45},[39,33341,50],{"class":49},[39,33343,33344],{"class":45},"model.to(device)\n",[39,33346,33347],{"class":41,"line":10854},[39,33348,33349],{"class":102},"    # 复制当前模型的参数\n",[39,33351,33352],{"class":41,"line":10859},[39,33353,33354],{"class":102},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[39,33356,33357],{"class":41,"line":10868},[39,33358,33359],{"class":102},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[39,33361,33362,33365,33367],{"class":41,"line":10873},[39,33363,33364],{"class":45},"    best_model_wts",[39,33366,50],{"class":49},[39,33368,33369],{"class":45},"copy.deepcopy(model.state_dict())\n",[39,33371,33372],{"class":41,"line":10879},[39,33373,3458],{"emptyLinePlaceholder":1145},[39,33375,33376],{"class":41,"line":10900},[39,33377,3458],{"emptyLinePlaceholder":1145},[39,33379,33380],{"class":41,"line":10906},[39,33381,33382],{"class":102},"    # 初始化参数\n",[39,33384,33385],{"class":41,"line":10920},[39,33386,33387],{"class":102},"    # 最高准确度\n",[39,33389,33390,33393,33395],{"class":41,"line":10926},[39,33391,33392],{"class":45},"    best_acc",[39,33394,50],{"class":49},[39,33396,33397],{"class":56},"0.0\n",[39,33399,33400],{"class":41,"line":10953},[39,33401,33402],{"class":102},"    # 训练集损失列表\n",[39,33404,33405,33408,33410],{"class":41,"line":10962},[39,33406,33407],{"class":45},"    train_loss_all",[39,33409,50],{"class":49},[39,33411,33412],{"class":45},"[]\n",[39,33414,33415],{"class":41,"line":10968},[39,33416,33417],{"class":102},"    # 验证集函数列表\n",[39,33419,33420,33423,33425],{"class":41,"line":10976},[39,33421,33422],{"class":45},"    val_loss_all",[39,33424,50],{"class":49},[39,33426,33412],{"class":45},[39,33428,33429],{"class":41,"line":10981},[39,33430,33431],{"class":102},"    # 训练集准确度列表\n",[39,33433,33434,33437,33439],{"class":41,"line":17660},[39,33435,33436],{"class":45},"    train_acc_all",[39,33438,50],{"class":49},[39,33440,33412],{"class":45},[39,33442,33443],{"class":41,"line":17666},[39,33444,33445],{"class":102},"    # 验证集准确度列表\n",[39,33447,33448,33451,33453],{"class":41,"line":17689},[39,33449,33450],{"class":45},"    val_acc_all",[39,33452,50],{"class":49},[39,33454,33412],{"class":45},[39,33456,33457],{"class":41,"line":17695},[39,33458,3458],{"emptyLinePlaceholder":1145},[39,33460,33461],{"class":41,"line":17718},[39,33462,33463],{"class":102},"    # 保存当前时间--->方便看每轮训练的时间\n",[39,33465,33466,33469,33471],{"class":41,"line":17732},[39,33467,33468],{"class":45},"    since",[39,33470,50],{"class":49},[39,33472,33473],{"class":45},"time.time()\n",[39,33475,33476],{"class":41,"line":17752},[39,33477,3458],{"emptyLinePlaceholder":1145},[39,33479,33480],{"class":41,"line":17758},[39,33481,3458],{"emptyLinePlaceholder":1145},[39,33483,33484],{"class":41,"line":17769},[39,33485,33486],{"class":102},"    # 准备工作完成--->开始训练模型\n",[39,33488,33489,33491,33494,33496,33499],{"class":41,"line":17792},[39,33490,4259],{"class":49},[39,33492,33493],{"class":45}," epoch ",[39,33495,27100],{"class":49},[39,33497,33498],{"class":56}," range",[39,33500,33501],{"class":45},"(num_epochs):\n",[39,33503,33504,33507,33509,33512,33515,33517,33519,33521,33524,33526,33528],{"class":41,"line":17814},[39,33505,33506],{"class":56},"        print",[39,33508,1221],{"class":45},[39,33510,33511],{"class":1319},"\"Epoch ",[39,33513,33514],{"class":56},"{}",[39,33516,1784],{"class":1319},[39,33518,33514],{"class":56},[39,33520,1462],{"class":1319},[39,33522,33523],{"class":45},".format(epoch,num_epochs",[39,33525,1732],{"class":49},[39,33527,57],{"class":56},[39,33529,31552],{"class":45},[39,33531,33532,33534,33536,33539,33541,33543],{"class":41,"line":17819},[39,33533,33506],{"class":56},[39,33535,1221],{"class":45},[39,33537,33538],{"class":1319},"\"-\"",[39,33540,1657],{"class":49},[39,33542,146],{"class":56},[39,33544,209],{"class":45},[39,33546,33547],{"class":41,"line":17825},[39,33548,3458],{"emptyLinePlaceholder":1145},[39,33550,33551],{"class":41,"line":17839},[39,33552,33553],{"class":102},"        # 初始化参数\n",[39,33555,33556],{"class":41,"line":17852},[39,33557,33558],{"class":102},"        # 训练集损失函数\n",[39,33560,33561,33564,33566],{"class":41,"line":17857},[39,33562,33563],{"class":45},"        train_loss",[39,33565,50],{"class":49},[39,33567,33397],{"class":56},[39,33569,33570],{"class":41,"line":17871},[39,33571,33572],{"class":102},"        # 训练集准确度\n",[39,33574,33575,33578,33580],{"class":41,"line":17876},[39,33576,33577],{"class":45},"        train_corrects",[39,33579,50],{"class":49},[39,33581,4143],{"class":56},[39,33583,33584],{"class":41,"line":17882},[39,33585,33586],{"class":102},"        # 验证集损失函数\n",[39,33588,33589,33592,33594],{"class":41,"line":17887},[39,33590,33591],{"class":45},"        val_loss",[39,33593,50],{"class":49},[39,33595,33397],{"class":56},[39,33597,33598],{"class":41,"line":17901},[39,33599,33600],{"class":102},"        # 验证集准确度\n",[39,33602,33603,33606,33608],{"class":41,"line":17906},[39,33604,33605],{"class":45},"        val_corrects",[39,33607,50],{"class":49},[39,33609,4143],{"class":56},[39,33611,33612],{"class":41,"line":17911},[39,33613,33614],{"class":102},"        # 训练集样本数量\n",[39,33616,33617,33620,33622],{"class":41,"line":17925},[39,33618,33619],{"class":45},"        train_num",[39,33621,50],{"class":49},[39,33623,4143],{"class":56},[39,33625,33626],{"class":41,"line":17937},[39,33627,33628],{"class":102},"        # 验证集样本数量\n",[39,33630,33631,33634,33636],{"class":41,"line":17942},[39,33632,33633],{"class":45},"        val_num",[39,33635,50],{"class":49},[39,33637,4143],{"class":56},[39,33639,33640],{"class":41,"line":17955},[39,33641,33642],{"class":102},"        # 将数据放到设备,并开始训练\n",[39,33644,33645,33647,33649,33651,33653],{"class":41,"line":17960},[39,33646,4461],{"class":49},[39,33648,32656],{"class":45},[39,33650,27100],{"class":49},[39,33652,32661],{"class":56},[39,33654,33655],{"class":45},"(train_dataloader):\n",[39,33657,33658],{"class":41,"line":17965},[39,33659,33660],{"class":102},"            # 将特征放入到训练设备\n",[39,33662,33663,33666,33668],{"class":41,"line":17970},[39,33664,33665],{"class":45},"            b_x",[39,33667,50],{"class":49},[39,33669,33670],{"class":45},"b_x.to(device)\n",[39,33672,33673],{"class":41,"line":17983},[39,33674,33675],{"class":102},"            # 将标签放入到训练设备当中\n",[39,33677,33678,33681,33683],{"class":41,"line":17988},[39,33679,33680],{"class":45},"            b_y",[39,33682,50],{"class":49},[39,33684,33685],{"class":45},"b_y.to(device)\n",[39,33687,33689],{"class":41,"line":33688},98,[39,33690,33691],{"class":102},"            # 设置模型为训练模式\n",[39,33693,33695],{"class":41,"line":33694},99,[39,33696,33697],{"class":45},"            model.train()\n",[39,33699,33701],{"class":41,"line":33700},100,[39,33702,33703],{"class":102},"            # 将数据放到模型当中,开始前向传播\n",[39,33705,33707],{"class":41,"line":33706},101,[39,33708,33709],{"class":102},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[39,33711,33713,33716,33718],{"class":41,"line":33712},102,[39,33714,33715],{"class":45},"            output",[39,33717,50],{"class":49},[39,33719,33720],{"class":45},"model(b_x)\n",[39,33722,33724],{"class":41,"line":33723},103,[39,33725,33726],{"class":102},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[39,33728,33730,33733,33735,33738,33741,33743,33745],{"class":41,"line":33729},104,[39,33731,33732],{"class":45},"            pre_lab",[39,33734,50],{"class":49},[39,33736,33737],{"class":45},"torch.argmax(output,",[39,33739,33740],{"class":254},"dim",[39,33742,50],{"class":49},[39,33744,57],{"class":56},[39,33746,209],{"class":45},[39,33748,33750],{"class":41,"line":33749},105,[39,33751,33752],{"class":102},"            # 计算每一个batch的损失函数\n",[39,33754,33756,33759,33761],{"class":41,"line":33755},106,[39,33757,33758],{"class":45},"            loss",[39,33760,50],{"class":49},[39,33762,33763],{"class":45},"criterion(output,b_y)\n",[39,33765,33767],{"class":41,"line":33766},107,[39,33768,33769],{"class":102},"            # 将梯度初始化为0\n",[39,33771,33773],{"class":41,"line":33772},108,[39,33774,33775],{"class":45},"            optimizer.zero_grad()\n",[39,33777,33779],{"class":41,"line":33778},109,[39,33780,33781],{"class":102},"            # 梯度置为0后再进行反向传播\n",[39,33783,33785],{"class":41,"line":33784},110,[39,33786,33787],{"class":45},"            loss.backward()\n",[39,33789,33791],{"class":41,"line":33790},111,[39,33792,33793],{"class":102},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[39,33795,33797],{"class":41,"line":33796},112,[39,33798,33799],{"class":45},"            optimizer.step()\n",[39,33801,33803],{"class":41,"line":33802},113,[39,33804,33805],{"class":102},"            # loss.item()指的是batch的平均损失\n",[39,33807,33809,33812,33814,33817,33819,33822,33824],{"class":41,"line":33808},114,[39,33810,33811],{"class":45},"            train_loss",[39,33813,10533],{"class":49},[39,33815,33816],{"class":45},"loss.item()",[39,33818,1657],{"class":49},[39,33820,33821],{"class":45},"b_x.size(",[39,33823,260],{"class":56},[39,33825,209],{"class":45},[39,33827,33829],{"class":41,"line":33828},115,[39,33830,33831],{"class":102},"            # 计算每个批次中正确预测的数量\n",[39,33833,33835,33838,33840,33843,33845],{"class":41,"line":33834},116,[39,33836,33837],{"class":45},"            train_corrects",[39,33839,10533],{"class":49},[39,33841,33842],{"class":45},"torch.sum(pre_lab",[39,33844,4007],{"class":49},[39,33846,33847],{"class":45},"b_y.data)\n",[39,33849,33851],{"class":41,"line":33850},117,[39,33852,33853],{"class":102},"            # 计算目前为止一共处理了多少样本\n",[39,33855,33857,33860,33862,33864,33866],{"class":41,"line":33856},118,[39,33858,33859],{"class":45},"            train_num",[39,33861,10533],{"class":49},[39,33863,33821],{"class":45},[39,33865,260],{"class":56},[39,33867,209],{"class":45},[39,33869,33871],{"class":41,"line":33870},119,[39,33872,33873],{"class":102},"        # 验证数据\n",[39,33875,33877,33879,33882,33884,33886],{"class":41,"line":33876},120,[39,33878,4461],{"class":49},[39,33880,33881],{"class":45}," step ,(b_x,b_y) ",[39,33883,27100],{"class":49},[39,33885,32661],{"class":56},[39,33887,33888],{"class":45},"(val_dataloader):\n",[39,33890,33892],{"class":41,"line":33891},121,[39,33893,33894],{"class":102},"            # 将特征放到验证设备当中\n",[39,33896,33898,33900,33902],{"class":41,"line":33897},122,[39,33899,33665],{"class":45},[39,33901,50],{"class":49},[39,33903,33670],{"class":45},[39,33905,33907],{"class":41,"line":33906},123,[39,33908,33909],{"class":102},"            # 将标签放到放到训练设备当中\n",[39,33911,33913,33915,33917],{"class":41,"line":33912},124,[39,33914,33680],{"class":45},[39,33916,50],{"class":49},[39,33918,33685],{"class":45},[39,33920,33922],{"class":41,"line":33921},125,[39,33923,33924],{"class":102},"            # 开启验证模式，设置模型为评估模式\n",[39,33926,33928],{"class":41,"line":33927},126,[39,33929,33930],{"class":45},"            model.eval()\n",[39,33932,33934,33937],{"class":41,"line":33933},127,[39,33935,33936],{"class":49},"            with",[39,33938,33939],{"class":45}," torch.no_grad():\n",[39,33941,33943],{"class":41,"line":33942},128,[39,33944,33945],{"class":102},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[39,33947,33949,33952,33954],{"class":41,"line":33948},129,[39,33950,33951],{"class":45},"                output ",[39,33953,50],{"class":49},[39,33955,33956],{"class":45}," model(b_x)\n",[39,33958,33960],{"class":41,"line":33959},130,[39,33961,33962],{"class":102},"                # 查找每一行中最大值对应的下标\n",[39,33964,33966,33969,33971,33974,33976,33978,33980],{"class":41,"line":33965},131,[39,33967,33968],{"class":45},"                pre_lab ",[39,33970,50],{"class":49},[39,33972,33973],{"class":45}," torch.argmax(output, ",[39,33975,33740],{"class":254},[39,33977,50],{"class":49},[39,33979,57],{"class":56},[39,33981,209],{"class":45},[39,33983,33985],{"class":41,"line":33984},132,[39,33986,33987],{"class":102},"                # 计算验证集上的当前 batch 损失\n",[39,33989,33991,33994,33996],{"class":41,"line":33990},133,[39,33992,33993],{"class":45},"                val_batch_loss ",[39,33995,50],{"class":49},[39,33997,33998],{"class":45}," criterion(output, b_y)\n",[39,34000,34002],{"class":41,"line":34001},134,[39,34003,34004],{"class":102},"                # 对损失函数进行累加（按样本数加权）\n",[39,34006,34008,34011,34013,34016,34018,34021,34023],{"class":41,"line":34007},135,[39,34009,34010],{"class":45},"                val_loss ",[39,34012,10533],{"class":49},[39,34014,34015],{"class":45}," val_batch_loss.item() ",[39,34017,1657],{"class":49},[39,34019,34020],{"class":45}," b_x.size(",[39,34022,260],{"class":56},[39,34024,209],{"class":45},[39,34026,34028,34031,34033,34036,34038],{"class":41,"line":34027},136,[39,34029,34030],{"class":45},"                val_corrects ",[39,34032,10533],{"class":49},[39,34034,34035],{"class":45}," torch.sum(pre_lab ",[39,34037,4007],{"class":49},[39,34039,34040],{"class":45}," b_y.data)\n",[39,34042,34044],{"class":41,"line":34043},137,[39,34045,34046],{"class":102},"                # 当前用于验证的样本数量\n",[39,34048,34050,34053,34055,34057,34059],{"class":41,"line":34049},138,[39,34051,34052],{"class":45},"            val_num ",[39,34054,10533],{"class":49},[39,34056,34020],{"class":45},[39,34058,260],{"class":56},[39,34060,209],{"class":45},[39,34062,34064],{"class":41,"line":34063},139,[39,34065,34066],{"class":102},"        # 计算并保存每一次迭代的loss值和准确率\n",[39,34068,34070],{"class":41,"line":34069},140,[39,34071,34072],{"class":102},"        # 计算并保存训练集的loss值\n",[39,34074,34076,34079,34081],{"class":41,"line":34075},141,[39,34077,34078],{"class":45},"        train_loss_all.append(train_loss",[39,34080,1784],{"class":49},[39,34082,34083],{"class":45},"train_num)\n",[39,34085,34087],{"class":41,"line":34086},142,[39,34088,34089],{"class":102},"        # 取双精度\n",[39,34091,34093],{"class":41,"line":34092},143,[39,34094,34095],{"class":102},"        # 计算并保存训练集的准确率\n",[39,34097,34099,34102,34104],{"class":41,"line":34098},144,[39,34100,34101],{"class":45},"        train_acc_all.append(train_corrects.double().item()",[39,34103,1784],{"class":49},[39,34105,34083],{"class":45},[39,34107,34109],{"class":41,"line":34108},145,[39,34110,34111],{"class":102},"        # 计算并保存验证集的loss值\n",[39,34113,34115,34118,34120],{"class":41,"line":34114},146,[39,34116,34117],{"class":45},"        val_loss_all.append(val_loss",[39,34119,1784],{"class":49},[39,34121,34122],{"class":45},"val_num)\n",[39,34124,34126],{"class":41,"line":34125},147,[39,34127,34128],{"class":102},"        # 计算并保存验证集的准确率\n",[39,34130,34132,34135,34137],{"class":41,"line":34131},148,[39,34133,34134],{"class":45},"        val_acc_all.append(val_corrects.double().item()",[39,34136,1784],{"class":49},[39,34138,34122],{"class":45},[39,34140,34142],{"class":41,"line":34141},149,[39,34143,3458],{"emptyLinePlaceholder":1145},[39,34145,34147],{"class":41,"line":34146},150,[39,34148,34149],{"class":102},"        # 打印训练一轮的loss值和准确率\n",[39,34151,34153,34155,34157,34159,34161,34164,34166,34169,34171,34174,34176,34178,34180,34182,34185,34187,34189,34192,34194,34196],{"class":41,"line":34152},151,[39,34154,33506],{"class":56},[39,34156,1221],{"class":45},[39,34158,4650],{"class":1319},[39,34160,33514],{"class":56},[39,34162,34163],{"class":1319},"train loss:",[39,34165,2094],{"class":56},[39,34167,34168],{"class":49},":.4f",[39,34170,2144],{"class":56},[39,34172,34173],{"class":1319}," train acc:",[39,34175,2094],{"class":56},[39,34177,34168],{"class":49},[39,34179,2144],{"class":56},[39,34181,4650],{"class":1319},[39,34183,34184],{"class":45},".format(epoch,train_loss_all[",[39,34186,1732],{"class":49},[39,34188,57],{"class":56},[39,34190,34191],{"class":45},"],train_acc_all[",[39,34193,1732],{"class":49},[39,34195,57],{"class":56},[39,34197,34198],{"class":45},"]))\n",[39,34200,34202,34204,34206,34208,34210,34213,34215,34217,34219,34222,34224,34226,34228,34230,34233,34235,34237,34240,34242,34244],{"class":41,"line":34201},152,[39,34203,33506],{"class":56},[39,34205,1221],{"class":45},[39,34207,4650],{"class":1319},[39,34209,33514],{"class":56},[39,34211,34212],{"class":1319},"val loss:",[39,34214,2094],{"class":56},[39,34216,34168],{"class":49},[39,34218,2144],{"class":56},[39,34220,34221],{"class":1319}," val acc:",[39,34223,2094],{"class":56},[39,34225,34168],{"class":49},[39,34227,2144],{"class":56},[39,34229,4650],{"class":1319},[39,34231,34232],{"class":45},".format(epoch,val_loss_all[",[39,34234,1732],{"class":49},[39,34236,57],{"class":56},[39,34238,34239],{"class":45},"],val_acc_all[",[39,34241,1732],{"class":49},[39,34243,57],{"class":56},[39,34245,34198],{"class":45},[39,34247,34249],{"class":41,"line":34248},153,[39,34250,3458],{"emptyLinePlaceholder":1145},[39,34252,34254],{"class":41,"line":34253},154,[39,34255,34256],{"class":102},"        # 判断准确度--->保存最优模型\n",[39,34258,34260,34262,34265,34267,34269,34271,34273],{"class":41,"line":34259},155,[39,34261,3555],{"class":49},[39,34263,34264],{"class":45}," val_acc_all[",[39,34266,1732],{"class":49},[39,34268,57],{"class":56},[39,34270,2138],{"class":45},[39,34272,2158],{"class":49},[39,34274,34275],{"class":45},"best_acc:\n",[39,34277,34279],{"class":41,"line":34278},156,[39,34280,34281],{"class":102},"            # 保存当前模型准确度\n",[39,34283,34285,34288,34290,34292,34295,34297,34299],{"class":41,"line":34284},157,[39,34286,34287],{"class":45},"            best_acc:",[39,34289,1259],{"class":56},[39,34291,50],{"class":49},[39,34293,34294],{"class":45},"val_acc_all[",[39,34296,1732],{"class":49},[39,34298,57],{"class":56},[39,34300,34301],{"class":45},"]\n",[39,34303,34305],{"class":41,"line":34304},158,[39,34306,34307],{"class":102},"            # 保存当前的准确度\n",[39,34309,34311],{"class":41,"line":34310},159,[39,34312,34313],{"class":102},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[39,34315,34317,34320,34322],{"class":41,"line":34316},160,[39,34318,34319],{"class":45},"            best_model_wts",[39,34321,50],{"class":49},[39,34323,33369],{"class":45},[39,34325,34327],{"class":41,"line":34326},161,[39,34328,3458],{"emptyLinePlaceholder":1145},[39,34330,34332],{"class":41,"line":34331},162,[39,34333,34334],{"class":102},"        # 计算耗时\n",[39,34336,34338,34341,34343,34346,34348],{"class":41,"line":34337},163,[39,34339,34340],{"class":45},"        time_use",[39,34342,50],{"class":49},[39,34344,34345],{"class":45},"time.time()",[39,34347,1732],{"class":49},[39,34349,34350],{"class":45},"since\n",[39,34352,34354,34356,34358,34361,34363,34366,34368,34370,34372,34374,34376,34379,34382,34385,34387,34390,34392,34394],{"class":41,"line":34353},164,[39,34355,33506],{"class":56},[39,34357,1221],{"class":45},[39,34359,34360],{"class":1319},"'训练和验证耗费的时间",[39,34362,2094],{"class":56},[39,34364,34365],{"class":49},":.0f",[39,34367,2144],{"class":56},[39,34369,1744],{"class":1319},[39,34371,2094],{"class":56},[39,34373,34365],{"class":49},[39,34375,2144],{"class":56},[39,34377,34378],{"class":1319},"s'",[39,34380,34381],{"class":45},".format(time_use",[39,34383,34384],{"class":49},"\u002F\u002F",[39,34386,2105],{"class":56},[39,34388,34389],{"class":45},",time_use",[39,34391,1534],{"class":49},[39,34393,2105],{"class":56},[39,34395,31552],{"class":45},[39,34397,34399],{"class":41,"line":34398},165,[39,34400,34401],{"class":102},"    # 选择最优参数\n",[39,34403,34405],{"class":41,"line":34404},166,[39,34406,34407],{"class":102},"    # 加载最高准确率下的模型参数\n",[39,34409,34411],{"class":41,"line":34410},167,[39,34412,34413],{"class":102},"    # model.load_state_dict(best_model_wts)\n",[39,34415,34417,34420,34423],{"class":41,"line":34416},168,[39,34418,34419],{"class":45},"    torch.save(model.state_dict(best_model_wts), ",[39,34421,34422],{"class":1319},"'.\u002Fbest_model.pth'",[39,34424,209],{"class":45},[39,34426,34428],{"class":41,"line":34427},169,[39,34429,34430],{"class":102},"    # 或者写成\n",[39,34432,34434],{"class":41,"line":34433},170,[39,34435,34436],{"class":102},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[39,34438,34440],{"class":41,"line":34439},171,[39,34441,34442],{"class":102},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[39,34444,34446,34449,34451,34454,34457,34459],{"class":41,"line":34445},172,[39,34447,34448],{"class":45},"    train_process",[39,34450,50],{"class":49},[39,34452,34453],{"class":45},"pd.DataFrame(",[39,34455,34456],{"class":254},"data",[39,34458,50],{"class":49},[39,34460,2611],{"class":45},[39,34462,34464,34467,34469,34472],{"class":41,"line":34463},173,[39,34465,34466],{"class":1319},"        \"epoch\"",[39,34468,2057],{"class":45},[39,34470,34471],{"class":56},"range",[39,34473,34474],{"class":45},"(num_epochs),\n",[39,34476,34478,34481],{"class":41,"line":34477},174,[39,34479,34480],{"class":1319},"        \"train_loss_all\"",[39,34482,34483],{"class":45},":train_loss_all,\n",[39,34485,34487,34490],{"class":41,"line":34486},175,[39,34488,34489],{"class":1319},"        \"val_loss_all\"",[39,34491,34492],{"class":45},":val_loss_all,\n",[39,34494,34496,34499],{"class":41,"line":34495},176,[39,34497,34498],{"class":1319},"        \"train_acc_all\"",[39,34500,34501],{"class":45},":train_acc_all,\n",[39,34503,34505,34508],{"class":41,"line":34504},177,[39,34506,34507],{"class":1319},"        \"val_acc_all\"",[39,34509,34510],{"class":45},":val_acc_all\n",[39,34512,34514],{"class":41,"line":34513},178,[39,34515,34516],{"class":45},"    })\n",[39,34518,34520],{"class":41,"line":34519},179,[39,34521,34522],{"class":102},"    # 返回训练保存的过程\n",[39,34524,34526,34528],{"class":41,"line":34525},180,[39,34527,5148],{"class":49},[39,34529,34530],{"class":45}," train_process\n",[39,34532,34534],{"class":41,"line":34533},181,[39,34535,3458],{"emptyLinePlaceholder":1145},[39,34537,34539],{"class":41,"line":34538},182,[39,34540,34541],{"class":102},"# 将loss值和精度按照图片的形式展示出来\n",[39,34543,34545,34547,34550],{"class":41,"line":34544},183,[39,34546,33002],{"class":49},[39,34548,34549],{"class":3021}," matplot_acc_loss",[39,34551,34552],{"class":45},"(train_process):\n",[39,34554,34556],{"class":41,"line":34555},184,[39,34557,34558],{"class":102},"    # 设置图的大小\n",[39,34560,34562,34565,34567,34569,34571,34573,34575,34577],{"class":41,"line":34561},185,[39,34563,34564],{"class":45},"    plt.figure(",[39,34566,32748],{"class":254},[39,34568,50],{"class":49},[39,34570,1221],{"class":45},[39,34572,1699],{"class":56},[39,34574,60],{"class":45},[39,34576,84],{"class":56},[39,34578,31552],{"class":45},[39,34580,34582],{"class":41,"line":34581},186,[39,34583,34584],{"class":102},"    # 设置图中有几张图\n",[39,34586,34588],{"class":41,"line":34587},187,[39,34589,34590],{"class":102},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[39,34592,34594],{"class":41,"line":34593},188,[39,34595,34596],{"class":102},"    # ①loss图\n",[39,34598,34600,34602,34604,34606,34608,34610,34612],{"class":41,"line":34599},189,[39,34601,32782],{"class":45},[39,34603,57],{"class":56},[39,34605,60],{"class":45},[39,34607,63],{"class":56},[39,34609,60],{"class":45},[39,34611,57],{"class":56},[39,34613,209],{"class":45},[39,34615,34617],{"class":41,"line":34616},190,[39,34618,34619],{"class":102},"    # 补充:\n",[39,34621,34623],{"class":41,"line":34622},191,[39,34624,34625],{"class":102},"    # plt.subplot(nrows, ncols, index)\n",[39,34627,34629],{"class":41,"line":34628},192,[39,34630,34631],{"class":102},"    # nrows：行数\n",[39,34633,34635],{"class":41,"line":34634},193,[39,34636,34637],{"class":102},"    # ncols：列数\n",[39,34639,34641],{"class":41,"line":34640},194,[39,34642,34643],{"class":102},"    # index：目前选中第几个子图（从1开始）\n",[39,34645,34647,34650,34653,34656,34659,34661,34664,34666,34669],{"class":41,"line":34646},195,[39,34648,34649],{"class":45},"    plt.plot(train_process[",[39,34651,34652],{"class":1319},"\"epoch\"",[39,34654,34655],{"class":45},"],train_process.train_loss_all,",[39,34657,34658],{"class":1319},"'ro-'",[39,34660,60],{"class":45},[39,34662,34663],{"class":254},"label",[39,34665,50],{"class":49},[39,34667,34668],{"class":1319},"'train loss'",[39,34670,209],{"class":45},[39,34672,34674,34676,34678,34681,34684,34686,34688,34690,34693],{"class":41,"line":34673},196,[39,34675,34649],{"class":45},[39,34677,34652],{"class":1319},[39,34679,34680],{"class":45},"],train_process.val_loss_all,",[39,34682,34683],{"class":1319},"'bs--'",[39,34685,60],{"class":45},[39,34687,34663],{"class":254},[39,34689,50],{"class":49},[39,34691,34692],{"class":1319},"'val loss'",[39,34694,209],{"class":45},[39,34696,34698],{"class":41,"line":34697},197,[39,34699,34700],{"class":102},"    # 添加一个图例\n",[39,34702,34704],{"class":41,"line":34703},198,[39,34705,34706],{"class":45},"    plt.legend()\n",[39,34708,34710],{"class":41,"line":34709},199,[39,34711,34712],{"class":102},"    # 给轴添加标签\n",[39,34714,34716,34719,34722],{"class":41,"line":34715},200,[39,34717,34718],{"class":45},"    plt.xlabel(",[39,34720,34721],{"class":1319},"'epoch'",[39,34723,209],{"class":45},[39,34725,34727,34730,34733],{"class":41,"line":34726},201,[39,34728,34729],{"class":45},"    plt.ylabel(",[39,34731,34732],{"class":1319},"'loss'",[39,34734,209],{"class":45},[39,34736,34738],{"class":41,"line":34737},202,[39,34739,34740],{"class":102},"    # ②准确度图\n",[39,34742,34744,34746,34748,34750,34752,34754,34756],{"class":41,"line":34743},203,[39,34745,32782],{"class":45},[39,34747,57],{"class":56},[39,34749,60],{"class":45},[39,34751,63],{"class":56},[39,34753,60],{"class":45},[39,34755,63],{"class":56},[39,34757,209],{"class":45},[39,34759,34761,34763,34765,34768,34770,34772,34774,34776,34779],{"class":41,"line":34760},204,[39,34762,34649],{"class":45},[39,34764,34652],{"class":1319},[39,34766,34767],{"class":45},"],train_process.train_acc_all,",[39,34769,34658],{"class":1319},[39,34771,60],{"class":45},[39,34773,34663],{"class":254},[39,34775,50],{"class":49},[39,34777,34778],{"class":1319},"'train acc'",[39,34780,209],{"class":45},[39,34782,34784,34786,34788,34791,34793,34795,34797,34799,34802],{"class":41,"line":34783},205,[39,34785,34649],{"class":45},[39,34787,34652],{"class":1319},[39,34789,34790],{"class":45},"],train_process.val_acc_all,",[39,34792,34683],{"class":1319},[39,34794,60],{"class":45},[39,34796,34663],{"class":254},[39,34798,50],{"class":49},[39,34800,34801],{"class":1319},"'val acc'",[39,34803,209],{"class":45},[39,34805,34807],{"class":41,"line":34806},206,[39,34808,34809],{"class":102},"    # 添加图例\n",[39,34811,34813],{"class":41,"line":34812},207,[39,34814,34706],{"class":45},[39,34816,34818,34820,34822],{"class":41,"line":34817},208,[39,34819,34718],{"class":45},[39,34821,34652],{"class":1319},[39,34823,209],{"class":45},[39,34825,34827,34829,34832],{"class":41,"line":34826},209,[39,34828,34729],{"class":45},[39,34830,34831],{"class":1319},"\"acc\"",[39,34833,209],{"class":45},[39,34835,34837],{"class":41,"line":34836},210,[39,34838,34839],{"class":45},"    plt.show()\n",[39,34841,34843],{"class":41,"line":34842},211,[39,34844,3458],{"emptyLinePlaceholder":1145},[39,34846,34848],{"class":41,"line":34847},212,[39,34849,34850],{"class":102},"# 正式开始训练:\n",[39,34852,34854,34856,34858,34860,34862],{"class":41,"line":34853},213,[39,34855,2596],{"class":49},[39,34857,32275],{"class":56},[39,34859,4007],{"class":49},[39,34861,32280],{"class":1319},[39,34863,4797],{"class":45},[39,34865,34867],{"class":41,"line":34866},214,[39,34868,34869],{"class":102},"    # 将模型实例化\n",[39,34871,34873,34876,34878],{"class":41,"line":34872},215,[39,34874,34875],{"class":45},"    LeNet",[39,34877,50],{"class":49},[39,34879,34880],{"class":45},"LeNet()\n",[39,34882,34884,34887,34889],{"class":41,"line":34883},216,[39,34885,34886],{"class":45},"    train_dataloader,val_dataloader",[39,34888,50],{"class":49},[39,34890,34891],{"class":45},"train_val_data_process()\n",[39,34893,34895,34897,34899,34902,34905,34907,34909],{"class":41,"line":34894},217,[39,34896,34448],{"class":45},[39,34898,50],{"class":49},[39,34900,34901],{"class":45},"train_model_process(LeNet,train_dataloader,val_dataloader,",[39,34903,34904],{"class":254},"num_epochs",[39,34906,50],{"class":49},[39,34908,1898],{"class":56},[39,34910,209],{"class":45},[39,34912,34914],{"class":41,"line":34913},218,[39,34915,34916],{"class":45},"    matplot_acc_loss(train_process)\n",[19,34918,34919],{},"画图的补充点学习：",[19,34921,34922],{},[269,34923],{"alt":34,"src":34924},"\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",[1171,34926,34927],{"start":99},[1174,34928,34929],{},"测试",[29,34931,34933],{"className":31,"code":34932,"language":33,"meta":34,"style":34},"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",[36,34934,34935,34941,34951,34963,34973,34978,34988,34998,35002,35007,35016,35033,35045,35062,35073,35089,35094,35105,35116,35127,35134,35138,35143,35153,35158,35175,35183,35187,35192,35201,35210,35214,35219,35224,35229,35236,35241,35253,35263,35273,35278,35282,35287,35296,35301,35317,35322,35327,35332,35346,35351,35365,35369,35374,35389,35394,35406,35410,35415,35427,35432,35440,35445,35450,35460,35465,35474,35479,35484,35488,35493,35498,35514,35522,35527,35532,35591,35597,35602,35613,35621,35629,35633,35638,35642,35647,35655,35660,35676,35681,35691,35701],{"__ignoreMap":34},[39,34936,34937,34939],{"class":41,"line":42},[39,34938,31447],{"class":49},[39,34940,31450],{"class":45},[39,34942,34943,34945,34947,34949],{"class":41,"line":74},[39,34944,31447],{"class":49},[39,34946,32470],{"class":45},[39,34948,32438],{"class":49},[39,34950,32475],{"class":45},[39,34952,34953,34955,34958,34960],{"class":41,"line":99},[39,34954,31792],{"class":49},[39,34956,34957],{"class":45}," jupyter_client.consoleapp ",[39,34959,31447],{"class":49},[39,34961,34962],{"class":45}," classes\n",[39,34964,34965,34967,34969,34971],{"class":41,"line":106},[39,34966,31792],{"class":49},[39,34968,32453],{"class":45},[39,34970,31447],{"class":49},[39,34972,32458],{"class":45},[39,34974,34975],{"class":41,"line":112},[39,34976,34977],{"class":102},"# 导入数据集\n",[39,34979,34980,34982,34984,34986],{"class":41,"line":118},[39,34981,31792],{"class":49},[39,34983,32423],{"class":45},[39,34985,31447],{"class":49},[39,34987,32428],{"class":45},[39,34989,34990,34992,34994,34996],{"class":41,"line":413},[39,34991,31792],{"class":49},[39,34993,32969],{"class":45},[39,34995,31447],{"class":49},[39,34997,32974],{"class":45},[39,34999,35000],{"class":41,"line":419},[39,35001,3458],{"emptyLinePlaceholder":1145},[39,35003,35004],{"class":41,"line":425},[39,35005,35006],{"class":102},"# 测试数据处理\n",[39,35008,35009,35011,35014],{"class":41,"line":443},[39,35010,33002],{"class":49},[39,35012,35013],{"class":3021}," test_data_process",[39,35015,33008],{"class":45},[39,35017,35018,35021,35023,35025,35027,35029,35031],{"class":41,"line":449},[39,35019,35020],{"class":45},"    test_data",[39,35022,50],{"class":49},[39,35024,32510],{"class":45},[39,35026,32513],{"class":254},[39,35028,50],{"class":49},[39,35030,32518],{"class":1319},[39,35032,32521],{"class":45},[39,35034,35035,35038,35040,35043],{"class":41,"line":455},[39,35036,35037],{"class":254},"                           train",[39,35039,50],{"class":49},[39,35041,35042],{"class":56},"False",[39,35044,32521],{"class":45},[39,35046,35047,35050,35052,35054,35056,35058,35060],{"class":41,"line":461},[39,35048,35049],{"class":254},"                           transform",[39,35051,50],{"class":49},[39,35053,32548],{"class":45},[39,35055,32551],{"class":254},[39,35057,50],{"class":49},[39,35059,2099],{"class":56},[39,35061,32559],{"class":45},[39,35063,35064,35067,35069,35071],{"class":41,"line":475},[39,35065,35066],{"class":254},"                           download",[39,35068,50],{"class":49},[39,35070,32531],{"class":56},[39,35072,209],{"class":45},[39,35074,35075,35078,35080,35082,35084,35086],{"class":41,"line":665},[39,35076,35077],{"class":45},"    test_dataloader",[39,35079,50],{"class":49},[39,35081,32589],{"class":45},[39,35083,32592],{"class":254},[39,35085,50],{"class":49},[39,35087,35088],{"class":45},"test_data,\n",[39,35090,35091],{"class":41,"line":671},[39,35092,35093],{"class":102},"                                    # 这里是一张一张进行测试\n",[39,35095,35096,35099,35101,35103],{"class":41,"line":684},[39,35097,35098],{"class":254},"                                    batch_size",[39,35100,50],{"class":49},[39,35102,57],{"class":56},[39,35104,32521],{"class":45},[39,35106,35107,35110,35112,35114],{"class":41,"line":2732},[39,35108,35109],{"class":254},"                                    shuffle",[39,35111,50],{"class":49},[39,35113,32531],{"class":56},[39,35115,32521],{"class":45},[39,35117,35118,35121,35123,35125],{"class":41,"line":2737},[39,35119,35120],{"class":254},"                                    num_workers",[39,35122,50],{"class":49},[39,35124,260],{"class":56},[39,35126,209],{"class":45},[39,35128,35129,35131],{"class":41,"line":2751},[39,35130,5148],{"class":49},[39,35132,35133],{"class":45}," test_dataloader\n",[39,35135,35136],{"class":41,"line":2756},[39,35137,3458],{"emptyLinePlaceholder":1145},[39,35139,35140],{"class":41,"line":2785},[39,35141,35142],{"class":102},"# 定义模型测试函数\n",[39,35144,35145,35147,35150],{"class":41,"line":2790},[39,35146,33002],{"class":49},[39,35148,35149],{"class":3021}," test_model_process",[39,35151,35152],{"class":45},"(model,test_dataloader):\n",[39,35154,35155],{"class":41,"line":2807},[39,35156,35157],{"class":102},"    # 将模型放到设备当中，先进行判断\n",[39,35159,35160,35162,35164,35166,35168,35170,35172],{"class":41,"line":2812},[39,35161,32292],{"class":45},[39,35163,50],{"class":49},[39,35165,32299],{"class":1319},[39,35167,2762],{"class":49},[39,35169,32304],{"class":45},[39,35171,2759],{"class":49},[39,35173,35174],{"class":1319}," \"cpu\"\n",[39,35176,35177,35179,35181],{"class":41,"line":2817},[39,35178,32344],{"class":45},[39,35180,50],{"class":49},[39,35182,33344],{"class":45},[39,35184,35185],{"class":41,"line":2822},[39,35186,3458],{"emptyLinePlaceholder":1145},[39,35188,35189],{"class":41,"line":2836},[39,35190,35191],{"class":102},"    # 设置初始化参数\n",[39,35193,35194,35197,35199],{"class":41,"line":2841},[39,35195,35196],{"class":45},"    test_corrects",[39,35198,50],{"class":49},[39,35200,33397],{"class":56},[39,35202,35203,35206,35208],{"class":41,"line":3635},[39,35204,35205],{"class":45},"    test_num",[39,35207,50],{"class":49},[39,35209,4143],{"class":56},[39,35211,35212],{"class":41,"line":3649},[39,35213,3458],{"emptyLinePlaceholder":1145},[39,35215,35216],{"class":41,"line":3657},[39,35217,35218],{"class":102},"    # 进行模型测试\n",[39,35220,35221],{"class":41,"line":3662},[39,35222,35223],{"class":102},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[39,35225,35226],{"class":41,"line":3668},[39,35227,35228],{"class":102},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[39,35230,35231,35234],{"class":41,"line":3674},[39,35232,35233],{"class":49},"    with",[39,35235,33939],{"class":45},[39,35237,35238],{"class":41,"line":3679},[39,35239,35240],{"class":102},"        # 从数据中进行\n",[39,35242,35243,35245,35248,35250],{"class":41,"line":9004},[39,35244,4461],{"class":49},[39,35246,35247],{"class":45}," test_data_x,test_data_y ",[39,35249,27100],{"class":49},[39,35251,35252],{"class":45}," test_dataloader:\n",[39,35254,35255,35258,35260],{"class":41,"line":9028},[39,35256,35257],{"class":45},"            test_data_x",[39,35259,50],{"class":49},[39,35261,35262],{"class":45},"test_data_x.to(device)\n",[39,35264,35265,35268,35270],{"class":41,"line":9033},[39,35266,35267],{"class":45},"            test_data_y",[39,35269,50],{"class":49},[39,35271,35272],{"class":45},"test_data_y.to(device)\n",[39,35274,35275],{"class":41,"line":9039},[39,35276,35277],{"class":102},"            # 设置为验证模式\n",[39,35279,35280],{"class":41,"line":9066},[39,35281,33930],{"class":45},[39,35283,35284],{"class":41,"line":9071},[39,35285,35286],{"class":102},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[39,35288,35289,35291,35293],{"class":41,"line":9077},[39,35290,33715],{"class":45},[39,35292,50],{"class":49},[39,35294,35295],{"class":45},"model(test_data_x)\n",[39,35297,35298],{"class":41,"line":9089},[39,35299,35300],{"class":102},"            # 查找每一行中最大值对应的下标\n",[39,35302,35303,35305,35307,35309,35311,35313,35315],{"class":41,"line":9101},[39,35304,33732],{"class":45},[39,35306,50],{"class":49},[39,35308,33737],{"class":45},[39,35310,33740],{"class":254},[39,35312,50],{"class":49},[39,35314,57],{"class":56},[39,35316,209],{"class":45},[39,35318,35319],{"class":41,"line":9113},[39,35320,35321],{"class":102},"            # 计算正确率\n",[39,35323,35324],{"class":41,"line":10772},[39,35325,35326],{"class":102},"            # .data表示是一个不带梯度信息的tensor\n",[39,35328,35329],{"class":41,"line":10797},[39,35330,35331],{"class":102},"            # 如果预测正确，则准确度test_corrects加1\n",[39,35333,35334,35337,35339,35341,35343],{"class":41,"line":10820},[39,35335,35336],{"class":45},"            test_corrects",[39,35338,10533],{"class":49},[39,35340,33842],{"class":45},[39,35342,4007],{"class":49},[39,35344,35345],{"class":45},"test_data_y.data)\n",[39,35347,35348],{"class":41,"line":10844},[39,35349,35350],{"class":102},"            # 将所有的测试样本进行累计\n",[39,35352,35353,35356,35358,35361,35363],{"class":41,"line":10849},[39,35354,35355],{"class":45},"            test_num",[39,35357,10533],{"class":49},[39,35359,35360],{"class":45},"test_data_x.size(",[39,35362,260],{"class":56},[39,35364,209],{"class":45},[39,35366,35367],{"class":41,"line":10854},[39,35368,3458],{"emptyLinePlaceholder":1145},[39,35370,35371],{"class":41,"line":10859},[39,35372,35373],{"class":102},"        # 计算准确度\n",[39,35375,35376,35379,35381,35384,35386],{"class":41,"line":10868},[39,35377,35378],{"class":45},"        test_acc",[39,35380,50],{"class":49},[39,35382,35383],{"class":45},"test_corrects.double().item()",[39,35385,1784],{"class":49},[39,35387,35388],{"class":45},"test_num\n",[39,35390,35391],{"class":41,"line":10873},[39,35392,35393],{"class":102},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[39,35395,35396,35398,35400,35403],{"class":41,"line":10879},[39,35397,33506],{"class":56},[39,35399,1221],{"class":45},[39,35401,35402],{"class":1319},"\"测试的准确率：\"",[39,35404,35405],{"class":45},",test_acc)\n",[39,35407,35408],{"class":41,"line":10900},[39,35409,3458],{"emptyLinePlaceholder":1145},[39,35411,35412],{"class":41,"line":10906},[39,35413,35414],{"class":102},"# 实现模型的测试功能\n",[39,35416,35417,35419,35421,35423,35425],{"class":41,"line":10920},[39,35418,2596],{"class":49},[39,35420,32275],{"class":56},[39,35422,4007],{"class":49},[39,35424,32280],{"class":1319},[39,35426,4797],{"class":45},[39,35428,35429],{"class":41,"line":10926},[39,35430,35431],{"class":102},"    # 加载模型\n",[39,35433,35434,35436,35438],{"class":41,"line":10953},[39,35435,32344],{"class":45},[39,35437,50],{"class":49},[39,35439,34880],{"class":45},[39,35441,35442],{"class":41,"line":10962},[39,35443,35444],{"class":102},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[39,35446,35447],{"class":41,"line":10968},[39,35448,35449],{"class":102},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[39,35451,35452,35455,35458],{"class":41,"line":10976},[39,35453,35454],{"class":45},"    model.load_state_dict(torch.load(",[39,35456,35457],{"class":1319},"'best_model.pth'",[39,35459,31552],{"class":45},[39,35461,35462],{"class":41,"line":10981},[39,35463,35464],{"class":102},"    # 数据加载\n",[39,35466,35467,35469,35471],{"class":41,"line":17660},[39,35468,35077],{"class":45},[39,35470,50],{"class":49},[39,35472,35473],{"class":45},"test_data_process()\n",[39,35475,35476],{"class":41,"line":17666},[39,35477,35478],{"class":102},"    # 加载模型测试的函数\n",[39,35480,35481],{"class":41,"line":17689},[39,35482,35483],{"class":45},"    test_model_process(model,test_dataloader)\n",[39,35485,35486],{"class":41,"line":17695},[39,35487,3458],{"emptyLinePlaceholder":1145},[39,35489,35490],{"class":41,"line":17718},[39,35491,35492],{"class":102},"    # 验证集推理实现：\n",[39,35494,35495],{"class":41,"line":17732},[39,35496,35497],{"class":102},"    # 加载数据加载的更详细一些\n",[39,35499,35500,35502,35504,35506,35508,35510,35512],{"class":41,"line":17752},[39,35501,32292],{"class":45},[39,35503,50],{"class":49},[39,35505,32299],{"class":1319},[39,35507,2762],{"class":49},[39,35509,32304],{"class":45},[39,35511,2759],{"class":49},[39,35513,35174],{"class":1319},[39,35515,35516,35518,35520],{"class":41,"line":17758},[39,35517,32344],{"class":45},[39,35519,50],{"class":49},[39,35521,33344],{"class":45},[39,35523,35524],{"class":41,"line":17769},[39,35525,35526],{"class":102},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[39,35528,35529],{"class":41,"line":17792},[39,35530,35531],{"class":102},"    # 顺序不可改变\n",[39,35533,35534,35537,35539,35541,35544,35546,35549,35551,35554,35556,35559,35561,35564,35566,35569,35571,35574,35576,35579,35581,35584,35586,35589],{"class":41,"line":17814},[39,35535,35536],{"class":45},"    classes",[39,35538,50],{"class":49},[39,35540,2088],{"class":45},[39,35542,35543],{"class":1319},"'T-shirt\u002Ftop'",[39,35545,60],{"class":45},[39,35547,35548],{"class":1319},"'Trouser'",[39,35550,60],{"class":45},[39,35552,35553],{"class":1319},"'Pullover'",[39,35555,60],{"class":45},[39,35557,35558],{"class":1319},"'Dress'",[39,35560,60],{"class":45},[39,35562,35563],{"class":1319},"'Coat'",[39,35565,60],{"class":45},[39,35567,35568],{"class":1319},"'Sandal'",[39,35570,60],{"class":45},[39,35572,35573],{"class":1319},"'Shirt'",[39,35575,60],{"class":45},[39,35577,35578],{"class":1319},"'Sneaker'",[39,35580,60],{"class":45},[39,35582,35583],{"class":1319},"'Bag'",[39,35585,60],{"class":45},[39,35587,35588],{"class":1319},"'Ankle boot'",[39,35590,34301],{"class":45},[39,35592,35593,35595],{"class":41,"line":17819},[39,35594,35233],{"class":49},[39,35596,33939],{"class":45},[39,35598,35599],{"class":41,"line":17825},[39,35600,35601],{"class":102},"        # 将数据和标签都放到设备当中\n",[39,35603,35604,35606,35609,35611],{"class":41,"line":17839},[39,35605,4461],{"class":49},[39,35607,35608],{"class":45}," b_x,b_y ",[39,35610,27100],{"class":49},[39,35612,35252],{"class":45},[39,35614,35615,35617,35619],{"class":41,"line":17852},[39,35616,33665],{"class":45},[39,35618,50],{"class":49},[39,35620,33670],{"class":45},[39,35622,35623,35625,35627],{"class":41,"line":17857},[39,35624,33680],{"class":45},[39,35626,50],{"class":49},[39,35628,33685],{"class":45},[39,35630,35631],{"class":41,"line":17871},[39,35632,3458],{"emptyLinePlaceholder":1145},[39,35634,35635],{"class":41,"line":17876},[39,35636,35637],{"class":102},"            # 设置模型为验证模式\n",[39,35639,35640],{"class":41,"line":17882},[39,35641,33930],{"class":45},[39,35643,35644],{"class":41,"line":17887},[39,35645,35646],{"class":102},"            # 模型推理结果\n",[39,35648,35649,35651,35653],{"class":41,"line":17901},[39,35650,33715],{"class":45},[39,35652,50],{"class":49},[39,35654,33720],{"class":45},[39,35656,35657],{"class":41,"line":17906},[39,35658,35659],{"class":102},"            # 获取最大下标，最大下标就是类别号\n",[39,35661,35662,35664,35666,35668,35670,35672,35674],{"class":41,"line":17911},[39,35663,33732],{"class":45},[39,35665,50],{"class":49},[39,35667,33737],{"class":45},[39,35669,33740],{"class":254},[39,35671,50],{"class":49},[39,35673,57],{"class":56},[39,35675,209],{"class":45},[39,35677,35678],{"class":41,"line":17925},[39,35679,35680],{"class":102},"            # 取出张量中的数值\n",[39,35682,35683,35686,35688],{"class":41,"line":17937},[39,35684,35685],{"class":45},"            result",[39,35687,50],{"class":49},[39,35689,35690],{"class":45},"pre_lab.item()\n",[39,35692,35693,35696,35698],{"class":41,"line":17942},[39,35694,35695],{"class":45},"            label",[39,35697,50],{"class":49},[39,35699,35700],{"class":45},"b_y.item()\n",[39,35702,35703,35706,35708,35711,35714,35717,35719,35722],{"class":41,"line":17955},[39,35704,35705],{"class":56},"            print",[39,35707,1221],{"class":45},[39,35709,35710],{"class":1319},"\"预测值：\"",[39,35712,35713],{"class":45},",classes[result],",[39,35715,35716],{"class":1319},"\"------\"",[39,35718,60],{"class":45},[39,35720,35721],{"class":1319},"\"真实值：\"",[39,35723,35724],{"class":45},",classes[label])\n",[19,35726,35727],{},"（2）AlexNet",[1171,35729,35730],{},[1174,35731,35732],{},"神经网络构建",[29,35734,35736],{"className":31,"code":35735,"language":33,"meta":34,"style":34},"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",[36,35737,35738,35744,35754,35764,35776,35780,35797,35805,35820,35832,35874,35901,35944,35970,36014,36057,36100,36127,36131,36141,36146,36174,36193,36212,36216,36221,36229,36244,36254,36268,36278,36293,36308,36323,36334,36338,36343,36353,36368,36373,36387,36402,36414,36419,36430,36435,36441,36446,36458,36478,36483,36492],{"__ignoreMap":34},[39,35739,35740,35742],{"class":41,"line":42},[39,35741,31447],{"class":49},[39,35743,31450],{"class":45},[39,35745,35746,35748,35750,35752],{"class":41,"line":74},[39,35747,31792],{"class":49},[39,35749,31795],{"class":45},[39,35751,31447],{"class":49},[39,35753,31800],{"class":45},[39,35755,35756,35758,35760,35762],{"class":41,"line":99},[39,35757,31792],{"class":49},[39,35759,31812],{"class":45},[39,35761,31447],{"class":49},[39,35763,31817],{"class":45},[39,35765,35766,35768,35771,35773],{"class":41,"line":106},[39,35767,31447],{"class":49},[39,35769,35770],{"class":45}," torch.nn.functional ",[39,35772,32438],{"class":49},[39,35774,35775],{"class":45}," F\n",[39,35777,35778],{"class":41,"line":112},[39,35779,3458],{"emptyLinePlaceholder":1145},[39,35781,35782,35784,35787,35789,35791,35793,35795],{"class":41,"line":118},[39,35783,15750],{"class":49},[39,35785,35786],{"class":3021}," AlexNet",[39,35788,1221],{"class":45},[39,35790,31833],{"class":3021},[39,35792,1758],{"class":45},[39,35794,31838],{"class":3021},[39,35796,31841],{"class":45},[39,35798,35799,35801,35803],{"class":41,"line":413},[39,35800,31856],{"class":49},[39,35802,31859],{"class":56},[39,35804,31862],{"class":45},[39,35806,35807,35809,35812,35814,35816,35818],{"class":41,"line":419},[39,35808,31872],{"class":56},[39,35810,35811],{"class":45},"(AlexNet,",[39,35813,31878],{"class":56},[39,35815,31881],{"class":45},[39,35817,31884],{"class":56},[39,35819,3034],{"class":45},[39,35821,35822,35824,35827,35829],{"class":41,"line":425},[39,35823,31900],{"class":56},[39,35825,35826],{"class":45},".ReLu",[39,35828,50],{"class":49},[39,35830,35831],{"class":45},"nn.ReLU()\n",[39,35833,35834,35836,35838,35840,35842,35844,35846,35848,35850,35852,35854,35856,35858,35860,35862,35864,35866,35868,35870,35872],{"class":41,"line":443},[39,35835,31900],{"class":56},[39,35837,31903],{"class":45},[39,35839,50],{"class":49},[39,35841,31908],{"class":45},[39,35843,31911],{"class":254},[39,35845,50],{"class":49},[39,35847,57],{"class":56},[39,35849,60],{"class":45},[39,35851,31920],{"class":254},[39,35853,50],{"class":49},[39,35855,1422],{"class":56},[39,35857,60],{"class":45},[39,35859,31929],{"class":254},[39,35861,50],{"class":49},[39,35863,151],{"class":56},[39,35865,60],{"class":45},[39,35867,31984],{"class":254},[39,35869,50],{"class":49},[39,35871,84],{"class":56},[39,35873,209],{"class":45},[39,35875,35876,35878,35880,35882,35885,35887,35889,35891,35893,35895,35897,35899],{"class":41,"line":449},[39,35877,31900],{"class":56},[39,35879,31968],{"class":45},[39,35881,50],{"class":49},[39,35883,35884],{"class":45},"nn.MaxPool2d(",[39,35886,31929],{"class":254},[39,35888,50],{"class":49},[39,35890,68],{"class":56},[39,35892,60],{"class":45},[39,35894,31984],{"class":254},[39,35896,50],{"class":49},[39,35898,63],{"class":56},[39,35900,209],{"class":45},[39,35902,35903,35905,35907,35909,35911,35913,35915,35917,35919,35921,35923,35926,35928,35930,35932,35934,35936,35938,35940,35942],{"class":41,"line":455},[39,35904,31900],{"class":56},[39,35906,31997],{"class":45},[39,35908,50],{"class":49},[39,35910,31908],{"class":45},[39,35912,31911],{"class":254},[39,35914,50],{"class":49},[39,35916,1422],{"class":56},[39,35918,60],{"class":45},[39,35920,31920],{"class":254},[39,35922,50],{"class":49},[39,35924,35925],{"class":56},"256",[39,35927,60],{"class":45},[39,35929,31929],{"class":254},[39,35931,50],{"class":49},[39,35933,89],{"class":56},[39,35935,60],{"class":45},[39,35937,31938],{"class":254},[39,35939,50],{"class":49},[39,35941,63],{"class":56},[39,35943,209],{"class":45},[39,35945,35946,35948,35950,35952,35954,35956,35958,35960,35962,35964,35966,35968],{"class":41,"line":461},[39,35947,31900],{"class":56},[39,35949,32032],{"class":45},[39,35951,50],{"class":49},[39,35953,35884],{"class":45},[39,35955,31929],{"class":254},[39,35957,50],{"class":49},[39,35959,68],{"class":56},[39,35961,60],{"class":45},[39,35963,31984],{"class":254},[39,35965,50],{"class":49},[39,35967,63],{"class":56},[39,35969,209],{"class":45},[39,35971,35972,35974,35977,35979,35981,35983,35985,35987,35989,35991,35993,35996,35998,36000,36002,36004,36006,36008,36010,36012],{"class":41,"line":475},[39,35973,31900],{"class":56},[39,35975,35976],{"class":45},".c5",[39,35978,50],{"class":49},[39,35980,31908],{"class":45},[39,35982,31911],{"class":254},[39,35984,50],{"class":49},[39,35986,35925],{"class":56},[39,35988,60],{"class":45},[39,35990,31920],{"class":254},[39,35992,50],{"class":49},[39,35994,35995],{"class":56},"384",[39,35997,60],{"class":45},[39,35999,31929],{"class":254},[39,36001,50],{"class":49},[39,36003,68],{"class":56},[39,36005,60],{"class":45},[39,36007,31938],{"class":254},[39,36009,50],{"class":49},[39,36011,57],{"class":56},[39,36013,209],{"class":45},[39,36015,36016,36018,36021,36023,36025,36027,36029,36031,36033,36035,36037,36039,36041,36043,36045,36047,36049,36051,36053,36055],{"class":41,"line":665},[39,36017,31900],{"class":56},[39,36019,36020],{"class":45},".c6",[39,36022,50],{"class":49},[39,36024,31908],{"class":45},[39,36026,31911],{"class":254},[39,36028,50],{"class":49},[39,36030,35995],{"class":56},[39,36032,60],{"class":45},[39,36034,31920],{"class":254},[39,36036,50],{"class":49},[39,36038,35995],{"class":56},[39,36040,60],{"class":45},[39,36042,31929],{"class":254},[39,36044,50],{"class":49},[39,36046,68],{"class":56},[39,36048,60],{"class":45},[39,36050,31938],{"class":254},[39,36052,50],{"class":49},[39,36054,57],{"class":56},[39,36056,209],{"class":45},[39,36058,36059,36061,36064,36066,36068,36070,36072,36074,36076,36078,36080,36082,36084,36086,36088,36090,36092,36094,36096,36098],{"class":41,"line":671},[39,36060,31900],{"class":56},[39,36062,36063],{"class":45},".c7",[39,36065,50],{"class":49},[39,36067,31908],{"class":45},[39,36069,31911],{"class":254},[39,36071,50],{"class":49},[39,36073,35995],{"class":56},[39,36075,60],{"class":45},[39,36077,31920],{"class":254},[39,36079,50],{"class":49},[39,36081,35925],{"class":56},[39,36083,60],{"class":45},[39,36085,31929],{"class":254},[39,36087,50],{"class":49},[39,36089,68],{"class":56},[39,36091,60],{"class":45},[39,36093,31938],{"class":254},[39,36095,50],{"class":49},[39,36097,57],{"class":56},[39,36099,209],{"class":45},[39,36101,36102,36104,36107,36109,36111,36113,36115,36117,36119,36121,36123,36125],{"class":41,"line":684},[39,36103,31900],{"class":56},[39,36105,36106],{"class":45},".s8",[39,36108,50],{"class":49},[39,36110,35884],{"class":45},[39,36112,31929],{"class":254},[39,36114,50],{"class":49},[39,36116,68],{"class":56},[39,36118,60],{"class":45},[39,36120,31984],{"class":254},[39,36122,50],{"class":49},[39,36124,63],{"class":56},[39,36126,209],{"class":45},[39,36128,36129],{"class":41,"line":2732},[39,36130,32057],{"class":102},[39,36132,36133,36135,36137,36139],{"class":41,"line":2737},[39,36134,31900],{"class":56},[39,36136,32064],{"class":45},[39,36138,50],{"class":49},[39,36140,32069],{"class":45},[39,36142,36143],{"class":41,"line":2751},[39,36144,36145],{"class":102},"       # 定义全连接层\n",[39,36147,36148,36150,36153,36155,36157,36159,36161,36163,36165,36167,36169,36172],{"class":41,"line":2756},[39,36149,31900],{"class":56},[39,36151,36152],{"class":45},".f1",[39,36154,50],{"class":49},[39,36156,32086],{"class":45},[39,36158,94],{"class":56},[39,36160,1657],{"class":49},[39,36162,94],{"class":56},[39,36164,1657],{"class":49},[39,36166,35925],{"class":56},[39,36168,60],{"class":45},[39,36170,36171],{"class":56},"4096",[39,36173,209],{"class":45},[39,36175,36176,36178,36181,36183,36185,36187,36189,36191],{"class":41,"line":2785},[39,36177,31900],{"class":56},[39,36179,36180],{"class":45},".f2",[39,36182,50],{"class":49},[39,36184,32086],{"class":45},[39,36186,36171],{"class":56},[39,36188,60],{"class":45},[39,36190,36171],{"class":56},[39,36192,209],{"class":45},[39,36194,36195,36197,36200,36202,36204,36206,36208,36210],{"class":41,"line":2790},[39,36196,31900],{"class":56},[39,36198,36199],{"class":45},".f3",[39,36201,50],{"class":49},[39,36203,32086],{"class":45},[39,36205,36171],{"class":56},[39,36207,60],{"class":45},[39,36209,146],{"class":56},[39,36211,209],{"class":45},[39,36213,36214],{"class":41,"line":2807},[39,36215,3458],{"emptyLinePlaceholder":1145},[39,36217,36218],{"class":41,"line":2812},[39,36219,36220],{"class":102},"    # 定义前向传播\n",[39,36222,36223,36225,36227],{"class":41,"line":2817},[39,36224,31856],{"class":49},[39,36226,32148],{"class":3021},[39,36228,32151],{"class":45},[39,36230,36231,36233,36235,36237,36240,36242],{"class":41,"line":2822},[39,36232,32156],{"class":45},[39,36234,50],{"class":49},[39,36236,31878],{"class":56},[39,36238,36239],{"class":45},".ReLu(",[39,36241,31878],{"class":56},[39,36243,32168],{"class":45},[39,36245,36246,36248,36250,36252],{"class":41,"line":2836},[39,36247,32156],{"class":45},[39,36249,50],{"class":49},[39,36251,31878],{"class":56},[39,36253,32179],{"class":45},[39,36255,36256,36258,36260,36262,36264,36266],{"class":41,"line":2841},[39,36257,32156],{"class":45},[39,36259,50],{"class":49},[39,36261,31878],{"class":56},[39,36263,36239],{"class":45},[39,36265,31878],{"class":56},[39,36267,32194],{"class":45},[39,36269,36270,36272,36274,36276],{"class":41,"line":3635},[39,36271,32156],{"class":45},[39,36273,50],{"class":49},[39,36275,31878],{"class":56},[39,36277,32205],{"class":45},[39,36279,36280,36282,36284,36286,36288,36290],{"class":41,"line":3649},[39,36281,32156],{"class":45},[39,36283,50],{"class":49},[39,36285,31878],{"class":56},[39,36287,36239],{"class":45},[39,36289,31878],{"class":56},[39,36291,36292],{"class":45},".c5(x))\n",[39,36294,36295,36297,36299,36301,36303,36305],{"class":41,"line":3657},[39,36296,32156],{"class":45},[39,36298,50],{"class":49},[39,36300,31878],{"class":56},[39,36302,36239],{"class":45},[39,36304,31878],{"class":56},[39,36306,36307],{"class":45},".c6(x))\n",[39,36309,36310,36312,36314,36316,36318,36320],{"class":41,"line":3662},[39,36311,32156],{"class":45},[39,36313,50],{"class":49},[39,36315,31878],{"class":56},[39,36317,36239],{"class":45},[39,36319,31878],{"class":56},[39,36321,36322],{"class":45},".c7(x))\n",[39,36324,36325,36327,36329,36331],{"class":41,"line":3668},[39,36326,32156],{"class":45},[39,36328,50],{"class":49},[39,36330,31878],{"class":56},[39,36332,36333],{"class":45},".s8(x)\n",[39,36335,36336],{"class":41,"line":3674},[39,36337,3458],{"emptyLinePlaceholder":1145},[39,36339,36340],{"class":41,"line":3679},[39,36341,36342],{"class":102},"        # 展平加线性全连接层\n",[39,36344,36345,36347,36349,36351],{"class":41,"line":9004},[39,36346,32156],{"class":45},[39,36348,50],{"class":49},[39,36350,31878],{"class":56},[39,36352,32216],{"class":45},[39,36354,36355,36357,36359,36361,36363,36365],{"class":41,"line":9028},[39,36356,32156],{"class":45},[39,36358,50],{"class":49},[39,36360,31878],{"class":56},[39,36362,36239],{"class":45},[39,36364,31878],{"class":56},[39,36366,36367],{"class":45},".f1(x))\n",[39,36369,36370],{"class":41,"line":9033},[39,36371,36372],{"class":102},"        # 还需要dropout对神经元随机进行失活\n",[39,36374,36375,36377,36379,36382,36385],{"class":41,"line":9039},[39,36376,32156],{"class":45},[39,36378,50],{"class":49},[39,36380,36381],{"class":45},"F.dropout(x,",[39,36383,36384],{"class":56},"0.5",[39,36386,209],{"class":45},[39,36388,36389,36391,36393,36395,36397,36399],{"class":41,"line":9066},[39,36390,32156],{"class":45},[39,36392,50],{"class":49},[39,36394,31878],{"class":56},[39,36396,36239],{"class":45},[39,36398,31878],{"class":56},[39,36400,36401],{"class":45},".f2(x))\n",[39,36403,36404,36406,36408,36410,36412],{"class":41,"line":9071},[39,36405,32156],{"class":45},[39,36407,50],{"class":49},[39,36409,36381],{"class":45},[39,36411,36384],{"class":56},[39,36413,209],{"class":45},[39,36415,36416],{"class":41,"line":9077},[39,36417,36418],{"class":102},"        # 直接输出\n",[39,36420,36421,36423,36425,36427],{"class":41,"line":9089},[39,36422,32156],{"class":45},[39,36424,50],{"class":49},[39,36426,31878],{"class":56},[39,36428,36429],{"class":45},".f3(x)\n",[39,36431,36432],{"class":41,"line":9101},[39,36433,36434],{"class":102},"        # 前向传播输出\n",[39,36436,36437,36439],{"class":41,"line":9113},[39,36438,15808],{"class":49},[39,36440,32264],{"class":45},[39,36442,36443],{"class":41,"line":10772},[39,36444,36445],{"class":102},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[39,36447,36448,36450,36452,36454,36456],{"class":41,"line":10797},[39,36449,2596],{"class":49},[39,36451,32275],{"class":56},[39,36453,4007],{"class":49},[39,36455,32280],{"class":1319},[39,36457,4797],{"class":45},[39,36459,36460,36462,36464,36466,36468,36470,36472,36474,36476],{"class":41,"line":10820},[39,36461,32292],{"class":45},[39,36463,50],{"class":49},[39,36465,31506],{"class":45},[39,36467,32299],{"class":1319},[39,36469,2762],{"class":49},[39,36471,32304],{"class":45},[39,36473,2759],{"class":49},[39,36475,31531],{"class":1319},[39,36477,209],{"class":45},[39,36479,36480],{"class":41,"line":10844},[39,36481,36482],{"class":102},"    # 模型实例化，然后将实例化的模型放到设备中\n",[39,36484,36485,36487,36489],{"class":41,"line":10849},[39,36486,32344],{"class":45},[39,36488,50],{"class":49},[39,36490,36491],{"class":45},"AlexNet().to(device)\n",[39,36493,36494,36496,36498,36500,36502,36505,36507,36509],{"class":41,"line":10854},[39,36495,32354],{"class":56},[39,36497,32357],{"class":45},[39,36499,57],{"class":56},[39,36501,60],{"class":45},[39,36503,36504],{"class":56},"227",[39,36506,60],{"class":45},[39,36508,36504],{"class":56},[39,36510,32370],{"class":45},[1171,36512,36513],{"start":74},[1174,36514,32383],{},[29,36516,36518],{"className":31,"code":36517,"language":33,"meta":34,"style":34},"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",[36,36519,36520,36526,36532,36542,36548,36558,36568,36578,36588,36598,36602,36613,36623,36627,36631,36635,36643,36655,36665,36681,36691,36723,36737,36747,36757,36761,36771,36785,36795,36805,36815,36821,36825,36829,36833,36837,36841,36849,36869,36873,36877,36881,36885,36889,36905,36909,36913,36921,36925,36929,36937,36941,36945,36949,36957,36961,36965,36969,36973,36981,36985,36993,36997,37005,37009,37017,37021,37029,37033,37037,37045,37049,37053,37057,37069,37093,37107,37111,37115,37119,37127,37131,37139,37143,37151,37155,37163,37167,37175,37179,37187,37191,37203,37207,37215,37219,37227,37231,37235,37239,37243,37251,37255,37271,37275,37283,37287,37291,37295,37299,37303,37307,37311,37327,37331,37343,37347,37359,37363,37375,37379,37387,37391,37399,37403,37407,37412,37418,37422,37431,37435,37452,37456,37465,37469,37487,37500,37505,37518,37522,37526,37534,37538,37542,37550,37554,37562,37566,37574,37578,37582,37624,37666,37670,37674,37690,37694,37710,37714,37718,37726,37730,37734,37746,37784,37789,37794,37803,37807,37821,37831,37837,37843,37849,37855,37859,37863,37869,37873,37877,37885,37889,37907,37911,37915,37919,37935,37939,37943,37947,37951,37955,37975,37995,37999,38003,38007,38015,38023,38027,38043,38063,38083,38087,38091,38099,38107,38111,38115,38119,38131,38135,38145,38153,38170],{"__ignoreMap":34},[39,36521,36522,36524],{"class":41,"line":42},[39,36523,31447],{"class":49},[39,36525,32877],{"class":45},[39,36527,36528,36530],{"class":41,"line":74},[39,36529,31447],{"class":49},[39,36531,32884],{"class":45},[39,36533,36534,36536,36538,36540],{"class":41,"line":99},[39,36535,31447],{"class":49},[39,36537,32895],{"class":45},[39,36539,32438],{"class":49},[39,36541,32900],{"class":45},[39,36543,36544,36546],{"class":41,"line":106},[39,36545,31447],{"class":49},[39,36547,31450],{"class":45},[39,36549,36550,36552,36554,36556],{"class":41,"line":112},[39,36551,31792],{"class":49},[39,36553,32470],{"class":45},[39,36555,31447],{"class":49},[39,36557,32917],{"class":45},[39,36559,36560,36562,36564,36566],{"class":41,"line":118},[39,36561,31792],{"class":49},[39,36563,32423],{"class":45},[39,36565,31447],{"class":49},[39,36567,32428],{"class":45},[39,36569,36570,36572,36574,36576],{"class":41,"line":413},[39,36571,31792],{"class":49},[39,36573,32453],{"class":45},[39,36575,31447],{"class":49},[39,36577,32458],{"class":45},[39,36579,36580,36582,36584,36586],{"class":41,"line":419},[39,36581,31447],{"class":49},[39,36583,32470],{"class":45},[39,36585,32438],{"class":49},[39,36587,32475],{"class":45},[39,36589,36590,36592,36594,36596],{"class":41,"line":425},[39,36591,31447],{"class":49},[39,36593,32487],{"class":45},[39,36595,32438],{"class":49},[39,36597,32492],{"class":45},[39,36599,36600],{"class":41,"line":443},[39,36601,32962],{"class":102},[39,36603,36604,36606,36608,36610],{"class":41,"line":449},[39,36605,31792],{"class":49},[39,36607,32969],{"class":45},[39,36609,31447],{"class":49},[39,36611,36612],{"class":45}," AlexNet\n",[39,36614,36615,36617,36619,36621],{"class":41,"line":455},[39,36616,31792],{"class":49},[39,36618,31795],{"class":45},[39,36620,31447],{"class":49},[39,36622,31800],{"class":45},[39,36624,36625],{"class":41,"line":461},[39,36626,3458],{"emptyLinePlaceholder":1145},[39,36628,36629],{"class":41,"line":475},[39,36630,3458],{"emptyLinePlaceholder":1145},[39,36632,36633],{"class":41,"line":665},[39,36634,32997],{"class":102},[39,36636,36637,36639,36641],{"class":41,"line":671},[39,36638,33002],{"class":49},[39,36640,33005],{"class":3021},[39,36642,33008],{"class":45},[39,36644,36645,36647,36649,36651,36653],{"class":41,"line":684},[39,36646,33013],{"class":45},[39,36648,50],{"class":49},[39,36650,32510],{"class":45},[39,36652,32518],{"class":1319},[39,36654,32521],{"class":45},[39,36656,36657,36659,36661,36663],{"class":41,"line":2732},[39,36658,33026],{"class":254},[39,36660,50],{"class":49},[39,36662,32531],{"class":56},[39,36664,32521],{"class":45},[39,36666,36667,36669,36671,36673,36675,36677,36679],{"class":41,"line":2737},[39,36668,33037],{"class":254},[39,36670,50],{"class":49},[39,36672,32548],{"class":45},[39,36674,32551],{"class":254},[39,36676,50],{"class":49},[39,36678,36504],{"class":56},[39,36680,32559],{"class":45},[39,36682,36683,36685,36687,36689],{"class":41,"line":2751},[39,36684,33054],{"class":254},[39,36686,50],{"class":49},[39,36688,32531],{"class":56},[39,36690,209],{"class":45},[39,36692,36693,36695,36697,36699,36701,36703,36705,36707,36709,36711,36713,36715,36717,36719,36721],{"class":41,"line":2756},[39,36694,33065],{"class":45},[39,36696,50],{"class":49},[39,36698,33070],{"class":45},[39,36700,33073],{"class":56},[39,36702,1221],{"class":45},[39,36704,33078],{"class":56},[39,36706,1657],{"class":49},[39,36708,8414],{"class":56},[39,36710,33085],{"class":45},[39,36712,33073],{"class":56},[39,36714,1221],{"class":45},[39,36716,33092],{"class":56},[39,36718,1657],{"class":49},[39,36720,8414],{"class":56},[39,36722,33099],{"class":45},[39,36724,36725,36727,36729,36731,36733,36735],{"class":41,"line":2785},[39,36726,33104],{"class":45},[39,36728,50],{"class":49},[39,36730,33109],{"class":45},[39,36732,32592],{"class":254},[39,36734,50],{"class":49},[39,36736,32597],{"class":45},[39,36738,36739,36741,36743,36745],{"class":41,"line":2790},[39,36740,33120],{"class":254},[39,36742,50],{"class":49},[39,36744,33125],{"class":56},[39,36746,32521],{"class":45},[39,36748,36749,36751,36753,36755],{"class":41,"line":2807},[39,36750,33132],{"class":254},[39,36752,50],{"class":49},[39,36754,32531],{"class":56},[39,36756,32521],{"class":45},[39,36758,36759],{"class":41,"line":2812},[39,36760,33143],{"class":102},[39,36762,36763,36765,36767,36769],{"class":41,"line":2817},[39,36764,33148],{"class":254},[39,36766,50],{"class":49},[39,36768,1598],{"class":56},[39,36770,209],{"class":45},[39,36772,36773,36775,36777,36779,36781,36783],{"class":41,"line":2822},[39,36774,33159],{"class":45},[39,36776,50],{"class":49},[39,36778,32589],{"class":45},[39,36780,32592],{"class":254},[39,36782,50],{"class":49},[39,36784,33170],{"class":45},[39,36786,36787,36789,36791,36793],{"class":41,"line":2836},[39,36788,33175],{"class":254},[39,36790,50],{"class":49},[39,36792,33125],{"class":56},[39,36794,32521],{"class":45},[39,36796,36797,36799,36801,36803],{"class":41,"line":2841},[39,36798,33186],{"class":254},[39,36800,50],{"class":49},[39,36802,32531],{"class":56},[39,36804,32521],{"class":45},[39,36806,36807,36809,36811,36813],{"class":41,"line":3635},[39,36808,33197],{"class":254},[39,36810,50],{"class":49},[39,36812,1598],{"class":56},[39,36814,209],{"class":45},[39,36816,36817,36819],{"class":41,"line":3649},[39,36818,5148],{"class":49},[39,36820,33210],{"class":45},[39,36822,36823],{"class":41,"line":3657},[39,36824,3458],{"emptyLinePlaceholder":1145},[39,36826,36827],{"class":41,"line":3662},[39,36828,33219],{"class":102},[39,36830,36831],{"class":41,"line":3668},[39,36832,33224],{"class":102},[39,36834,36835],{"class":41,"line":3674},[39,36836,3458],{"emptyLinePlaceholder":1145},[39,36838,36839],{"class":41,"line":3679},[39,36840,33233],{"class":102},[39,36842,36843,36845,36847],{"class":41,"line":9004},[39,36844,33002],{"class":49},[39,36846,33240],{"class":3021},[39,36848,33243],{"class":45},[39,36850,36851,36853,36855,36857,36859,36861,36863,36865,36867],{"class":41,"line":9028},[39,36852,32292],{"class":45},[39,36854,50],{"class":49},[39,36856,31506],{"class":45},[39,36858,32299],{"class":1319},[39,36860,2762],{"class":49},[39,36862,32304],{"class":45},[39,36864,2759],{"class":49},[39,36866,33262],{"class":1319},[39,36868,209],{"class":45},[39,36870,36871],{"class":41,"line":9033},[39,36872,3458],{"emptyLinePlaceholder":1145},[39,36874,36875],{"class":41,"line":9039},[39,36876,3458],{"emptyLinePlaceholder":1145},[39,36878,36879],{"class":41,"line":9066},[39,36880,33277],{"class":102},[39,36882,36883],{"class":41,"line":9071},[39,36884,33282],{"class":102},[39,36886,36887],{"class":41,"line":9077},[39,36888,33287],{"class":102},[39,36890,36891,36893,36895,36897,36899,36901,36903],{"class":41,"line":9089},[39,36892,33292],{"class":45},[39,36894,50],{"class":49},[39,36896,33297],{"class":45},[39,36898,33300],{"class":254},[39,36900,50],{"class":49},[39,36902,33305],{"class":56},[39,36904,209],{"class":45},[39,36906,36907],{"class":41,"line":9101},[39,36908,3458],{"emptyLinePlaceholder":1145},[39,36910,36911],{"class":41,"line":9113},[39,36912,33316],{"class":102},[39,36914,36915,36917,36919],{"class":41,"line":10772},[39,36916,33321],{"class":45},[39,36918,50],{"class":49},[39,36920,33326],{"class":45},[39,36922,36923],{"class":41,"line":10797},[39,36924,3458],{"emptyLinePlaceholder":1145},[39,36926,36927],{"class":41,"line":10820},[39,36928,33335],{"class":102},[39,36930,36931,36933,36935],{"class":41,"line":10844},[39,36932,32344],{"class":45},[39,36934,50],{"class":49},[39,36936,33344],{"class":45},[39,36938,36939],{"class":41,"line":10849},[39,36940,33349],{"class":102},[39,36942,36943],{"class":41,"line":10854},[39,36944,33354],{"class":102},[39,36946,36947],{"class":41,"line":10859},[39,36948,33359],{"class":102},[39,36950,36951,36953,36955],{"class":41,"line":10868},[39,36952,33364],{"class":45},[39,36954,50],{"class":49},[39,36956,33369],{"class":45},[39,36958,36959],{"class":41,"line":10873},[39,36960,3458],{"emptyLinePlaceholder":1145},[39,36962,36963],{"class":41,"line":10879},[39,36964,3458],{"emptyLinePlaceholder":1145},[39,36966,36967],{"class":41,"line":10900},[39,36968,33382],{"class":102},[39,36970,36971],{"class":41,"line":10906},[39,36972,33387],{"class":102},[39,36974,36975,36977,36979],{"class":41,"line":10920},[39,36976,33392],{"class":45},[39,36978,50],{"class":49},[39,36980,33397],{"class":56},[39,36982,36983],{"class":41,"line":10926},[39,36984,33402],{"class":102},[39,36986,36987,36989,36991],{"class":41,"line":10953},[39,36988,33407],{"class":45},[39,36990,50],{"class":49},[39,36992,33412],{"class":45},[39,36994,36995],{"class":41,"line":10962},[39,36996,33417],{"class":102},[39,36998,36999,37001,37003],{"class":41,"line":10968},[39,37000,33422],{"class":45},[39,37002,50],{"class":49},[39,37004,33412],{"class":45},[39,37006,37007],{"class":41,"line":10976},[39,37008,33431],{"class":102},[39,37010,37011,37013,37015],{"class":41,"line":10981},[39,37012,33436],{"class":45},[39,37014,50],{"class":49},[39,37016,33412],{"class":45},[39,37018,37019],{"class":41,"line":17660},[39,37020,33445],{"class":102},[39,37022,37023,37025,37027],{"class":41,"line":17666},[39,37024,33450],{"class":45},[39,37026,50],{"class":49},[39,37028,33412],{"class":45},[39,37030,37031],{"class":41,"line":17689},[39,37032,3458],{"emptyLinePlaceholder":1145},[39,37034,37035],{"class":41,"line":17695},[39,37036,33463],{"class":102},[39,37038,37039,37041,37043],{"class":41,"line":17718},[39,37040,33468],{"class":45},[39,37042,50],{"class":49},[39,37044,33473],{"class":45},[39,37046,37047],{"class":41,"line":17732},[39,37048,3458],{"emptyLinePlaceholder":1145},[39,37050,37051],{"class":41,"line":17752},[39,37052,3458],{"emptyLinePlaceholder":1145},[39,37054,37055],{"class":41,"line":17758},[39,37056,33486],{"class":102},[39,37058,37059,37061,37063,37065,37067],{"class":41,"line":17769},[39,37060,4259],{"class":49},[39,37062,33493],{"class":45},[39,37064,27100],{"class":49},[39,37066,33498],{"class":56},[39,37068,33501],{"class":45},[39,37070,37071,37073,37075,37077,37079,37081,37083,37085,37087,37089,37091],{"class":41,"line":17792},[39,37072,33506],{"class":56},[39,37074,1221],{"class":45},[39,37076,33511],{"class":1319},[39,37078,33514],{"class":56},[39,37080,1784],{"class":1319},[39,37082,33514],{"class":56},[39,37084,1462],{"class":1319},[39,37086,33523],{"class":45},[39,37088,1732],{"class":49},[39,37090,57],{"class":56},[39,37092,31552],{"class":45},[39,37094,37095,37097,37099,37101,37103,37105],{"class":41,"line":17814},[39,37096,33506],{"class":56},[39,37098,1221],{"class":45},[39,37100,33538],{"class":1319},[39,37102,1657],{"class":49},[39,37104,146],{"class":56},[39,37106,209],{"class":45},[39,37108,37109],{"class":41,"line":17819},[39,37110,3458],{"emptyLinePlaceholder":1145},[39,37112,37113],{"class":41,"line":17825},[39,37114,33553],{"class":102},[39,37116,37117],{"class":41,"line":17839},[39,37118,33558],{"class":102},[39,37120,37121,37123,37125],{"class":41,"line":17852},[39,37122,33563],{"class":45},[39,37124,50],{"class":49},[39,37126,33397],{"class":56},[39,37128,37129],{"class":41,"line":17857},[39,37130,33572],{"class":102},[39,37132,37133,37135,37137],{"class":41,"line":17871},[39,37134,33577],{"class":45},[39,37136,50],{"class":49},[39,37138,4143],{"class":56},[39,37140,37141],{"class":41,"line":17876},[39,37142,33586],{"class":102},[39,37144,37145,37147,37149],{"class":41,"line":17882},[39,37146,33591],{"class":45},[39,37148,50],{"class":49},[39,37150,33397],{"class":56},[39,37152,37153],{"class":41,"line":17887},[39,37154,33600],{"class":102},[39,37156,37157,37159,37161],{"class":41,"line":17901},[39,37158,33605],{"class":45},[39,37160,50],{"class":49},[39,37162,4143],{"class":56},[39,37164,37165],{"class":41,"line":17906},[39,37166,33614],{"class":102},[39,37168,37169,37171,37173],{"class":41,"line":17911},[39,37170,33619],{"class":45},[39,37172,50],{"class":49},[39,37174,4143],{"class":56},[39,37176,37177],{"class":41,"line":17925},[39,37178,33628],{"class":102},[39,37180,37181,37183,37185],{"class":41,"line":17937},[39,37182,33633],{"class":45},[39,37184,50],{"class":49},[39,37186,4143],{"class":56},[39,37188,37189],{"class":41,"line":17942},[39,37190,33642],{"class":102},[39,37192,37193,37195,37197,37199,37201],{"class":41,"line":17955},[39,37194,4461],{"class":49},[39,37196,32656],{"class":45},[39,37198,27100],{"class":49},[39,37200,32661],{"class":56},[39,37202,33655],{"class":45},[39,37204,37205],{"class":41,"line":17960},[39,37206,33660],{"class":102},[39,37208,37209,37211,37213],{"class":41,"line":17965},[39,37210,33665],{"class":45},[39,37212,50],{"class":49},[39,37214,33670],{"class":45},[39,37216,37217],{"class":41,"line":17970},[39,37218,33675],{"class":102},[39,37220,37221,37223,37225],{"class":41,"line":17983},[39,37222,33680],{"class":45},[39,37224,50],{"class":49},[39,37226,33685],{"class":45},[39,37228,37229],{"class":41,"line":17988},[39,37230,33691],{"class":102},[39,37232,37233],{"class":41,"line":33688},[39,37234,33697],{"class":45},[39,37236,37237],{"class":41,"line":33694},[39,37238,33703],{"class":102},[39,37240,37241],{"class":41,"line":33700},[39,37242,33709],{"class":102},[39,37244,37245,37247,37249],{"class":41,"line":33706},[39,37246,33715],{"class":45},[39,37248,50],{"class":49},[39,37250,33720],{"class":45},[39,37252,37253],{"class":41,"line":33712},[39,37254,33726],{"class":102},[39,37256,37257,37259,37261,37263,37265,37267,37269],{"class":41,"line":33723},[39,37258,33732],{"class":45},[39,37260,50],{"class":49},[39,37262,33737],{"class":45},[39,37264,33740],{"class":254},[39,37266,50],{"class":49},[39,37268,57],{"class":56},[39,37270,209],{"class":45},[39,37272,37273],{"class":41,"line":33729},[39,37274,33752],{"class":102},[39,37276,37277,37279,37281],{"class":41,"line":33749},[39,37278,33758],{"class":45},[39,37280,50],{"class":49},[39,37282,33763],{"class":45},[39,37284,37285],{"class":41,"line":33755},[39,37286,33769],{"class":102},[39,37288,37289],{"class":41,"line":33766},[39,37290,33775],{"class":45},[39,37292,37293],{"class":41,"line":33772},[39,37294,33781],{"class":102},[39,37296,37297],{"class":41,"line":33778},[39,37298,33787],{"class":45},[39,37300,37301],{"class":41,"line":33784},[39,37302,33793],{"class":102},[39,37304,37305],{"class":41,"line":33790},[39,37306,33799],{"class":45},[39,37308,37309],{"class":41,"line":33796},[39,37310,33805],{"class":102},[39,37312,37313,37315,37317,37319,37321,37323,37325],{"class":41,"line":33802},[39,37314,33811],{"class":45},[39,37316,10533],{"class":49},[39,37318,33816],{"class":45},[39,37320,1657],{"class":49},[39,37322,33821],{"class":45},[39,37324,260],{"class":56},[39,37326,209],{"class":45},[39,37328,37329],{"class":41,"line":33808},[39,37330,33831],{"class":102},[39,37332,37333,37335,37337,37339,37341],{"class":41,"line":33828},[39,37334,33837],{"class":45},[39,37336,10533],{"class":49},[39,37338,33842],{"class":45},[39,37340,4007],{"class":49},[39,37342,33847],{"class":45},[39,37344,37345],{"class":41,"line":33834},[39,37346,33853],{"class":102},[39,37348,37349,37351,37353,37355,37357],{"class":41,"line":33850},[39,37350,33859],{"class":45},[39,37352,10533],{"class":49},[39,37354,33821],{"class":45},[39,37356,260],{"class":56},[39,37358,209],{"class":45},[39,37360,37361],{"class":41,"line":33856},[39,37362,33873],{"class":102},[39,37364,37365,37367,37369,37371,37373],{"class":41,"line":33870},[39,37366,4461],{"class":49},[39,37368,33881],{"class":45},[39,37370,27100],{"class":49},[39,37372,32661],{"class":56},[39,37374,33888],{"class":45},[39,37376,37377],{"class":41,"line":33876},[39,37378,33894],{"class":102},[39,37380,37381,37383,37385],{"class":41,"line":33891},[39,37382,33665],{"class":45},[39,37384,50],{"class":49},[39,37386,33670],{"class":45},[39,37388,37389],{"class":41,"line":33897},[39,37390,33909],{"class":102},[39,37392,37393,37395,37397],{"class":41,"line":33906},[39,37394,33680],{"class":45},[39,37396,50],{"class":49},[39,37398,33685],{"class":45},[39,37400,37401],{"class":41,"line":33912},[39,37402,33924],{"class":102},[39,37404,37405],{"class":41,"line":33921},[39,37406,33930],{"class":45},[39,37408,37409],{"class":41,"line":33927},[39,37410,37411],{"class":102},"            # 验证时不计算梯度以节省内存\u002F计算\n",[39,37413,37414,37416],{"class":41,"line":33933},[39,37415,33936],{"class":49},[39,37417,33939],{"class":45},[39,37419,37420],{"class":41,"line":33942},[39,37421,33945],{"class":102},[39,37423,37424,37427,37429],{"class":41,"line":33948},[39,37425,37426],{"class":45},"                output",[39,37428,50],{"class":49},[39,37430,33720],{"class":45},[39,37432,37433],{"class":41,"line":33959},[39,37434,33962],{"class":102},[39,37436,37437,37440,37442,37444,37446,37448,37450],{"class":41,"line":33965},[39,37438,37439],{"class":45},"                pre_lab",[39,37441,50],{"class":49},[39,37443,33737],{"class":45},[39,37445,33740],{"class":254},[39,37447,50],{"class":49},[39,37449,57],{"class":56},[39,37451,209],{"class":45},[39,37453,37454],{"class":41,"line":33984},[39,37455,33987],{"class":102},[39,37457,37458,37461,37463],{"class":41,"line":33990},[39,37459,37460],{"class":45},"                val_batch_loss",[39,37462,50],{"class":49},[39,37464,33763],{"class":45},[39,37466,37467],{"class":41,"line":34001},[39,37468,34004],{"class":102},[39,37470,37471,37474,37476,37479,37481,37483,37485],{"class":41,"line":34007},[39,37472,37473],{"class":45},"                val_loss",[39,37475,10533],{"class":49},[39,37477,37478],{"class":45},"val_batch_loss.item()",[39,37480,1657],{"class":49},[39,37482,33821],{"class":45},[39,37484,260],{"class":56},[39,37486,209],{"class":45},[39,37488,37489,37492,37494,37496,37498],{"class":41,"line":34027},[39,37490,37491],{"class":45},"                val_corrects",[39,37493,10533],{"class":49},[39,37495,33842],{"class":45},[39,37497,4007],{"class":49},[39,37499,33847],{"class":45},[39,37501,37502],{"class":41,"line":34043},[39,37503,37504],{"class":102},"            # 当前用于验证的样本数量\n",[39,37506,37507,37510,37512,37514,37516],{"class":41,"line":34049},[39,37508,37509],{"class":45},"            val_num",[39,37511,10533],{"class":49},[39,37513,33821],{"class":45},[39,37515,260],{"class":56},[39,37517,209],{"class":45},[39,37519,37520],{"class":41,"line":34063},[39,37521,34066],{"class":102},[39,37523,37524],{"class":41,"line":34069},[39,37525,34072],{"class":102},[39,37527,37528,37530,37532],{"class":41,"line":34075},[39,37529,34078],{"class":45},[39,37531,1784],{"class":49},[39,37533,34083],{"class":45},[39,37535,37536],{"class":41,"line":34086},[39,37537,34089],{"class":102},[39,37539,37540],{"class":41,"line":34092},[39,37541,34095],{"class":102},[39,37543,37544,37546,37548],{"class":41,"line":34098},[39,37545,34101],{"class":45},[39,37547,1784],{"class":49},[39,37549,34083],{"class":45},[39,37551,37552],{"class":41,"line":34108},[39,37553,34111],{"class":102},[39,37555,37556,37558,37560],{"class":41,"line":34114},[39,37557,34117],{"class":45},[39,37559,1784],{"class":49},[39,37561,34122],{"class":45},[39,37563,37564],{"class":41,"line":34125},[39,37565,34128],{"class":102},[39,37567,37568,37570,37572],{"class":41,"line":34131},[39,37569,34134],{"class":45},[39,37571,1784],{"class":49},[39,37573,34122],{"class":45},[39,37575,37576],{"class":41,"line":34141},[39,37577,3458],{"emptyLinePlaceholder":1145},[39,37579,37580],{"class":41,"line":34146},[39,37581,34149],{"class":102},[39,37583,37584,37586,37588,37590,37592,37594,37596,37598,37600,37602,37604,37606,37608,37610,37612,37614,37616,37618,37620,37622],{"class":41,"line":34152},[39,37585,33506],{"class":56},[39,37587,1221],{"class":45},[39,37589,4650],{"class":1319},[39,37591,33514],{"class":56},[39,37593,34163],{"class":1319},[39,37595,2094],{"class":56},[39,37597,34168],{"class":49},[39,37599,2144],{"class":56},[39,37601,34173],{"class":1319},[39,37603,2094],{"class":56},[39,37605,34168],{"class":49},[39,37607,2144],{"class":56},[39,37609,4650],{"class":1319},[39,37611,34184],{"class":45},[39,37613,1732],{"class":49},[39,37615,57],{"class":56},[39,37617,34191],{"class":45},[39,37619,1732],{"class":49},[39,37621,57],{"class":56},[39,37623,34198],{"class":45},[39,37625,37626,37628,37630,37632,37634,37636,37638,37640,37642,37644,37646,37648,37650,37652,37654,37656,37658,37660,37662,37664],{"class":41,"line":34201},[39,37627,33506],{"class":56},[39,37629,1221],{"class":45},[39,37631,4650],{"class":1319},[39,37633,33514],{"class":56},[39,37635,34212],{"class":1319},[39,37637,2094],{"class":56},[39,37639,34168],{"class":49},[39,37641,2144],{"class":56},[39,37643,34221],{"class":1319},[39,37645,2094],{"class":56},[39,37647,34168],{"class":49},[39,37649,2144],{"class":56},[39,37651,4650],{"class":1319},[39,37653,34232],{"class":45},[39,37655,1732],{"class":49},[39,37657,57],{"class":56},[39,37659,34239],{"class":45},[39,37661,1732],{"class":49},[39,37663,57],{"class":56},[39,37665,34198],{"class":45},[39,37667,37668],{"class":41,"line":34248},[39,37669,3458],{"emptyLinePlaceholder":1145},[39,37671,37672],{"class":41,"line":34253},[39,37673,34256],{"class":102},[39,37675,37676,37678,37680,37682,37684,37686,37688],{"class":41,"line":34259},[39,37677,3555],{"class":49},[39,37679,34264],{"class":45},[39,37681,1732],{"class":49},[39,37683,57],{"class":56},[39,37685,2138],{"class":45},[39,37687,2158],{"class":49},[39,37689,34275],{"class":45},[39,37691,37692],{"class":41,"line":34278},[39,37693,34281],{"class":102},[39,37695,37696,37698,37700,37702,37704,37706,37708],{"class":41,"line":34284},[39,37697,34287],{"class":45},[39,37699,1259],{"class":56},[39,37701,50],{"class":49},[39,37703,34294],{"class":45},[39,37705,1732],{"class":49},[39,37707,57],{"class":56},[39,37709,34301],{"class":45},[39,37711,37712],{"class":41,"line":34304},[39,37713,34307],{"class":102},[39,37715,37716],{"class":41,"line":34310},[39,37717,34313],{"class":102},[39,37719,37720,37722,37724],{"class":41,"line":34316},[39,37721,34319],{"class":45},[39,37723,50],{"class":49},[39,37725,33369],{"class":45},[39,37727,37728],{"class":41,"line":34326},[39,37729,3458],{"emptyLinePlaceholder":1145},[39,37731,37732],{"class":41,"line":34331},[39,37733,34334],{"class":102},[39,37735,37736,37738,37740,37742,37744],{"class":41,"line":34337},[39,37737,34340],{"class":45},[39,37739,50],{"class":49},[39,37741,34345],{"class":45},[39,37743,1732],{"class":49},[39,37745,34350],{"class":45},[39,37747,37748,37750,37752,37754,37756,37758,37760,37762,37764,37766,37768,37770,37772,37774,37776,37778,37780,37782],{"class":41,"line":34353},[39,37749,33506],{"class":56},[39,37751,1221],{"class":45},[39,37753,34360],{"class":1319},[39,37755,2094],{"class":56},[39,37757,34365],{"class":49},[39,37759,2144],{"class":56},[39,37761,1744],{"class":1319},[39,37763,2094],{"class":56},[39,37765,34365],{"class":49},[39,37767,2144],{"class":56},[39,37769,34378],{"class":1319},[39,37771,34381],{"class":45},[39,37773,34384],{"class":49},[39,37775,2105],{"class":56},[39,37777,34389],{"class":45},[39,37779,1534],{"class":49},[39,37781,2105],{"class":56},[39,37783,31552],{"class":45},[39,37785,37786],{"class":41,"line":34398},[39,37787,37788],{"class":102},"    # 选择最优参数并保存\n",[39,37790,37791],{"class":41,"line":34404},[39,37792,37793],{"class":102},"    # 保存最佳模型权重字典\n",[39,37795,37796,37799,37801],{"class":41,"line":34410},[39,37797,37798],{"class":45},"    torch.save(best_model_wts,",[39,37800,34422],{"class":1319},[39,37802,209],{"class":45},[39,37804,37805],{"class":41,"line":34416},[39,37806,34442],{"class":102},[39,37808,37809,37811,37813,37815,37817,37819],{"class":41,"line":34427},[39,37810,34448],{"class":45},[39,37812,50],{"class":49},[39,37814,34453],{"class":45},[39,37816,34456],{"class":254},[39,37818,50],{"class":49},[39,37820,2611],{"class":45},[39,37822,37823,37825,37827,37829],{"class":41,"line":34433},[39,37824,34466],{"class":1319},[39,37826,2057],{"class":45},[39,37828,34471],{"class":56},[39,37830,34474],{"class":45},[39,37832,37833,37835],{"class":41,"line":34439},[39,37834,34480],{"class":1319},[39,37836,34483],{"class":45},[39,37838,37839,37841],{"class":41,"line":34445},[39,37840,34489],{"class":1319},[39,37842,34492],{"class":45},[39,37844,37845,37847],{"class":41,"line":34463},[39,37846,34498],{"class":1319},[39,37848,34501],{"class":45},[39,37850,37851,37853],{"class":41,"line":34477},[39,37852,34507],{"class":1319},[39,37854,34510],{"class":45},[39,37856,37857],{"class":41,"line":34486},[39,37858,34516],{"class":45},[39,37860,37861],{"class":41,"line":34495},[39,37862,34522],{"class":102},[39,37864,37865,37867],{"class":41,"line":34504},[39,37866,5148],{"class":49},[39,37868,34530],{"class":45},[39,37870,37871],{"class":41,"line":34513},[39,37872,3458],{"emptyLinePlaceholder":1145},[39,37874,37875],{"class":41,"line":34519},[39,37876,34541],{"class":102},[39,37878,37879,37881,37883],{"class":41,"line":34525},[39,37880,33002],{"class":49},[39,37882,34549],{"class":3021},[39,37884,34552],{"class":45},[39,37886,37887],{"class":41,"line":34533},[39,37888,34558],{"class":102},[39,37890,37891,37893,37895,37897,37899,37901,37903,37905],{"class":41,"line":34538},[39,37892,34564],{"class":45},[39,37894,32748],{"class":254},[39,37896,50],{"class":49},[39,37898,1221],{"class":45},[39,37900,1699],{"class":56},[39,37902,60],{"class":45},[39,37904,84],{"class":56},[39,37906,31552],{"class":45},[39,37908,37909],{"class":41,"line":34544},[39,37910,34584],{"class":102},[39,37912,37913],{"class":41,"line":34555},[39,37914,34590],{"class":102},[39,37916,37917],{"class":41,"line":34561},[39,37918,34596],{"class":102},[39,37920,37921,37923,37925,37927,37929,37931,37933],{"class":41,"line":34581},[39,37922,32782],{"class":45},[39,37924,57],{"class":56},[39,37926,60],{"class":45},[39,37928,63],{"class":56},[39,37930,60],{"class":45},[39,37932,57],{"class":56},[39,37934,209],{"class":45},[39,37936,37937],{"class":41,"line":34587},[39,37938,34619],{"class":102},[39,37940,37941],{"class":41,"line":34593},[39,37942,34625],{"class":102},[39,37944,37945],{"class":41,"line":34599},[39,37946,34631],{"class":102},[39,37948,37949],{"class":41,"line":34616},[39,37950,34637],{"class":102},[39,37952,37953],{"class":41,"line":34622},[39,37954,34643],{"class":102},[39,37956,37957,37959,37961,37963,37965,37967,37969,37971,37973],{"class":41,"line":34628},[39,37958,34649],{"class":45},[39,37960,34652],{"class":1319},[39,37962,34655],{"class":45},[39,37964,34658],{"class":1319},[39,37966,60],{"class":45},[39,37968,34663],{"class":254},[39,37970,50],{"class":49},[39,37972,34668],{"class":1319},[39,37974,209],{"class":45},[39,37976,37977,37979,37981,37983,37985,37987,37989,37991,37993],{"class":41,"line":34634},[39,37978,34649],{"class":45},[39,37980,34652],{"class":1319},[39,37982,34680],{"class":45},[39,37984,34683],{"class":1319},[39,37986,60],{"class":45},[39,37988,34663],{"class":254},[39,37990,50],{"class":49},[39,37992,34692],{"class":1319},[39,37994,209],{"class":45},[39,37996,37997],{"class":41,"line":34640},[39,37998,34700],{"class":102},[39,38000,38001],{"class":41,"line":34646},[39,38002,34706],{"class":45},[39,38004,38005],{"class":41,"line":34673},[39,38006,34712],{"class":102},[39,38008,38009,38011,38013],{"class":41,"line":34697},[39,38010,34718],{"class":45},[39,38012,34721],{"class":1319},[39,38014,209],{"class":45},[39,38016,38017,38019,38021],{"class":41,"line":34703},[39,38018,34729],{"class":45},[39,38020,34732],{"class":1319},[39,38022,209],{"class":45},[39,38024,38025],{"class":41,"line":34709},[39,38026,34740],{"class":102},[39,38028,38029,38031,38033,38035,38037,38039,38041],{"class":41,"line":34715},[39,38030,32782],{"class":45},[39,38032,57],{"class":56},[39,38034,60],{"class":45},[39,38036,63],{"class":56},[39,38038,60],{"class":45},[39,38040,63],{"class":56},[39,38042,209],{"class":45},[39,38044,38045,38047,38049,38051,38053,38055,38057,38059,38061],{"class":41,"line":34726},[39,38046,34649],{"class":45},[39,38048,34652],{"class":1319},[39,38050,34767],{"class":45},[39,38052,34658],{"class":1319},[39,38054,60],{"class":45},[39,38056,34663],{"class":254},[39,38058,50],{"class":49},[39,38060,34778],{"class":1319},[39,38062,209],{"class":45},[39,38064,38065,38067,38069,38071,38073,38075,38077,38079,38081],{"class":41,"line":34737},[39,38066,34649],{"class":45},[39,38068,34652],{"class":1319},[39,38070,34790],{"class":45},[39,38072,34683],{"class":1319},[39,38074,60],{"class":45},[39,38076,34663],{"class":254},[39,38078,50],{"class":49},[39,38080,34801],{"class":1319},[39,38082,209],{"class":45},[39,38084,38085],{"class":41,"line":34743},[39,38086,34809],{"class":102},[39,38088,38089],{"class":41,"line":34760},[39,38090,34706],{"class":45},[39,38092,38093,38095,38097],{"class":41,"line":34783},[39,38094,34718],{"class":45},[39,38096,34652],{"class":1319},[39,38098,209],{"class":45},[39,38100,38101,38103,38105],{"class":41,"line":34806},[39,38102,34729],{"class":45},[39,38104,34831],{"class":1319},[39,38106,209],{"class":45},[39,38108,38109],{"class":41,"line":34812},[39,38110,34839],{"class":45},[39,38112,38113],{"class":41,"line":34817},[39,38114,3458],{"emptyLinePlaceholder":1145},[39,38116,38117],{"class":41,"line":34826},[39,38118,34850],{"class":102},[39,38120,38121,38123,38125,38127,38129],{"class":41,"line":34836},[39,38122,2596],{"class":49},[39,38124,32275],{"class":56},[39,38126,4007],{"class":49},[39,38128,32280],{"class":1319},[39,38130,4797],{"class":45},[39,38132,38133],{"class":41,"line":34842},[39,38134,34869],{"class":102},[39,38136,38137,38140,38142],{"class":41,"line":34847},[39,38138,38139],{"class":45},"    AlexNet",[39,38141,50],{"class":49},[39,38143,38144],{"class":45},"AlexNet()\n",[39,38146,38147,38149,38151],{"class":41,"line":34853},[39,38148,34886],{"class":45},[39,38150,50],{"class":49},[39,38152,34891],{"class":45},[39,38154,38155,38157,38159,38162,38164,38166,38168],{"class":41,"line":34866},[39,38156,34448],{"class":45},[39,38158,50],{"class":49},[39,38160,38161],{"class":45},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[39,38163,34904],{"class":254},[39,38165,50],{"class":49},[39,38167,1898],{"class":56},[39,38169,209],{"class":45},[39,38171,38172],{"class":41,"line":34872},[39,38173,34916],{"class":45},[1171,38175,38176],{"start":99},[1174,38177,34929],{},[29,38179,38181],{"className":31,"code":38180,"language":33,"meta":34,"style":34},"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",[36,38182,38183,38189,38199,38209,38219,38223,38233,38243,38254,38258,38262,38266,38274,38290,38300,38316,38326,38340,38344,38354,38364,38374,38380,38384,38388,38396,38400,38416,38424,38428,38432,38440,38448,38452,38456,38460,38464,38470,38474,38484,38492,38500,38504,38508,38512,38520,38524,38540,38544,38548,38552,38564,38568,38580,38584,38588,38600,38604,38614,38618,38622,38634,38638,38646,38650,38654,38662,38666,38674,38678,38682,38686,38690,38694,38710,38718,38722,38726,38774,38780,38784,38794,38802,38810,38814,38818,38822,38826,38834,38838,38854,38858,38866,38874],{"__ignoreMap":34},[39,38184,38185,38187],{"class":41,"line":42},[39,38186,31447],{"class":49},[39,38188,31450],{"class":45},[39,38190,38191,38193,38195,38197],{"class":41,"line":74},[39,38192,31447],{"class":49},[39,38194,32470],{"class":45},[39,38196,32438],{"class":49},[39,38198,32475],{"class":45},[39,38200,38201,38203,38205,38207],{"class":41,"line":99},[39,38202,31792],{"class":49},[39,38204,34957],{"class":45},[39,38206,31447],{"class":49},[39,38208,34962],{"class":45},[39,38210,38211,38213,38215,38217],{"class":41,"line":106},[39,38212,31792],{"class":49},[39,38214,32453],{"class":45},[39,38216,31447],{"class":49},[39,38218,32458],{"class":45},[39,38220,38221],{"class":41,"line":112},[39,38222,34977],{"class":102},[39,38224,38225,38227,38229,38231],{"class":41,"line":118},[39,38226,31792],{"class":49},[39,38228,32423],{"class":45},[39,38230,31447],{"class":49},[39,38232,32428],{"class":45},[39,38234,38235,38237,38239,38241],{"class":41,"line":413},[39,38236,31792],{"class":49},[39,38238,32969],{"class":45},[39,38240,31447],{"class":49},[39,38242,36612],{"class":45},[39,38244,38245,38247,38250,38252],{"class":41,"line":419},[39,38246,31792],{"class":49},[39,38248,38249],{"class":45}," 练习.AlexNet.model ",[39,38251,31447],{"class":49},[39,38253,36612],{"class":45},[39,38255,38256],{"class":41,"line":425},[39,38257,3458],{"emptyLinePlaceholder":1145},[39,38259,38260],{"class":41,"line":443},[39,38261,3458],{"emptyLinePlaceholder":1145},[39,38263,38264],{"class":41,"line":449},[39,38265,35006],{"class":102},[39,38267,38268,38270,38272],{"class":41,"line":455},[39,38269,33002],{"class":49},[39,38271,35013],{"class":3021},[39,38273,33008],{"class":45},[39,38275,38276,38278,38280,38282,38284,38286,38288],{"class":41,"line":461},[39,38277,35020],{"class":45},[39,38279,50],{"class":49},[39,38281,32510],{"class":45},[39,38283,32513],{"class":254},[39,38285,50],{"class":49},[39,38287,32518],{"class":1319},[39,38289,32521],{"class":45},[39,38291,38292,38294,38296,38298],{"class":41,"line":475},[39,38293,35037],{"class":254},[39,38295,50],{"class":49},[39,38297,35042],{"class":56},[39,38299,32521],{"class":45},[39,38301,38302,38304,38306,38308,38310,38312,38314],{"class":41,"line":665},[39,38303,35049],{"class":254},[39,38305,50],{"class":49},[39,38307,32548],{"class":45},[39,38309,32551],{"class":254},[39,38311,50],{"class":49},[39,38313,36504],{"class":56},[39,38315,32559],{"class":45},[39,38317,38318,38320,38322,38324],{"class":41,"line":671},[39,38319,35066],{"class":254},[39,38321,50],{"class":49},[39,38323,32531],{"class":56},[39,38325,209],{"class":45},[39,38327,38328,38330,38332,38334,38336,38338],{"class":41,"line":684},[39,38329,35077],{"class":45},[39,38331,50],{"class":49},[39,38333,32589],{"class":45},[39,38335,32592],{"class":254},[39,38337,50],{"class":49},[39,38339,35088],{"class":45},[39,38341,38342],{"class":41,"line":2732},[39,38343,35093],{"class":102},[39,38345,38346,38348,38350,38352],{"class":41,"line":2737},[39,38347,35098],{"class":254},[39,38349,50],{"class":49},[39,38351,57],{"class":56},[39,38353,32521],{"class":45},[39,38355,38356,38358,38360,38362],{"class":41,"line":2751},[39,38357,35109],{"class":254},[39,38359,50],{"class":49},[39,38361,32531],{"class":56},[39,38363,32521],{"class":45},[39,38365,38366,38368,38370,38372],{"class":41,"line":2756},[39,38367,35120],{"class":254},[39,38369,50],{"class":49},[39,38371,260],{"class":56},[39,38373,209],{"class":45},[39,38375,38376,38378],{"class":41,"line":2785},[39,38377,5148],{"class":49},[39,38379,35133],{"class":45},[39,38381,38382],{"class":41,"line":2790},[39,38383,3458],{"emptyLinePlaceholder":1145},[39,38385,38386],{"class":41,"line":2807},[39,38387,35142],{"class":102},[39,38389,38390,38392,38394],{"class":41,"line":2812},[39,38391,33002],{"class":49},[39,38393,35149],{"class":3021},[39,38395,35152],{"class":45},[39,38397,38398],{"class":41,"line":2817},[39,38399,35157],{"class":102},[39,38401,38402,38404,38406,38408,38410,38412,38414],{"class":41,"line":2822},[39,38403,32292],{"class":45},[39,38405,50],{"class":49},[39,38407,32299],{"class":1319},[39,38409,2762],{"class":49},[39,38411,32304],{"class":45},[39,38413,2759],{"class":49},[39,38415,35174],{"class":1319},[39,38417,38418,38420,38422],{"class":41,"line":2836},[39,38419,32344],{"class":45},[39,38421,50],{"class":49},[39,38423,33344],{"class":45},[39,38425,38426],{"class":41,"line":2841},[39,38427,3458],{"emptyLinePlaceholder":1145},[39,38429,38430],{"class":41,"line":3635},[39,38431,35191],{"class":102},[39,38433,38434,38436,38438],{"class":41,"line":3649},[39,38435,35196],{"class":45},[39,38437,50],{"class":49},[39,38439,33397],{"class":56},[39,38441,38442,38444,38446],{"class":41,"line":3657},[39,38443,35205],{"class":45},[39,38445,50],{"class":49},[39,38447,4143],{"class":56},[39,38449,38450],{"class":41,"line":3662},[39,38451,3458],{"emptyLinePlaceholder":1145},[39,38453,38454],{"class":41,"line":3668},[39,38455,35218],{"class":102},[39,38457,38458],{"class":41,"line":3674},[39,38459,35223],{"class":102},[39,38461,38462],{"class":41,"line":3679},[39,38463,35228],{"class":102},[39,38465,38466,38468],{"class":41,"line":9004},[39,38467,35233],{"class":49},[39,38469,33939],{"class":45},[39,38471,38472],{"class":41,"line":9028},[39,38473,35240],{"class":102},[39,38475,38476,38478,38480,38482],{"class":41,"line":9033},[39,38477,4461],{"class":49},[39,38479,35247],{"class":45},[39,38481,27100],{"class":49},[39,38483,35252],{"class":45},[39,38485,38486,38488,38490],{"class":41,"line":9039},[39,38487,35257],{"class":45},[39,38489,50],{"class":49},[39,38491,35262],{"class":45},[39,38493,38494,38496,38498],{"class":41,"line":9066},[39,38495,35267],{"class":45},[39,38497,50],{"class":49},[39,38499,35272],{"class":45},[39,38501,38502],{"class":41,"line":9071},[39,38503,35277],{"class":102},[39,38505,38506],{"class":41,"line":9077},[39,38507,33930],{"class":45},[39,38509,38510],{"class":41,"line":9089},[39,38511,35286],{"class":102},[39,38513,38514,38516,38518],{"class":41,"line":9101},[39,38515,33715],{"class":45},[39,38517,50],{"class":49},[39,38519,35295],{"class":45},[39,38521,38522],{"class":41,"line":9113},[39,38523,35300],{"class":102},[39,38525,38526,38528,38530,38532,38534,38536,38538],{"class":41,"line":10772},[39,38527,33732],{"class":45},[39,38529,50],{"class":49},[39,38531,33737],{"class":45},[39,38533,33740],{"class":254},[39,38535,50],{"class":49},[39,38537,57],{"class":56},[39,38539,209],{"class":45},[39,38541,38542],{"class":41,"line":10797},[39,38543,35321],{"class":102},[39,38545,38546],{"class":41,"line":10820},[39,38547,35326],{"class":102},[39,38549,38550],{"class":41,"line":10844},[39,38551,35331],{"class":102},[39,38553,38554,38556,38558,38560,38562],{"class":41,"line":10849},[39,38555,35336],{"class":45},[39,38557,10533],{"class":49},[39,38559,33842],{"class":45},[39,38561,4007],{"class":49},[39,38563,35345],{"class":45},[39,38565,38566],{"class":41,"line":10854},[39,38567,35350],{"class":102},[39,38569,38570,38572,38574,38576,38578],{"class":41,"line":10859},[39,38571,35355],{"class":45},[39,38573,10533],{"class":49},[39,38575,35360],{"class":45},[39,38577,260],{"class":56},[39,38579,209],{"class":45},[39,38581,38582],{"class":41,"line":10868},[39,38583,3458],{"emptyLinePlaceholder":1145},[39,38585,38586],{"class":41,"line":10873},[39,38587,35373],{"class":102},[39,38589,38590,38592,38594,38596,38598],{"class":41,"line":10879},[39,38591,35378],{"class":45},[39,38593,50],{"class":49},[39,38595,35383],{"class":45},[39,38597,1784],{"class":49},[39,38599,35388],{"class":45},[39,38601,38602],{"class":41,"line":10900},[39,38603,35393],{"class":102},[39,38605,38606,38608,38610,38612],{"class":41,"line":10906},[39,38607,33506],{"class":56},[39,38609,1221],{"class":45},[39,38611,35402],{"class":1319},[39,38613,35405],{"class":45},[39,38615,38616],{"class":41,"line":10920},[39,38617,3458],{"emptyLinePlaceholder":1145},[39,38619,38620],{"class":41,"line":10926},[39,38621,35414],{"class":102},[39,38623,38624,38626,38628,38630,38632],{"class":41,"line":10953},[39,38625,2596],{"class":49},[39,38627,32275],{"class":56},[39,38629,4007],{"class":49},[39,38631,32280],{"class":1319},[39,38633,4797],{"class":45},[39,38635,38636],{"class":41,"line":10962},[39,38637,35431],{"class":102},[39,38639,38640,38642,38644],{"class":41,"line":10968},[39,38641,32344],{"class":45},[39,38643,50],{"class":49},[39,38645,38144],{"class":45},[39,38647,38648],{"class":41,"line":10976},[39,38649,35444],{"class":102},[39,38651,38652],{"class":41,"line":10981},[39,38653,35449],{"class":102},[39,38655,38656,38658,38660],{"class":41,"line":17660},[39,38657,35454],{"class":45},[39,38659,35457],{"class":1319},[39,38661,31552],{"class":45},[39,38663,38664],{"class":41,"line":17666},[39,38665,35464],{"class":102},[39,38667,38668,38670,38672],{"class":41,"line":17689},[39,38669,35077],{"class":45},[39,38671,50],{"class":49},[39,38673,35473],{"class":45},[39,38675,38676],{"class":41,"line":17695},[39,38677,35478],{"class":102},[39,38679,38680],{"class":41,"line":17718},[39,38681,35483],{"class":45},[39,38683,38684],{"class":41,"line":17732},[39,38685,3458],{"emptyLinePlaceholder":1145},[39,38687,38688],{"class":41,"line":17752},[39,38689,35492],{"class":102},[39,38691,38692],{"class":41,"line":17758},[39,38693,35497],{"class":102},[39,38695,38696,38698,38700,38702,38704,38706,38708],{"class":41,"line":17769},[39,38697,32292],{"class":45},[39,38699,50],{"class":49},[39,38701,32299],{"class":1319},[39,38703,2762],{"class":49},[39,38705,32304],{"class":45},[39,38707,2759],{"class":49},[39,38709,35174],{"class":1319},[39,38711,38712,38714,38716],{"class":41,"line":17792},[39,38713,32344],{"class":45},[39,38715,50],{"class":49},[39,38717,33344],{"class":45},[39,38719,38720],{"class":41,"line":17814},[39,38721,35526],{"class":102},[39,38723,38724],{"class":41,"line":17819},[39,38725,35531],{"class":102},[39,38727,38728,38730,38732,38734,38736,38738,38740,38742,38744,38746,38748,38750,38752,38754,38756,38758,38760,38762,38764,38766,38768,38770,38772],{"class":41,"line":17825},[39,38729,35536],{"class":45},[39,38731,50],{"class":49},[39,38733,2088],{"class":45},[39,38735,35543],{"class":1319},[39,38737,60],{"class":45},[39,38739,35548],{"class":1319},[39,38741,60],{"class":45},[39,38743,35553],{"class":1319},[39,38745,60],{"class":45},[39,38747,35558],{"class":1319},[39,38749,60],{"class":45},[39,38751,35563],{"class":1319},[39,38753,60],{"class":45},[39,38755,35568],{"class":1319},[39,38757,60],{"class":45},[39,38759,35573],{"class":1319},[39,38761,60],{"class":45},[39,38763,35578],{"class":1319},[39,38765,60],{"class":45},[39,38767,35583],{"class":1319},[39,38769,60],{"class":45},[39,38771,35588],{"class":1319},[39,38773,34301],{"class":45},[39,38775,38776,38778],{"class":41,"line":17839},[39,38777,35233],{"class":49},[39,38779,33939],{"class":45},[39,38781,38782],{"class":41,"line":17852},[39,38783,35601],{"class":102},[39,38785,38786,38788,38790,38792],{"class":41,"line":17857},[39,38787,4461],{"class":49},[39,38789,35608],{"class":45},[39,38791,27100],{"class":49},[39,38793,35252],{"class":45},[39,38795,38796,38798,38800],{"class":41,"line":17871},[39,38797,33665],{"class":45},[39,38799,50],{"class":49},[39,38801,33670],{"class":45},[39,38803,38804,38806,38808],{"class":41,"line":17876},[39,38805,33680],{"class":45},[39,38807,50],{"class":49},[39,38809,33685],{"class":45},[39,38811,38812],{"class":41,"line":17882},[39,38813,3458],{"emptyLinePlaceholder":1145},[39,38815,38816],{"class":41,"line":17887},[39,38817,35637],{"class":102},[39,38819,38820],{"class":41,"line":17901},[39,38821,33930],{"class":45},[39,38823,38824],{"class":41,"line":17906},[39,38825,35646],{"class":102},[39,38827,38828,38830,38832],{"class":41,"line":17911},[39,38829,33715],{"class":45},[39,38831,50],{"class":49},[39,38833,33720],{"class":45},[39,38835,38836],{"class":41,"line":17925},[39,38837,35659],{"class":102},[39,38839,38840,38842,38844,38846,38848,38850,38852],{"class":41,"line":17937},[39,38841,33732],{"class":45},[39,38843,50],{"class":49},[39,38845,33737],{"class":45},[39,38847,33740],{"class":254},[39,38849,50],{"class":49},[39,38851,57],{"class":56},[39,38853,209],{"class":45},[39,38855,38856],{"class":41,"line":17942},[39,38857,35680],{"class":102},[39,38859,38860,38862,38864],{"class":41,"line":17955},[39,38861,35685],{"class":45},[39,38863,50],{"class":49},[39,38865,35690],{"class":45},[39,38867,38868,38870,38872],{"class":41,"line":17960},[39,38869,35695],{"class":45},[39,38871,50],{"class":49},[39,38873,35700],{"class":45},[39,38875,38876,38878,38880,38882,38884,38886,38888,38890],{"class":41,"line":17965},[39,38877,35705],{"class":56},[39,38879,1221],{"class":45},[39,38881,35710],{"class":1319},[39,38883,35713],{"class":45},[39,38885,35716],{"class":1319},[39,38887,60],{"class":45},[39,38889,35721],{"class":1319},[39,38891,35724],{"class":45},[1188,38893,38895],{"id":38894},"_22vgg","2.2.VGG",[23054,38897,38899],{"id":38898},"_221原理","2.2.1.原理",[19,38901,38902],{},[269,38903],{"alt":34,"src":38904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[19,38906,38907],{},[269,38908],{"alt":34,"src":38909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[19,38911,38912],{},[269,38913],{"alt":34,"src":38914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[19,38916,38917],{},"参数详细描述：",[19,38919,38920],{},[269,38921],{"alt":34,"src":38922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[19,38924,38925],{},[269,38926],{"alt":34,"src":38927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[19,38929,38930],{},[269,38931],{"alt":34,"src":38932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[19,38934,38935],{},[269,38936],{"alt":34,"src":38937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[19,38939,38940],{},[269,38941],{"alt":34,"src":38942},"\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",[23054,38944,38946],{"id":38945},"_222代码实现","2.2.2.代码实现",[1171,38948,38949],{},[1174,38950,38951],{},"网络搭建",[29,38953,38955],{"className":31,"code":38954,"language":33,"meta":34,"style":34},"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",[36,38956,38957,38963,38975,38985,38995,38999,39016,39024,39043,39048,39053,39065,39103,39108,39144,39148,39177,39182,39187,39198,39234,39238,39274,39278,39306,39310,39315,39326,39362,39366,39402,39406,39442,39446,39474,39478,39483,39494,39531,39535,39571,39575,39611,39615,39643,39647,39652,39663,39699,39703,39739,39743,39779,39783,39811,39815,39820,39831,39836,39841,39846,39867,39871,39883,39887,39899,39903,39907,39912,39917,39932,39937,39947,39952,39967,39972,39991,39996,40005,40010,40020,40025,40030,40044,40049,40063,40071,40075,40079,40087,40098,40109,40120,40131,40142,40153,40159,40163,40168,40181,40201,40207,40216],{"__ignoreMap":34},[39,38958,38959,38961],{"class":41,"line":42},[39,38960,31447],{"class":49},[39,38962,31450],{"class":45},[39,38964,38965,38967,38970,38972],{"class":41,"line":74},[39,38966,31792],{"class":49},[39,38968,38969],{"class":45}," sympy.core.sympify ",[39,38971,31447],{"class":49},[39,38973,38974],{"class":45}," kernS\n",[39,38976,38977,38979,38981,38983],{"class":41,"line":99},[39,38978,31792],{"class":49},[39,38980,31795],{"class":45},[39,38982,31447],{"class":49},[39,38984,31800],{"class":45},[39,38986,38987,38989,38991,38993],{"class":41,"line":106},[39,38988,31792],{"class":49},[39,38990,31812],{"class":45},[39,38992,31447],{"class":49},[39,38994,31817],{"class":45},[39,38996,38997],{"class":41,"line":112},[39,38998,3458],{"emptyLinePlaceholder":1145},[39,39000,39001,39003,39006,39008,39010,39012,39014],{"class":41,"line":118},[39,39002,15750],{"class":49},[39,39004,39005],{"class":3021}," VGG16",[39,39007,1221],{"class":45},[39,39009,31833],{"class":3021},[39,39011,1758],{"class":45},[39,39013,31838],{"class":3021},[39,39015,31841],{"class":45},[39,39017,39018,39020,39022],{"class":41,"line":413},[39,39019,31856],{"class":49},[39,39021,31859],{"class":56},[39,39023,31862],{"class":45},[39,39025,39026,39028,39030,39033,39035,39037,39039,39041],{"class":41,"line":419},[39,39027,31872],{"class":56},[39,39029,1221],{"class":45},[39,39031,39032],{"class":56},"VGG16",[39,39034,13491],{"class":45},[39,39036,31878],{"class":56},[39,39038,31881],{"class":45},[39,39040,31884],{"class":56},[39,39042,3034],{"class":45},[39,39044,39045],{"class":41,"line":425},[39,39046,39047],{"class":102},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[39,39049,39050],{"class":41,"line":443},[39,39051,39052],{"class":102},"        # 这里用的是灰度图\n",[39,39054,39055,39057,39060,39062],{"class":41,"line":449},[39,39056,31900],{"class":56},[39,39058,39059],{"class":45},".block1",[39,39061,50],{"class":49},[39,39063,39064],{"class":45},"nn.Sequential(\n",[39,39066,39067,39070,39072,39074,39076,39078,39080,39082,39084,39086,39088,39090,39092,39094,39096,39098,39100],{"class":41,"line":455},[39,39068,39069],{"class":45},"            nn.Conv2d(",[39,39071,31911],{"class":254},[39,39073,50],{"class":49},[39,39075,57],{"class":56},[39,39077,60],{"class":45},[39,39079,31920],{"class":254},[39,39081,50],{"class":49},[39,39083,1416],{"class":56},[39,39085,60],{"class":45},[39,39087,31929],{"class":254},[39,39089,50],{"class":49},[39,39091,68],{"class":56},[39,39093,60],{"class":45},[39,39095,31938],{"class":254},[39,39097,50],{"class":49},[39,39099,57],{"class":56},[39,39101,39102],{"class":45},"),\n",[39,39104,39105],{"class":41,"line":461},[39,39106,39107],{"class":45},"            nn.ReLU(),\n",[39,39109,39110,39112,39114,39116,39118,39120,39122,39124,39126,39128,39130,39132,39134,39136,39138,39140,39142],{"class":41,"line":475},[39,39111,39069],{"class":45},[39,39113,31911],{"class":254},[39,39115,50],{"class":49},[39,39117,1416],{"class":56},[39,39119,60],{"class":45},[39,39121,31920],{"class":254},[39,39123,50],{"class":49},[39,39125,1416],{"class":56},[39,39127,60],{"class":45},[39,39129,31929],{"class":254},[39,39131,50],{"class":49},[39,39133,68],{"class":56},[39,39135,60],{"class":45},[39,39137,31938],{"class":254},[39,39139,50],{"class":49},[39,39141,57],{"class":56},[39,39143,39102],{"class":45},[39,39145,39146],{"class":41,"line":665},[39,39147,39107],{"class":45},[39,39149,39150,39153,39155,39157,39159,39161,39163,39165,39167,39169,39171,39173,39175],{"class":41,"line":671},[39,39151,39152],{"class":45},"            nn.MaxPool2d(",[39,39154,31929],{"class":254},[39,39156,50],{"class":49},[39,39158,63],{"class":56},[39,39160,60],{"class":45},[39,39162,31984],{"class":254},[39,39164,50],{"class":49},[39,39166,63],{"class":56},[39,39168,60],{"class":45},[39,39170,31938],{"class":254},[39,39172,50],{"class":49},[39,39174,260],{"class":56},[39,39176,209],{"class":45},[39,39178,39179],{"class":41,"line":684},[39,39180,39181],{"class":45},"        )\n",[39,39183,39184],{"class":41,"line":2732},[39,39185,39186],{"class":102},"        # 第二层\n",[39,39188,39189,39191,39194,39196],{"class":41,"line":2737},[39,39190,31900],{"class":56},[39,39192,39193],{"class":45},".block2",[39,39195,50],{"class":49},[39,39197,39064],{"class":45},[39,39199,39200,39202,39204,39206,39208,39210,39212,39214,39216,39218,39220,39222,39224,39226,39228,39230,39232],{"class":41,"line":2751},[39,39201,39069],{"class":45},[39,39203,31911],{"class":254},[39,39205,50],{"class":49},[39,39207,1416],{"class":56},[39,39209,60],{"class":45},[39,39211,31920],{"class":254},[39,39213,50],{"class":49},[39,39215,33125],{"class":56},[39,39217,60],{"class":45},[39,39219,31929],{"class":254},[39,39221,50],{"class":49},[39,39223,68],{"class":56},[39,39225,60],{"class":45},[39,39227,31938],{"class":254},[39,39229,50],{"class":49},[39,39231,57],{"class":56},[39,39233,39102],{"class":45},[39,39235,39236],{"class":41,"line":2756},[39,39237,39107],{"class":45},[39,39239,39240,39242,39244,39246,39248,39250,39252,39254,39256,39258,39260,39262,39264,39266,39268,39270,39272],{"class":41,"line":2785},[39,39241,39069],{"class":45},[39,39243,31911],{"class":254},[39,39245,50],{"class":49},[39,39247,33125],{"class":56},[39,39249,60],{"class":45},[39,39251,31920],{"class":254},[39,39253,50],{"class":49},[39,39255,33125],{"class":56},[39,39257,60],{"class":45},[39,39259,31929],{"class":254},[39,39261,50],{"class":49},[39,39263,68],{"class":56},[39,39265,60],{"class":45},[39,39267,31938],{"class":254},[39,39269,50],{"class":49},[39,39271,57],{"class":56},[39,39273,39102],{"class":45},[39,39275,39276],{"class":41,"line":2790},[39,39277,39107],{"class":45},[39,39279,39280,39282,39284,39286,39288,39290,39292,39294,39296,39298,39300,39302,39304],{"class":41,"line":2807},[39,39281,39152],{"class":45},[39,39283,31929],{"class":254},[39,39285,50],{"class":49},[39,39287,63],{"class":56},[39,39289,60],{"class":45},[39,39291,31984],{"class":254},[39,39293,50],{"class":49},[39,39295,63],{"class":56},[39,39297,60],{"class":45},[39,39299,31938],{"class":254},[39,39301,50],{"class":49},[39,39303,260],{"class":56},[39,39305,209],{"class":45},[39,39307,39308],{"class":41,"line":2812},[39,39309,39181],{"class":45},[39,39311,39312],{"class":41,"line":2817},[39,39313,39314],{"class":102},"        # 第三层\n",[39,39316,39317,39319,39322,39324],{"class":41,"line":2822},[39,39318,31900],{"class":56},[39,39320,39321],{"class":45},".block3",[39,39323,50],{"class":49},[39,39325,39064],{"class":45},[39,39327,39328,39330,39332,39334,39336,39338,39340,39342,39344,39346,39348,39350,39352,39354,39356,39358,39360],{"class":41,"line":2836},[39,39329,39069],{"class":45},[39,39331,31911],{"class":254},[39,39333,50],{"class":49},[39,39335,33125],{"class":56},[39,39337,60],{"class":45},[39,39339,31920],{"class":254},[39,39341,50],{"class":49},[39,39343,35925],{"class":56},[39,39345,60],{"class":45},[39,39347,31929],{"class":254},[39,39349,50],{"class":49},[39,39351,68],{"class":56},[39,39353,60],{"class":45},[39,39355,31938],{"class":254},[39,39357,50],{"class":49},[39,39359,57],{"class":56},[39,39361,39102],{"class":45},[39,39363,39364],{"class":41,"line":2841},[39,39365,39107],{"class":45},[39,39367,39368,39370,39372,39374,39376,39378,39380,39382,39384,39386,39388,39390,39392,39394,39396,39398,39400],{"class":41,"line":3635},[39,39369,39069],{"class":45},[39,39371,31911],{"class":254},[39,39373,50],{"class":49},[39,39375,35925],{"class":56},[39,39377,60],{"class":45},[39,39379,31920],{"class":254},[39,39381,50],{"class":49},[39,39383,35925],{"class":56},[39,39385,60],{"class":45},[39,39387,31929],{"class":254},[39,39389,50],{"class":49},[39,39391,68],{"class":56},[39,39393,60],{"class":45},[39,39395,31938],{"class":254},[39,39397,50],{"class":49},[39,39399,57],{"class":56},[39,39401,39102],{"class":45},[39,39403,39404],{"class":41,"line":3649},[39,39405,39107],{"class":45},[39,39407,39408,39410,39412,39414,39416,39418,39420,39422,39424,39426,39428,39430,39432,39434,39436,39438,39440],{"class":41,"line":3657},[39,39409,39069],{"class":45},[39,39411,31911],{"class":254},[39,39413,50],{"class":49},[39,39415,35925],{"class":56},[39,39417,60],{"class":45},[39,39419,31920],{"class":254},[39,39421,50],{"class":49},[39,39423,35925],{"class":56},[39,39425,60],{"class":45},[39,39427,31929],{"class":254},[39,39429,50],{"class":49},[39,39431,68],{"class":56},[39,39433,60],{"class":45},[39,39435,31938],{"class":254},[39,39437,50],{"class":49},[39,39439,57],{"class":56},[39,39441,39102],{"class":45},[39,39443,39444],{"class":41,"line":3662},[39,39445,39107],{"class":45},[39,39447,39448,39450,39452,39454,39456,39458,39460,39462,39464,39466,39468,39470,39472],{"class":41,"line":3668},[39,39449,39152],{"class":45},[39,39451,31929],{"class":254},[39,39453,50],{"class":49},[39,39455,63],{"class":56},[39,39457,60],{"class":45},[39,39459,31984],{"class":254},[39,39461,50],{"class":49},[39,39463,63],{"class":56},[39,39465,60],{"class":45},[39,39467,31938],{"class":254},[39,39469,50],{"class":49},[39,39471,260],{"class":56},[39,39473,209],{"class":45},[39,39475,39476],{"class":41,"line":3674},[39,39477,39181],{"class":45},[39,39479,39480],{"class":41,"line":3679},[39,39481,39482],{"class":102},"        # 第四层\n",[39,39484,39485,39487,39490,39492],{"class":41,"line":9004},[39,39486,31900],{"class":56},[39,39488,39489],{"class":45},".block4",[39,39491,50],{"class":49},[39,39493,39064],{"class":45},[39,39495,39496,39498,39500,39502,39504,39506,39508,39510,39513,39515,39517,39519,39521,39523,39525,39527,39529],{"class":41,"line":9028},[39,39497,39069],{"class":45},[39,39499,31911],{"class":254},[39,39501,50],{"class":49},[39,39503,35925],{"class":56},[39,39505,60],{"class":45},[39,39507,31920],{"class":254},[39,39509,50],{"class":49},[39,39511,39512],{"class":56},"512",[39,39514,60],{"class":45},[39,39516,31929],{"class":254},[39,39518,50],{"class":49},[39,39520,68],{"class":56},[39,39522,60],{"class":45},[39,39524,31938],{"class":254},[39,39526,50],{"class":49},[39,39528,57],{"class":56},[39,39530,39102],{"class":45},[39,39532,39533],{"class":41,"line":9033},[39,39534,39107],{"class":45},[39,39536,39537,39539,39541,39543,39545,39547,39549,39551,39553,39555,39557,39559,39561,39563,39565,39567,39569],{"class":41,"line":9039},[39,39538,39069],{"class":45},[39,39540,31911],{"class":254},[39,39542,50],{"class":49},[39,39544,39512],{"class":56},[39,39546,60],{"class":45},[39,39548,31920],{"class":254},[39,39550,50],{"class":49},[39,39552,39512],{"class":56},[39,39554,60],{"class":45},[39,39556,31929],{"class":254},[39,39558,50],{"class":49},[39,39560,68],{"class":56},[39,39562,60],{"class":45},[39,39564,31938],{"class":254},[39,39566,50],{"class":49},[39,39568,57],{"class":56},[39,39570,39102],{"class":45},[39,39572,39573],{"class":41,"line":9066},[39,39574,39107],{"class":45},[39,39576,39577,39579,39581,39583,39585,39587,39589,39591,39593,39595,39597,39599,39601,39603,39605,39607,39609],{"class":41,"line":9071},[39,39578,39069],{"class":45},[39,39580,31911],{"class":254},[39,39582,50],{"class":49},[39,39584,39512],{"class":56},[39,39586,60],{"class":45},[39,39588,31920],{"class":254},[39,39590,50],{"class":49},[39,39592,39512],{"class":56},[39,39594,60],{"class":45},[39,39596,31929],{"class":254},[39,39598,50],{"class":49},[39,39600,68],{"class":56},[39,39602,60],{"class":45},[39,39604,31938],{"class":254},[39,39606,50],{"class":49},[39,39608,57],{"class":56},[39,39610,39102],{"class":45},[39,39612,39613],{"class":41,"line":9077},[39,39614,39107],{"class":45},[39,39616,39617,39619,39621,39623,39625,39627,39629,39631,39633,39635,39637,39639,39641],{"class":41,"line":9089},[39,39618,39152],{"class":45},[39,39620,31929],{"class":254},[39,39622,50],{"class":49},[39,39624,63],{"class":56},[39,39626,60],{"class":45},[39,39628,31984],{"class":254},[39,39630,50],{"class":49},[39,39632,63],{"class":56},[39,39634,60],{"class":45},[39,39636,31938],{"class":254},[39,39638,50],{"class":49},[39,39640,260],{"class":56},[39,39642,209],{"class":45},[39,39644,39645],{"class":41,"line":9101},[39,39646,39181],{"class":45},[39,39648,39649],{"class":41,"line":9113},[39,39650,39651],{"class":102},"        # 第五层\n",[39,39653,39654,39656,39659,39661],{"class":41,"line":10772},[39,39655,31900],{"class":56},[39,39657,39658],{"class":45},".block5",[39,39660,50],{"class":49},[39,39662,39064],{"class":45},[39,39664,39665,39667,39669,39671,39673,39675,39677,39679,39681,39683,39685,39687,39689,39691,39693,39695,39697],{"class":41,"line":10797},[39,39666,39069],{"class":45},[39,39668,31911],{"class":254},[39,39670,50],{"class":49},[39,39672,39512],{"class":56},[39,39674,60],{"class":45},[39,39676,31920],{"class":254},[39,39678,50],{"class":49},[39,39680,39512],{"class":56},[39,39682,60],{"class":45},[39,39684,31929],{"class":254},[39,39686,50],{"class":49},[39,39688,68],{"class":56},[39,39690,60],{"class":45},[39,39692,31938],{"class":254},[39,39694,50],{"class":49},[39,39696,57],{"class":56},[39,39698,39102],{"class":45},[39,39700,39701],{"class":41,"line":10820},[39,39702,39107],{"class":45},[39,39704,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729,39731,39733,39735,39737],{"class":41,"line":10844},[39,39706,39069],{"class":45},[39,39708,31911],{"class":254},[39,39710,50],{"class":49},[39,39712,39512],{"class":56},[39,39714,60],{"class":45},[39,39716,31920],{"class":254},[39,39718,50],{"class":49},[39,39720,39512],{"class":56},[39,39722,60],{"class":45},[39,39724,31929],{"class":254},[39,39726,50],{"class":49},[39,39728,68],{"class":56},[39,39730,60],{"class":45},[39,39732,31938],{"class":254},[39,39734,50],{"class":49},[39,39736,57],{"class":56},[39,39738,39102],{"class":45},[39,39740,39741],{"class":41,"line":10849},[39,39742,39107],{"class":45},[39,39744,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765,39767,39769,39771,39773,39775,39777],{"class":41,"line":10854},[39,39746,39069],{"class":45},[39,39748,31911],{"class":254},[39,39750,50],{"class":49},[39,39752,39512],{"class":56},[39,39754,60],{"class":45},[39,39756,31920],{"class":254},[39,39758,50],{"class":49},[39,39760,39512],{"class":56},[39,39762,60],{"class":45},[39,39764,31929],{"class":254},[39,39766,50],{"class":49},[39,39768,68],{"class":56},[39,39770,60],{"class":45},[39,39772,31938],{"class":254},[39,39774,50],{"class":49},[39,39776,57],{"class":56},[39,39778,39102],{"class":45},[39,39780,39781],{"class":41,"line":10859},[39,39782,39107],{"class":45},[39,39784,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809],{"class":41,"line":10868},[39,39786,39152],{"class":45},[39,39788,31929],{"class":254},[39,39790,50],{"class":49},[39,39792,63],{"class":56},[39,39794,60],{"class":45},[39,39796,31984],{"class":254},[39,39798,50],{"class":49},[39,39800,63],{"class":56},[39,39802,60],{"class":45},[39,39804,31938],{"class":254},[39,39806,50],{"class":49},[39,39808,260],{"class":56},[39,39810,209],{"class":45},[39,39812,39813],{"class":41,"line":10873},[39,39814,39181],{"class":45},[39,39816,39817],{"class":41,"line":10879},[39,39818,39819],{"class":102},"        # 全连接层\n",[39,39821,39822,39824,39827,39829],{"class":41,"line":10900},[39,39823,31900],{"class":56},[39,39825,39826],{"class":45},".block6",[39,39828,50],{"class":49},[39,39830,39064],{"class":45},[39,39832,39833],{"class":41,"line":10906},[39,39834,39835],{"class":102},"            # 平展操作\n",[39,39837,39838],{"class":41,"line":10920},[39,39839,39840],{"class":102},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[39,39842,39843],{"class":41,"line":10926},[39,39844,39845],{"class":45},"            nn.Flatten(),\n",[39,39847,39848,39851,39853,39855,39857,39859,39861,39863,39865],{"class":41,"line":10953},[39,39849,39850],{"class":45},"            nn.Linear(",[39,39852,1573],{"class":56},[39,39854,1657],{"class":49},[39,39856,1573],{"class":56},[39,39858,1657],{"class":49},[39,39860,39512],{"class":56},[39,39862,60],{"class":45},[39,39864,35925],{"class":56},[39,39866,39102],{"class":45},[39,39868,39869],{"class":41,"line":10962},[39,39870,39107],{"class":45},[39,39872,39873,39875,39877,39879,39881],{"class":41,"line":10968},[39,39874,39850],{"class":45},[39,39876,35925],{"class":56},[39,39878,60],{"class":45},[39,39880,33125],{"class":56},[39,39882,39102],{"class":45},[39,39884,39885],{"class":41,"line":10976},[39,39886,39107],{"class":45},[39,39888,39889,39891,39893,39895,39897],{"class":41,"line":10981},[39,39890,39850],{"class":45},[39,39892,33125],{"class":56},[39,39894,60],{"class":45},[39,39896,146],{"class":56},[39,39898,209],{"class":45},[39,39900,39901],{"class":41,"line":17660},[39,39902,39181],{"class":45},[39,39904,39905],{"class":41,"line":17666},[39,39906,3458],{"emptyLinePlaceholder":1145},[39,39908,39909],{"class":41,"line":17689},[39,39910,39911],{"class":102},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[39,39913,39914],{"class":41,"line":17695},[39,39915,39916],{"class":102},"        # 循环遍历模型\n",[39,39918,39919,39921,39924,39926,39929],{"class":41,"line":17718},[39,39920,4461],{"class":49},[39,39922,39923],{"class":45}," m ",[39,39925,27100],{"class":49},[39,39927,39928],{"class":56}," self",[39,39930,39931],{"class":45},".modules():\n",[39,39933,39934],{"class":41,"line":17732},[39,39935,39936],{"class":102},"            # print(m)\n",[39,39938,39939,39941,39944],{"class":41,"line":17752},[39,39940,5700],{"class":49},[39,39942,39943],{"class":56}," isinstance",[39,39945,39946],{"class":45},"(m,nn.Conv2d):\n",[39,39948,39949],{"class":41,"line":17758},[39,39950,39951],{"class":102},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[39,39953,39954,39957,39960,39962,39965],{"class":41,"line":17769},[39,39955,39956],{"class":45},"                nn.init.kaiming_normal_(m.weight,",[39,39958,39959],{"class":254},"nonlinearity",[39,39961,50],{"class":49},[39,39963,39964],{"class":1319},"'relu'",[39,39966,209],{"class":45},[39,39968,39969],{"class":41,"line":17792},[39,39970,39971],{"class":102},"                # 判断b参数是否存在\n",[39,39973,39974,39977,39980,39983,39986,39989],{"class":41,"line":17814},[39,39975,39976],{"class":49},"                if",[39,39978,39979],{"class":45}," m.bias ",[39,39981,39982],{"class":49},"is",[39,39984,39985],{"class":49}," not",[39,39987,39988],{"class":56}," None",[39,39990,4797],{"class":45},[39,39992,39993],{"class":41,"line":17819},[39,39994,39995],{"class":102},"                    # 如果参数不存在的化初始化b=0\n",[39,39997,39998,40001,40003],{"class":41,"line":17825},[39,39999,40000],{"class":45},"                    nn.init.constant_(m.bias,",[39,40002,260],{"class":56},[39,40004,209],{"class":45},[39,40006,40007],{"class":41,"line":17839},[39,40008,40009],{"class":102},"            # 全连接层初始化\n",[39,40011,40012,40015,40017],{"class":41,"line":17852},[39,40013,40014],{"class":49},"            elif",[39,40016,39943],{"class":56},[39,40018,40019],{"class":45},"(m,nn.Linear):\n",[39,40021,40022],{"class":41,"line":17857},[39,40023,40024],{"class":102},"                # 这个初始化方法是利用的是正太分布的方式\n",[39,40026,40027],{"class":41,"line":17871},[39,40028,40029],{"class":102},"                # 均值为0，方差为0.01\n",[39,40031,40032,40035,40037,40039,40042],{"class":41,"line":17876},[39,40033,40034],{"class":45},"                nn.init.normal_(m.weight,",[39,40036,260],{"class":56},[39,40038,60],{"class":45},[39,40040,40041],{"class":56},"0.01",[39,40043,209],{"class":45},[39,40045,40046],{"class":41,"line":17882},[39,40047,40048],{"class":102},"                # 初始化b参数\n",[39,40050,40051,40053,40055,40057,40059,40061],{"class":41,"line":17887},[39,40052,39976],{"class":49},[39,40054,39979],{"class":45},[39,40056,39982],{"class":49},[39,40058,39985],{"class":49},[39,40060,39988],{"class":56},[39,40062,4797],{"class":45},[39,40064,40065,40067,40069],{"class":41,"line":17901},[39,40066,40000],{"class":45},[39,40068,260],{"class":56},[39,40070,209],{"class":45},[39,40072,40073],{"class":41,"line":17906},[39,40074,3458],{"emptyLinePlaceholder":1145},[39,40076,40077],{"class":41,"line":17911},[39,40078,36220],{"class":102},[39,40080,40081,40083,40085],{"class":41,"line":17925},[39,40082,31856],{"class":49},[39,40084,32148],{"class":3021},[39,40086,32151],{"class":45},[39,40088,40089,40091,40093,40095],{"class":41,"line":17937},[39,40090,32156],{"class":45},[39,40092,50],{"class":49},[39,40094,31878],{"class":56},[39,40096,40097],{"class":45},".block1(x)\n",[39,40099,40100,40102,40104,40106],{"class":41,"line":17942},[39,40101,32156],{"class":45},[39,40103,50],{"class":49},[39,40105,31878],{"class":56},[39,40107,40108],{"class":45},".block2(x)\n",[39,40110,40111,40113,40115,40117],{"class":41,"line":17955},[39,40112,32156],{"class":45},[39,40114,50],{"class":49},[39,40116,31878],{"class":56},[39,40118,40119],{"class":45},".block3(x)\n",[39,40121,40122,40124,40126,40128],{"class":41,"line":17960},[39,40123,32156],{"class":45},[39,40125,50],{"class":49},[39,40127,31878],{"class":56},[39,40129,40130],{"class":45},".block4(x)\n",[39,40132,40133,40135,40137,40139],{"class":41,"line":17965},[39,40134,32156],{"class":45},[39,40136,50],{"class":49},[39,40138,31878],{"class":56},[39,40140,40141],{"class":45},".block5(x)\n",[39,40143,40144,40146,40148,40150],{"class":41,"line":17970},[39,40145,32156],{"class":45},[39,40147,50],{"class":49},[39,40149,31878],{"class":56},[39,40151,40152],{"class":45},".block6(x)\n",[39,40154,40155,40157],{"class":41,"line":17983},[39,40156,15808],{"class":49},[39,40158,32264],{"class":45},[39,40160,40161],{"class":41,"line":17988},[39,40162,3458],{"emptyLinePlaceholder":1145},[39,40164,40165],{"class":41,"line":33688},[39,40166,40167],{"class":102},"# 验证模型\n",[39,40169,40170,40172,40174,40176,40179],{"class":41,"line":33694},[39,40171,2596],{"class":49},[39,40173,32275],{"class":56},[39,40175,4007],{"class":49},[39,40177,40178],{"class":1319},"'__main__'",[39,40180,4797],{"class":45},[39,40182,40183,40185,40187,40189,40191,40193,40195,40197,40199],{"class":41,"line":33700},[39,40184,32292],{"class":45},[39,40186,50],{"class":49},[39,40188,31506],{"class":45},[39,40190,32299],{"class":1319},[39,40192,2762],{"class":49},[39,40194,32304],{"class":45},[39,40196,2759],{"class":49},[39,40198,31531],{"class":1319},[39,40200,209],{"class":45},[39,40202,40203,40205],{"class":41,"line":33706},[39,40204,32354],{"class":56},[39,40206,31540],{"class":45},[39,40208,40209,40211,40213],{"class":41,"line":33712},[39,40210,32344],{"class":45},[39,40212,50],{"class":49},[39,40214,40215],{"class":45},"VGG16().to(device)\n",[39,40217,40218,40220,40222,40224,40226,40228,40230,40232],{"class":41,"line":33723},[39,40219,32354],{"class":56},[39,40221,32357],{"class":45},[39,40223,57],{"class":56},[39,40225,60],{"class":45},[39,40227,32556],{"class":56},[39,40229,60],{"class":45},[39,40231,32556],{"class":56},[39,40233,32370],{"class":45},[1171,40235,40236],{"start":74},[1174,40237,40238],{},"训练代码",[19,40240,40241],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,40243,40244],{},"解决方式:",[19,40246,40247],{},"①权重初始化",[29,40249,40251],{"className":31,"code":40250,"language":33,"meta":34,"style":34},"# 权重初始化,保证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",[36,40252,40253,40258,40263,40275,40280,40288,40293,40306,40311,40325,40330,40339,40344,40353,40358,40363,40376,40381,40395],{"__ignoreMap":34},[39,40254,40255],{"class":41,"line":42},[39,40256,40257],{"class":102},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[39,40259,40260],{"class":41,"line":74},[39,40261,40262],{"class":102},"# 循环遍历模型\n",[39,40264,40265,40267,40269,40271,40273],{"class":41,"line":99},[39,40266,4083],{"class":49},[39,40268,39923],{"class":45},[39,40270,27100],{"class":49},[39,40272,39928],{"class":56},[39,40274,39931],{"class":45},[39,40276,40277],{"class":41,"line":106},[39,40278,40279],{"class":102},"    # print(m)\n",[39,40281,40282,40284,40286],{"class":41,"line":112},[39,40283,4159],{"class":49},[39,40285,39943],{"class":56},[39,40287,39946],{"class":45},[39,40289,40290],{"class":41,"line":118},[39,40291,40292],{"class":102},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[39,40294,40295,40298,40300,40302,40304],{"class":41,"line":413},[39,40296,40297],{"class":45},"        nn.init.kaiming_normal_(m.weight,",[39,40299,39959],{"class":254},[39,40301,50],{"class":49},[39,40303,39964],{"class":1319},[39,40305,209],{"class":45},[39,40307,40308],{"class":41,"line":419},[39,40309,40310],{"class":102},"        # 判断b参数是否存在\n",[39,40312,40313,40315,40317,40319,40321,40323],{"class":41,"line":425},[39,40314,3555],{"class":49},[39,40316,39979],{"class":45},[39,40318,39982],{"class":49},[39,40320,39985],{"class":49},[39,40322,39988],{"class":56},[39,40324,4797],{"class":45},[39,40326,40327],{"class":41,"line":443},[39,40328,40329],{"class":102},"            # 如果参数不存在的化初始化b=0\n",[39,40331,40332,40335,40337],{"class":41,"line":449},[39,40333,40334],{"class":45},"            nn.init.constant_(m.bias,",[39,40336,260],{"class":56},[39,40338,209],{"class":45},[39,40340,40341],{"class":41,"line":455},[39,40342,40343],{"class":102},"    # 全连接层初始化\n",[39,40345,40346,40349,40351],{"class":41,"line":461},[39,40347,40348],{"class":49},"    elif",[39,40350,39943],{"class":56},[39,40352,40019],{"class":45},[39,40354,40355],{"class":41,"line":475},[39,40356,40357],{"class":102},"        # 这个初始化方法是利用的是正太分布的方式\n",[39,40359,40360],{"class":41,"line":665},[39,40361,40362],{"class":102},"        # 均值为0，方差为0.01\n",[39,40364,40365,40368,40370,40372,40374],{"class":41,"line":671},[39,40366,40367],{"class":45},"        nn.init.normal_(m.weight,",[39,40369,260],{"class":56},[39,40371,60],{"class":45},[39,40373,40041],{"class":56},[39,40375,209],{"class":45},[39,40377,40378],{"class":41,"line":684},[39,40379,40380],{"class":102},"        # 初始化b参数\n",[39,40382,40383,40385,40387,40389,40391,40393],{"class":41,"line":2732},[39,40384,3555],{"class":49},[39,40386,39979],{"class":45},[39,40388,39982],{"class":49},[39,40390,39985],{"class":49},[39,40392,39988],{"class":56},[39,40394,4797],{"class":45},[39,40396,40397,40399,40401],{"class":41,"line":2737},[39,40398,40334],{"class":45},[39,40400,260],{"class":56},[39,40402,209],{"class":45},[19,40404,40405],{},"②尽可能地增加批次",[19,40407,40408],{},"训练完整代码：",[29,40410,40411],{"className":31,"code":38954,"language":33,"meta":34,"style":34},[36,40412,40413,40419,40429,40439,40449,40453,40469,40477,40495,40499,40503,40513,40549,40553,40589,40593,40621,40625,40629,40639,40675,40679,40715,40719,40747,40751,40755,40765,40801,40805,40841,40845,40881,40885,40913,40917,40921,40931,40967,40971,41007,41011,41047,41051,41079,41083,41087,41097,41133,41137,41173,41177,41213,41217,41245,41249,41253,41263,41267,41271,41275,41295,41299,41311,41315,41327,41331,41335,41339,41343,41355,41359,41367,41371,41383,41387,41401,41405,41413,41417,41425,41429,41433,41445,41449,41463,41471,41475,41479,41487,41497,41507,41517,41527,41537,41547,41553,41557,41561,41573,41593,41599,41607],{"__ignoreMap":34},[39,40414,40415,40417],{"class":41,"line":42},[39,40416,31447],{"class":49},[39,40418,31450],{"class":45},[39,40420,40421,40423,40425,40427],{"class":41,"line":74},[39,40422,31792],{"class":49},[39,40424,38969],{"class":45},[39,40426,31447],{"class":49},[39,40428,38974],{"class":45},[39,40430,40431,40433,40435,40437],{"class":41,"line":99},[39,40432,31792],{"class":49},[39,40434,31795],{"class":45},[39,40436,31447],{"class":49},[39,40438,31800],{"class":45},[39,40440,40441,40443,40445,40447],{"class":41,"line":106},[39,40442,31792],{"class":49},[39,40444,31812],{"class":45},[39,40446,31447],{"class":49},[39,40448,31817],{"class":45},[39,40450,40451],{"class":41,"line":112},[39,40452,3458],{"emptyLinePlaceholder":1145},[39,40454,40455,40457,40459,40461,40463,40465,40467],{"class":41,"line":118},[39,40456,15750],{"class":49},[39,40458,39005],{"class":3021},[39,40460,1221],{"class":45},[39,40462,31833],{"class":3021},[39,40464,1758],{"class":45},[39,40466,31838],{"class":3021},[39,40468,31841],{"class":45},[39,40470,40471,40473,40475],{"class":41,"line":413},[39,40472,31856],{"class":49},[39,40474,31859],{"class":56},[39,40476,31862],{"class":45},[39,40478,40479,40481,40483,40485,40487,40489,40491,40493],{"class":41,"line":419},[39,40480,31872],{"class":56},[39,40482,1221],{"class":45},[39,40484,39032],{"class":56},[39,40486,13491],{"class":45},[39,40488,31878],{"class":56},[39,40490,31881],{"class":45},[39,40492,31884],{"class":56},[39,40494,3034],{"class":45},[39,40496,40497],{"class":41,"line":425},[39,40498,39047],{"class":102},[39,40500,40501],{"class":41,"line":443},[39,40502,39052],{"class":102},[39,40504,40505,40507,40509,40511],{"class":41,"line":449},[39,40506,31900],{"class":56},[39,40508,39059],{"class":45},[39,40510,50],{"class":49},[39,40512,39064],{"class":45},[39,40514,40515,40517,40519,40521,40523,40525,40527,40529,40531,40533,40535,40537,40539,40541,40543,40545,40547],{"class":41,"line":455},[39,40516,39069],{"class":45},[39,40518,31911],{"class":254},[39,40520,50],{"class":49},[39,40522,57],{"class":56},[39,40524,60],{"class":45},[39,40526,31920],{"class":254},[39,40528,50],{"class":49},[39,40530,1416],{"class":56},[39,40532,60],{"class":45},[39,40534,31929],{"class":254},[39,40536,50],{"class":49},[39,40538,68],{"class":56},[39,40540,60],{"class":45},[39,40542,31938],{"class":254},[39,40544,50],{"class":49},[39,40546,57],{"class":56},[39,40548,39102],{"class":45},[39,40550,40551],{"class":41,"line":461},[39,40552,39107],{"class":45},[39,40554,40555,40557,40559,40561,40563,40565,40567,40569,40571,40573,40575,40577,40579,40581,40583,40585,40587],{"class":41,"line":475},[39,40556,39069],{"class":45},[39,40558,31911],{"class":254},[39,40560,50],{"class":49},[39,40562,1416],{"class":56},[39,40564,60],{"class":45},[39,40566,31920],{"class":254},[39,40568,50],{"class":49},[39,40570,1416],{"class":56},[39,40572,60],{"class":45},[39,40574,31929],{"class":254},[39,40576,50],{"class":49},[39,40578,68],{"class":56},[39,40580,60],{"class":45},[39,40582,31938],{"class":254},[39,40584,50],{"class":49},[39,40586,57],{"class":56},[39,40588,39102],{"class":45},[39,40590,40591],{"class":41,"line":665},[39,40592,39107],{"class":45},[39,40594,40595,40597,40599,40601,40603,40605,40607,40609,40611,40613,40615,40617,40619],{"class":41,"line":671},[39,40596,39152],{"class":45},[39,40598,31929],{"class":254},[39,40600,50],{"class":49},[39,40602,63],{"class":56},[39,40604,60],{"class":45},[39,40606,31984],{"class":254},[39,40608,50],{"class":49},[39,40610,63],{"class":56},[39,40612,60],{"class":45},[39,40614,31938],{"class":254},[39,40616,50],{"class":49},[39,40618,260],{"class":56},[39,40620,209],{"class":45},[39,40622,40623],{"class":41,"line":684},[39,40624,39181],{"class":45},[39,40626,40627],{"class":41,"line":2732},[39,40628,39186],{"class":102},[39,40630,40631,40633,40635,40637],{"class":41,"line":2737},[39,40632,31900],{"class":56},[39,40634,39193],{"class":45},[39,40636,50],{"class":49},[39,40638,39064],{"class":45},[39,40640,40641,40643,40645,40647,40649,40651,40653,40655,40657,40659,40661,40663,40665,40667,40669,40671,40673],{"class":41,"line":2751},[39,40642,39069],{"class":45},[39,40644,31911],{"class":254},[39,40646,50],{"class":49},[39,40648,1416],{"class":56},[39,40650,60],{"class":45},[39,40652,31920],{"class":254},[39,40654,50],{"class":49},[39,40656,33125],{"class":56},[39,40658,60],{"class":45},[39,40660,31929],{"class":254},[39,40662,50],{"class":49},[39,40664,68],{"class":56},[39,40666,60],{"class":45},[39,40668,31938],{"class":254},[39,40670,50],{"class":49},[39,40672,57],{"class":56},[39,40674,39102],{"class":45},[39,40676,40677],{"class":41,"line":2756},[39,40678,39107],{"class":45},[39,40680,40681,40683,40685,40687,40689,40691,40693,40695,40697,40699,40701,40703,40705,40707,40709,40711,40713],{"class":41,"line":2785},[39,40682,39069],{"class":45},[39,40684,31911],{"class":254},[39,40686,50],{"class":49},[39,40688,33125],{"class":56},[39,40690,60],{"class":45},[39,40692,31920],{"class":254},[39,40694,50],{"class":49},[39,40696,33125],{"class":56},[39,40698,60],{"class":45},[39,40700,31929],{"class":254},[39,40702,50],{"class":49},[39,40704,68],{"class":56},[39,40706,60],{"class":45},[39,40708,31938],{"class":254},[39,40710,50],{"class":49},[39,40712,57],{"class":56},[39,40714,39102],{"class":45},[39,40716,40717],{"class":41,"line":2790},[39,40718,39107],{"class":45},[39,40720,40721,40723,40725,40727,40729,40731,40733,40735,40737,40739,40741,40743,40745],{"class":41,"line":2807},[39,40722,39152],{"class":45},[39,40724,31929],{"class":254},[39,40726,50],{"class":49},[39,40728,63],{"class":56},[39,40730,60],{"class":45},[39,40732,31984],{"class":254},[39,40734,50],{"class":49},[39,40736,63],{"class":56},[39,40738,60],{"class":45},[39,40740,31938],{"class":254},[39,40742,50],{"class":49},[39,40744,260],{"class":56},[39,40746,209],{"class":45},[39,40748,40749],{"class":41,"line":2812},[39,40750,39181],{"class":45},[39,40752,40753],{"class":41,"line":2817},[39,40754,39314],{"class":102},[39,40756,40757,40759,40761,40763],{"class":41,"line":2822},[39,40758,31900],{"class":56},[39,40760,39321],{"class":45},[39,40762,50],{"class":49},[39,40764,39064],{"class":45},[39,40766,40767,40769,40771,40773,40775,40777,40779,40781,40783,40785,40787,40789,40791,40793,40795,40797,40799],{"class":41,"line":2836},[39,40768,39069],{"class":45},[39,40770,31911],{"class":254},[39,40772,50],{"class":49},[39,40774,33125],{"class":56},[39,40776,60],{"class":45},[39,40778,31920],{"class":254},[39,40780,50],{"class":49},[39,40782,35925],{"class":56},[39,40784,60],{"class":45},[39,40786,31929],{"class":254},[39,40788,50],{"class":49},[39,40790,68],{"class":56},[39,40792,60],{"class":45},[39,40794,31938],{"class":254},[39,40796,50],{"class":49},[39,40798,57],{"class":56},[39,40800,39102],{"class":45},[39,40802,40803],{"class":41,"line":2841},[39,40804,39107],{"class":45},[39,40806,40807,40809,40811,40813,40815,40817,40819,40821,40823,40825,40827,40829,40831,40833,40835,40837,40839],{"class":41,"line":3635},[39,40808,39069],{"class":45},[39,40810,31911],{"class":254},[39,40812,50],{"class":49},[39,40814,35925],{"class":56},[39,40816,60],{"class":45},[39,40818,31920],{"class":254},[39,40820,50],{"class":49},[39,40822,35925],{"class":56},[39,40824,60],{"class":45},[39,40826,31929],{"class":254},[39,40828,50],{"class":49},[39,40830,68],{"class":56},[39,40832,60],{"class":45},[39,40834,31938],{"class":254},[39,40836,50],{"class":49},[39,40838,57],{"class":56},[39,40840,39102],{"class":45},[39,40842,40843],{"class":41,"line":3649},[39,40844,39107],{"class":45},[39,40846,40847,40849,40851,40853,40855,40857,40859,40861,40863,40865,40867,40869,40871,40873,40875,40877,40879],{"class":41,"line":3657},[39,40848,39069],{"class":45},[39,40850,31911],{"class":254},[39,40852,50],{"class":49},[39,40854,35925],{"class":56},[39,40856,60],{"class":45},[39,40858,31920],{"class":254},[39,40860,50],{"class":49},[39,40862,35925],{"class":56},[39,40864,60],{"class":45},[39,40866,31929],{"class":254},[39,40868,50],{"class":49},[39,40870,68],{"class":56},[39,40872,60],{"class":45},[39,40874,31938],{"class":254},[39,40876,50],{"class":49},[39,40878,57],{"class":56},[39,40880,39102],{"class":45},[39,40882,40883],{"class":41,"line":3662},[39,40884,39107],{"class":45},[39,40886,40887,40889,40891,40893,40895,40897,40899,40901,40903,40905,40907,40909,40911],{"class":41,"line":3668},[39,40888,39152],{"class":45},[39,40890,31929],{"class":254},[39,40892,50],{"class":49},[39,40894,63],{"class":56},[39,40896,60],{"class":45},[39,40898,31984],{"class":254},[39,40900,50],{"class":49},[39,40902,63],{"class":56},[39,40904,60],{"class":45},[39,40906,31938],{"class":254},[39,40908,50],{"class":49},[39,40910,260],{"class":56},[39,40912,209],{"class":45},[39,40914,40915],{"class":41,"line":3674},[39,40916,39181],{"class":45},[39,40918,40919],{"class":41,"line":3679},[39,40920,39482],{"class":102},[39,40922,40923,40925,40927,40929],{"class":41,"line":9004},[39,40924,31900],{"class":56},[39,40926,39489],{"class":45},[39,40928,50],{"class":49},[39,40930,39064],{"class":45},[39,40932,40933,40935,40937,40939,40941,40943,40945,40947,40949,40951,40953,40955,40957,40959,40961,40963,40965],{"class":41,"line":9028},[39,40934,39069],{"class":45},[39,40936,31911],{"class":254},[39,40938,50],{"class":49},[39,40940,35925],{"class":56},[39,40942,60],{"class":45},[39,40944,31920],{"class":254},[39,40946,50],{"class":49},[39,40948,39512],{"class":56},[39,40950,60],{"class":45},[39,40952,31929],{"class":254},[39,40954,50],{"class":49},[39,40956,68],{"class":56},[39,40958,60],{"class":45},[39,40960,31938],{"class":254},[39,40962,50],{"class":49},[39,40964,57],{"class":56},[39,40966,39102],{"class":45},[39,40968,40969],{"class":41,"line":9033},[39,40970,39107],{"class":45},[39,40972,40973,40975,40977,40979,40981,40983,40985,40987,40989,40991,40993,40995,40997,40999,41001,41003,41005],{"class":41,"line":9039},[39,40974,39069],{"class":45},[39,40976,31911],{"class":254},[39,40978,50],{"class":49},[39,40980,39512],{"class":56},[39,40982,60],{"class":45},[39,40984,31920],{"class":254},[39,40986,50],{"class":49},[39,40988,39512],{"class":56},[39,40990,60],{"class":45},[39,40992,31929],{"class":254},[39,40994,50],{"class":49},[39,40996,68],{"class":56},[39,40998,60],{"class":45},[39,41000,31938],{"class":254},[39,41002,50],{"class":49},[39,41004,57],{"class":56},[39,41006,39102],{"class":45},[39,41008,41009],{"class":41,"line":9066},[39,41010,39107],{"class":45},[39,41012,41013,41015,41017,41019,41021,41023,41025,41027,41029,41031,41033,41035,41037,41039,41041,41043,41045],{"class":41,"line":9071},[39,41014,39069],{"class":45},[39,41016,31911],{"class":254},[39,41018,50],{"class":49},[39,41020,39512],{"class":56},[39,41022,60],{"class":45},[39,41024,31920],{"class":254},[39,41026,50],{"class":49},[39,41028,39512],{"class":56},[39,41030,60],{"class":45},[39,41032,31929],{"class":254},[39,41034,50],{"class":49},[39,41036,68],{"class":56},[39,41038,60],{"class":45},[39,41040,31938],{"class":254},[39,41042,50],{"class":49},[39,41044,57],{"class":56},[39,41046,39102],{"class":45},[39,41048,41049],{"class":41,"line":9077},[39,41050,39107],{"class":45},[39,41052,41053,41055,41057,41059,41061,41063,41065,41067,41069,41071,41073,41075,41077],{"class":41,"line":9089},[39,41054,39152],{"class":45},[39,41056,31929],{"class":254},[39,41058,50],{"class":49},[39,41060,63],{"class":56},[39,41062,60],{"class":45},[39,41064,31984],{"class":254},[39,41066,50],{"class":49},[39,41068,63],{"class":56},[39,41070,60],{"class":45},[39,41072,31938],{"class":254},[39,41074,50],{"class":49},[39,41076,260],{"class":56},[39,41078,209],{"class":45},[39,41080,41081],{"class":41,"line":9101},[39,41082,39181],{"class":45},[39,41084,41085],{"class":41,"line":9113},[39,41086,39651],{"class":102},[39,41088,41089,41091,41093,41095],{"class":41,"line":10772},[39,41090,31900],{"class":56},[39,41092,39658],{"class":45},[39,41094,50],{"class":49},[39,41096,39064],{"class":45},[39,41098,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125,41127,41129,41131],{"class":41,"line":10797},[39,41100,39069],{"class":45},[39,41102,31911],{"class":254},[39,41104,50],{"class":49},[39,41106,39512],{"class":56},[39,41108,60],{"class":45},[39,41110,31920],{"class":254},[39,41112,50],{"class":49},[39,41114,39512],{"class":56},[39,41116,60],{"class":45},[39,41118,31929],{"class":254},[39,41120,50],{"class":49},[39,41122,68],{"class":56},[39,41124,60],{"class":45},[39,41126,31938],{"class":254},[39,41128,50],{"class":49},[39,41130,57],{"class":56},[39,41132,39102],{"class":45},[39,41134,41135],{"class":41,"line":10820},[39,41136,39107],{"class":45},[39,41138,41139,41141,41143,41145,41147,41149,41151,41153,41155,41157,41159,41161,41163,41165,41167,41169,41171],{"class":41,"line":10844},[39,41140,39069],{"class":45},[39,41142,31911],{"class":254},[39,41144,50],{"class":49},[39,41146,39512],{"class":56},[39,41148,60],{"class":45},[39,41150,31920],{"class":254},[39,41152,50],{"class":49},[39,41154,39512],{"class":56},[39,41156,60],{"class":45},[39,41158,31929],{"class":254},[39,41160,50],{"class":49},[39,41162,68],{"class":56},[39,41164,60],{"class":45},[39,41166,31938],{"class":254},[39,41168,50],{"class":49},[39,41170,57],{"class":56},[39,41172,39102],{"class":45},[39,41174,41175],{"class":41,"line":10849},[39,41176,39107],{"class":45},[39,41178,41179,41181,41183,41185,41187,41189,41191,41193,41195,41197,41199,41201,41203,41205,41207,41209,41211],{"class":41,"line":10854},[39,41180,39069],{"class":45},[39,41182,31911],{"class":254},[39,41184,50],{"class":49},[39,41186,39512],{"class":56},[39,41188,60],{"class":45},[39,41190,31920],{"class":254},[39,41192,50],{"class":49},[39,41194,39512],{"class":56},[39,41196,60],{"class":45},[39,41198,31929],{"class":254},[39,41200,50],{"class":49},[39,41202,68],{"class":56},[39,41204,60],{"class":45},[39,41206,31938],{"class":254},[39,41208,50],{"class":49},[39,41210,57],{"class":56},[39,41212,39102],{"class":45},[39,41214,41215],{"class":41,"line":10859},[39,41216,39107],{"class":45},[39,41218,41219,41221,41223,41225,41227,41229,41231,41233,41235,41237,41239,41241,41243],{"class":41,"line":10868},[39,41220,39152],{"class":45},[39,41222,31929],{"class":254},[39,41224,50],{"class":49},[39,41226,63],{"class":56},[39,41228,60],{"class":45},[39,41230,31984],{"class":254},[39,41232,50],{"class":49},[39,41234,63],{"class":56},[39,41236,60],{"class":45},[39,41238,31938],{"class":254},[39,41240,50],{"class":49},[39,41242,260],{"class":56},[39,41244,209],{"class":45},[39,41246,41247],{"class":41,"line":10873},[39,41248,39181],{"class":45},[39,41250,41251],{"class":41,"line":10879},[39,41252,39819],{"class":102},[39,41254,41255,41257,41259,41261],{"class":41,"line":10900},[39,41256,31900],{"class":56},[39,41258,39826],{"class":45},[39,41260,50],{"class":49},[39,41262,39064],{"class":45},[39,41264,41265],{"class":41,"line":10906},[39,41266,39835],{"class":102},[39,41268,41269],{"class":41,"line":10920},[39,41270,39840],{"class":102},[39,41272,41273],{"class":41,"line":10926},[39,41274,39845],{"class":45},[39,41276,41277,41279,41281,41283,41285,41287,41289,41291,41293],{"class":41,"line":10953},[39,41278,39850],{"class":45},[39,41280,1573],{"class":56},[39,41282,1657],{"class":49},[39,41284,1573],{"class":56},[39,41286,1657],{"class":49},[39,41288,39512],{"class":56},[39,41290,60],{"class":45},[39,41292,35925],{"class":56},[39,41294,39102],{"class":45},[39,41296,41297],{"class":41,"line":10962},[39,41298,39107],{"class":45},[39,41300,41301,41303,41305,41307,41309],{"class":41,"line":10968},[39,41302,39850],{"class":45},[39,41304,35925],{"class":56},[39,41306,60],{"class":45},[39,41308,33125],{"class":56},[39,41310,39102],{"class":45},[39,41312,41313],{"class":41,"line":10976},[39,41314,39107],{"class":45},[39,41316,41317,41319,41321,41323,41325],{"class":41,"line":10981},[39,41318,39850],{"class":45},[39,41320,33125],{"class":56},[39,41322,60],{"class":45},[39,41324,146],{"class":56},[39,41326,209],{"class":45},[39,41328,41329],{"class":41,"line":17660},[39,41330,39181],{"class":45},[39,41332,41333],{"class":41,"line":17666},[39,41334,3458],{"emptyLinePlaceholder":1145},[39,41336,41337],{"class":41,"line":17689},[39,41338,39911],{"class":102},[39,41340,41341],{"class":41,"line":17695},[39,41342,39916],{"class":102},[39,41344,41345,41347,41349,41351,41353],{"class":41,"line":17718},[39,41346,4461],{"class":49},[39,41348,39923],{"class":45},[39,41350,27100],{"class":49},[39,41352,39928],{"class":56},[39,41354,39931],{"class":45},[39,41356,41357],{"class":41,"line":17732},[39,41358,39936],{"class":102},[39,41360,41361,41363,41365],{"class":41,"line":17752},[39,41362,5700],{"class":49},[39,41364,39943],{"class":56},[39,41366,39946],{"class":45},[39,41368,41369],{"class":41,"line":17758},[39,41370,39951],{"class":102},[39,41372,41373,41375,41377,41379,41381],{"class":41,"line":17769},[39,41374,39956],{"class":45},[39,41376,39959],{"class":254},[39,41378,50],{"class":49},[39,41380,39964],{"class":1319},[39,41382,209],{"class":45},[39,41384,41385],{"class":41,"line":17792},[39,41386,39971],{"class":102},[39,41388,41389,41391,41393,41395,41397,41399],{"class":41,"line":17814},[39,41390,39976],{"class":49},[39,41392,39979],{"class":45},[39,41394,39982],{"class":49},[39,41396,39985],{"class":49},[39,41398,39988],{"class":56},[39,41400,4797],{"class":45},[39,41402,41403],{"class":41,"line":17819},[39,41404,39995],{"class":102},[39,41406,41407,41409,41411],{"class":41,"line":17825},[39,41408,40000],{"class":45},[39,41410,260],{"class":56},[39,41412,209],{"class":45},[39,41414,41415],{"class":41,"line":17839},[39,41416,40009],{"class":102},[39,41418,41419,41421,41423],{"class":41,"line":17852},[39,41420,40014],{"class":49},[39,41422,39943],{"class":56},[39,41424,40019],{"class":45},[39,41426,41427],{"class":41,"line":17857},[39,41428,40024],{"class":102},[39,41430,41431],{"class":41,"line":17871},[39,41432,40029],{"class":102},[39,41434,41435,41437,41439,41441,41443],{"class":41,"line":17876},[39,41436,40034],{"class":45},[39,41438,260],{"class":56},[39,41440,60],{"class":45},[39,41442,40041],{"class":56},[39,41444,209],{"class":45},[39,41446,41447],{"class":41,"line":17882},[39,41448,40048],{"class":102},[39,41450,41451,41453,41455,41457,41459,41461],{"class":41,"line":17887},[39,41452,39976],{"class":49},[39,41454,39979],{"class":45},[39,41456,39982],{"class":49},[39,41458,39985],{"class":49},[39,41460,39988],{"class":56},[39,41462,4797],{"class":45},[39,41464,41465,41467,41469],{"class":41,"line":17901},[39,41466,40000],{"class":45},[39,41468,260],{"class":56},[39,41470,209],{"class":45},[39,41472,41473],{"class":41,"line":17906},[39,41474,3458],{"emptyLinePlaceholder":1145},[39,41476,41477],{"class":41,"line":17911},[39,41478,36220],{"class":102},[39,41480,41481,41483,41485],{"class":41,"line":17925},[39,41482,31856],{"class":49},[39,41484,32148],{"class":3021},[39,41486,32151],{"class":45},[39,41488,41489,41491,41493,41495],{"class":41,"line":17937},[39,41490,32156],{"class":45},[39,41492,50],{"class":49},[39,41494,31878],{"class":56},[39,41496,40097],{"class":45},[39,41498,41499,41501,41503,41505],{"class":41,"line":17942},[39,41500,32156],{"class":45},[39,41502,50],{"class":49},[39,41504,31878],{"class":56},[39,41506,40108],{"class":45},[39,41508,41509,41511,41513,41515],{"class":41,"line":17955},[39,41510,32156],{"class":45},[39,41512,50],{"class":49},[39,41514,31878],{"class":56},[39,41516,40119],{"class":45},[39,41518,41519,41521,41523,41525],{"class":41,"line":17960},[39,41520,32156],{"class":45},[39,41522,50],{"class":49},[39,41524,31878],{"class":56},[39,41526,40130],{"class":45},[39,41528,41529,41531,41533,41535],{"class":41,"line":17965},[39,41530,32156],{"class":45},[39,41532,50],{"class":49},[39,41534,31878],{"class":56},[39,41536,40141],{"class":45},[39,41538,41539,41541,41543,41545],{"class":41,"line":17970},[39,41540,32156],{"class":45},[39,41542,50],{"class":49},[39,41544,31878],{"class":56},[39,41546,40152],{"class":45},[39,41548,41549,41551],{"class":41,"line":17983},[39,41550,15808],{"class":49},[39,41552,32264],{"class":45},[39,41554,41555],{"class":41,"line":17988},[39,41556,3458],{"emptyLinePlaceholder":1145},[39,41558,41559],{"class":41,"line":33688},[39,41560,40167],{"class":102},[39,41562,41563,41565,41567,41569,41571],{"class":41,"line":33694},[39,41564,2596],{"class":49},[39,41566,32275],{"class":56},[39,41568,4007],{"class":49},[39,41570,40178],{"class":1319},[39,41572,4797],{"class":45},[39,41574,41575,41577,41579,41581,41583,41585,41587,41589,41591],{"class":41,"line":33700},[39,41576,32292],{"class":45},[39,41578,50],{"class":49},[39,41580,31506],{"class":45},[39,41582,32299],{"class":1319},[39,41584,2762],{"class":49},[39,41586,32304],{"class":45},[39,41588,2759],{"class":49},[39,41590,31531],{"class":1319},[39,41592,209],{"class":45},[39,41594,41595,41597],{"class":41,"line":33706},[39,41596,32354],{"class":56},[39,41598,31540],{"class":45},[39,41600,41601,41603,41605],{"class":41,"line":33712},[39,41602,32344],{"class":45},[39,41604,50],{"class":49},[39,41606,40215],{"class":45},[39,41608,41609,41611,41613,41615,41617,41619,41621,41623],{"class":41,"line":33723},[39,41610,32354],{"class":56},[39,41612,32357],{"class":45},[39,41614,57],{"class":56},[39,41616,60],{"class":45},[39,41618,32556],{"class":56},[39,41620,60],{"class":45},[39,41622,32556],{"class":56},[39,41624,32370],{"class":45},[1171,41626,41627],{"start":99},[1174,41628,41629],{},"测试代码",[29,41631,41633],{"className":31,"code":41632,"language":33,"meta":34,"style":34},"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",[36,41634,41635,41641,41651,41661,41665,41675,41686,41690,41694,41698,41706,41722,41732,41748,41758,41772,41776,41786,41796,41806,41812,41816,41820,41828,41832,41848,41856,41860,41864,41872,41880,41884,41888,41892,41896,41902,41906,41916,41924,41932,41936,41940,41944,41952,41956,41972,41976,41980,41984,41996,42000,42012,42016,42020,42032,42036,42046,42050,42054,42066,42070,42079,42083,42087,42095,42099,42107,42111,42115,42119,42123,42127,42143,42151,42155,42159,42207,42213,42217,42227,42235,42243,42247,42251,42255,42259,42267,42271,42287,42291,42299,42307],{"__ignoreMap":34},[39,41636,41637,41639],{"class":41,"line":42},[39,41638,31447],{"class":49},[39,41640,31450],{"class":45},[39,41642,41643,41645,41647,41649],{"class":41,"line":74},[39,41644,31447],{"class":49},[39,41646,32470],{"class":45},[39,41648,32438],{"class":49},[39,41650,32475],{"class":45},[39,41652,41653,41655,41657,41659],{"class":41,"line":99},[39,41654,31792],{"class":49},[39,41656,32453],{"class":45},[39,41658,31447],{"class":49},[39,41660,32458],{"class":45},[39,41662,41663],{"class":41,"line":106},[39,41664,34977],{"class":102},[39,41666,41667,41669,41671,41673],{"class":41,"line":112},[39,41668,31792],{"class":49},[39,41670,32423],{"class":45},[39,41672,31447],{"class":49},[39,41674,32428],{"class":45},[39,41676,41677,41679,41681,41683],{"class":41,"line":118},[39,41678,31792],{"class":49},[39,41680,32969],{"class":45},[39,41682,31447],{"class":49},[39,41684,41685],{"class":56}," VGG16\n",[39,41687,41688],{"class":41,"line":413},[39,41689,3458],{"emptyLinePlaceholder":1145},[39,41691,41692],{"class":41,"line":419},[39,41693,3458],{"emptyLinePlaceholder":1145},[39,41695,41696],{"class":41,"line":425},[39,41697,35006],{"class":102},[39,41699,41700,41702,41704],{"class":41,"line":443},[39,41701,33002],{"class":49},[39,41703,35013],{"class":3021},[39,41705,33008],{"class":45},[39,41707,41708,41710,41712,41714,41716,41718,41720],{"class":41,"line":449},[39,41709,35020],{"class":45},[39,41711,50],{"class":49},[39,41713,32510],{"class":45},[39,41715,32513],{"class":254},[39,41717,50],{"class":49},[39,41719,32518],{"class":1319},[39,41721,32521],{"class":45},[39,41723,41724,41726,41728,41730],{"class":41,"line":455},[39,41725,35037],{"class":254},[39,41727,50],{"class":49},[39,41729,35042],{"class":56},[39,41731,32521],{"class":45},[39,41733,41734,41736,41738,41740,41742,41744,41746],{"class":41,"line":461},[39,41735,35049],{"class":254},[39,41737,50],{"class":49},[39,41739,32548],{"class":45},[39,41741,32551],{"class":254},[39,41743,50],{"class":49},[39,41745,32556],{"class":56},[39,41747,32559],{"class":45},[39,41749,41750,41752,41754,41756],{"class":41,"line":475},[39,41751,35066],{"class":254},[39,41753,50],{"class":49},[39,41755,32531],{"class":56},[39,41757,209],{"class":45},[39,41759,41760,41762,41764,41766,41768,41770],{"class":41,"line":665},[39,41761,35077],{"class":45},[39,41763,50],{"class":49},[39,41765,32589],{"class":45},[39,41767,32592],{"class":254},[39,41769,50],{"class":49},[39,41771,35088],{"class":45},[39,41773,41774],{"class":41,"line":671},[39,41775,35093],{"class":102},[39,41777,41778,41780,41782,41784],{"class":41,"line":684},[39,41779,35098],{"class":254},[39,41781,50],{"class":49},[39,41783,57],{"class":56},[39,41785,32521],{"class":45},[39,41787,41788,41790,41792,41794],{"class":41,"line":2732},[39,41789,35109],{"class":254},[39,41791,50],{"class":49},[39,41793,32531],{"class":56},[39,41795,32521],{"class":45},[39,41797,41798,41800,41802,41804],{"class":41,"line":2737},[39,41799,35120],{"class":254},[39,41801,50],{"class":49},[39,41803,260],{"class":56},[39,41805,209],{"class":45},[39,41807,41808,41810],{"class":41,"line":2751},[39,41809,5148],{"class":49},[39,41811,35133],{"class":45},[39,41813,41814],{"class":41,"line":2756},[39,41815,3458],{"emptyLinePlaceholder":1145},[39,41817,41818],{"class":41,"line":2785},[39,41819,35142],{"class":102},[39,41821,41822,41824,41826],{"class":41,"line":2790},[39,41823,33002],{"class":49},[39,41825,35149],{"class":3021},[39,41827,35152],{"class":45},[39,41829,41830],{"class":41,"line":2807},[39,41831,35157],{"class":102},[39,41833,41834,41836,41838,41840,41842,41844,41846],{"class":41,"line":2812},[39,41835,32292],{"class":45},[39,41837,50],{"class":49},[39,41839,32299],{"class":1319},[39,41841,2762],{"class":49},[39,41843,32304],{"class":45},[39,41845,2759],{"class":49},[39,41847,35174],{"class":1319},[39,41849,41850,41852,41854],{"class":41,"line":2817},[39,41851,32344],{"class":45},[39,41853,50],{"class":49},[39,41855,33344],{"class":45},[39,41857,41858],{"class":41,"line":2822},[39,41859,3458],{"emptyLinePlaceholder":1145},[39,41861,41862],{"class":41,"line":2836},[39,41863,35191],{"class":102},[39,41865,41866,41868,41870],{"class":41,"line":2841},[39,41867,35196],{"class":45},[39,41869,50],{"class":49},[39,41871,33397],{"class":56},[39,41873,41874,41876,41878],{"class":41,"line":3635},[39,41875,35205],{"class":45},[39,41877,50],{"class":49},[39,41879,4143],{"class":56},[39,41881,41882],{"class":41,"line":3649},[39,41883,3458],{"emptyLinePlaceholder":1145},[39,41885,41886],{"class":41,"line":3657},[39,41887,35218],{"class":102},[39,41889,41890],{"class":41,"line":3662},[39,41891,35223],{"class":102},[39,41893,41894],{"class":41,"line":3668},[39,41895,35228],{"class":102},[39,41897,41898,41900],{"class":41,"line":3674},[39,41899,35233],{"class":49},[39,41901,33939],{"class":45},[39,41903,41904],{"class":41,"line":3679},[39,41905,35240],{"class":102},[39,41907,41908,41910,41912,41914],{"class":41,"line":9004},[39,41909,4461],{"class":49},[39,41911,35247],{"class":45},[39,41913,27100],{"class":49},[39,41915,35252],{"class":45},[39,41917,41918,41920,41922],{"class":41,"line":9028},[39,41919,35257],{"class":45},[39,41921,50],{"class":49},[39,41923,35262],{"class":45},[39,41925,41926,41928,41930],{"class":41,"line":9033},[39,41927,35267],{"class":45},[39,41929,50],{"class":49},[39,41931,35272],{"class":45},[39,41933,41934],{"class":41,"line":9039},[39,41935,35277],{"class":102},[39,41937,41938],{"class":41,"line":9066},[39,41939,33930],{"class":45},[39,41941,41942],{"class":41,"line":9071},[39,41943,35286],{"class":102},[39,41945,41946,41948,41950],{"class":41,"line":9077},[39,41947,33715],{"class":45},[39,41949,50],{"class":49},[39,41951,35295],{"class":45},[39,41953,41954],{"class":41,"line":9089},[39,41955,35300],{"class":102},[39,41957,41958,41960,41962,41964,41966,41968,41970],{"class":41,"line":9101},[39,41959,33732],{"class":45},[39,41961,50],{"class":49},[39,41963,33737],{"class":45},[39,41965,33740],{"class":254},[39,41967,50],{"class":49},[39,41969,57],{"class":56},[39,41971,209],{"class":45},[39,41973,41974],{"class":41,"line":9113},[39,41975,35321],{"class":102},[39,41977,41978],{"class":41,"line":10772},[39,41979,35326],{"class":102},[39,41981,41982],{"class":41,"line":10797},[39,41983,35331],{"class":102},[39,41985,41986,41988,41990,41992,41994],{"class":41,"line":10820},[39,41987,35336],{"class":45},[39,41989,10533],{"class":49},[39,41991,33842],{"class":45},[39,41993,4007],{"class":49},[39,41995,35345],{"class":45},[39,41997,41998],{"class":41,"line":10844},[39,41999,35350],{"class":102},[39,42001,42002,42004,42006,42008,42010],{"class":41,"line":10849},[39,42003,35355],{"class":45},[39,42005,10533],{"class":49},[39,42007,35360],{"class":45},[39,42009,260],{"class":56},[39,42011,209],{"class":45},[39,42013,42014],{"class":41,"line":10854},[39,42015,3458],{"emptyLinePlaceholder":1145},[39,42017,42018],{"class":41,"line":10859},[39,42019,35373],{"class":102},[39,42021,42022,42024,42026,42028,42030],{"class":41,"line":10868},[39,42023,35378],{"class":45},[39,42025,50],{"class":49},[39,42027,35383],{"class":45},[39,42029,1784],{"class":49},[39,42031,35388],{"class":45},[39,42033,42034],{"class":41,"line":10873},[39,42035,35393],{"class":102},[39,42037,42038,42040,42042,42044],{"class":41,"line":10879},[39,42039,33506],{"class":56},[39,42041,1221],{"class":45},[39,42043,35402],{"class":1319},[39,42045,35405],{"class":45},[39,42047,42048],{"class":41,"line":10900},[39,42049,3458],{"emptyLinePlaceholder":1145},[39,42051,42052],{"class":41,"line":10906},[39,42053,35414],{"class":102},[39,42055,42056,42058,42060,42062,42064],{"class":41,"line":10920},[39,42057,2596],{"class":49},[39,42059,32275],{"class":56},[39,42061,4007],{"class":49},[39,42063,32280],{"class":1319},[39,42065,4797],{"class":45},[39,42067,42068],{"class":41,"line":10926},[39,42069,35431],{"class":102},[39,42071,42072,42074,42076],{"class":41,"line":10953},[39,42073,32344],{"class":45},[39,42075,50],{"class":49},[39,42077,42078],{"class":45},"VGG16()\n",[39,42080,42081],{"class":41,"line":10962},[39,42082,35444],{"class":102},[39,42084,42085],{"class":41,"line":10968},[39,42086,35449],{"class":102},[39,42088,42089,42091,42093],{"class":41,"line":10976},[39,42090,35454],{"class":45},[39,42092,35457],{"class":1319},[39,42094,31552],{"class":45},[39,42096,42097],{"class":41,"line":10981},[39,42098,35464],{"class":102},[39,42100,42101,42103,42105],{"class":41,"line":17660},[39,42102,35077],{"class":45},[39,42104,50],{"class":49},[39,42106,35473],{"class":45},[39,42108,42109],{"class":41,"line":17666},[39,42110,35478],{"class":102},[39,42112,42113],{"class":41,"line":17689},[39,42114,35483],{"class":45},[39,42116,42117],{"class":41,"line":17695},[39,42118,3458],{"emptyLinePlaceholder":1145},[39,42120,42121],{"class":41,"line":17718},[39,42122,35492],{"class":102},[39,42124,42125],{"class":41,"line":17732},[39,42126,35497],{"class":102},[39,42128,42129,42131,42133,42135,42137,42139,42141],{"class":41,"line":17752},[39,42130,32292],{"class":45},[39,42132,50],{"class":49},[39,42134,32299],{"class":1319},[39,42136,2762],{"class":49},[39,42138,32304],{"class":45},[39,42140,2759],{"class":49},[39,42142,35174],{"class":1319},[39,42144,42145,42147,42149],{"class":41,"line":17758},[39,42146,32344],{"class":45},[39,42148,50],{"class":49},[39,42150,33344],{"class":45},[39,42152,42153],{"class":41,"line":17769},[39,42154,35526],{"class":102},[39,42156,42157],{"class":41,"line":17792},[39,42158,35531],{"class":102},[39,42160,42161,42163,42165,42167,42169,42171,42173,42175,42177,42179,42181,42183,42185,42187,42189,42191,42193,42195,42197,42199,42201,42203,42205],{"class":41,"line":17814},[39,42162,35536],{"class":45},[39,42164,50],{"class":49},[39,42166,2088],{"class":45},[39,42168,35543],{"class":1319},[39,42170,60],{"class":45},[39,42172,35548],{"class":1319},[39,42174,60],{"class":45},[39,42176,35553],{"class":1319},[39,42178,60],{"class":45},[39,42180,35558],{"class":1319},[39,42182,60],{"class":45},[39,42184,35563],{"class":1319},[39,42186,60],{"class":45},[39,42188,35568],{"class":1319},[39,42190,60],{"class":45},[39,42192,35573],{"class":1319},[39,42194,60],{"class":45},[39,42196,35578],{"class":1319},[39,42198,60],{"class":45},[39,42200,35583],{"class":1319},[39,42202,60],{"class":45},[39,42204,35588],{"class":1319},[39,42206,34301],{"class":45},[39,42208,42209,42211],{"class":41,"line":17819},[39,42210,35233],{"class":49},[39,42212,33939],{"class":45},[39,42214,42215],{"class":41,"line":17825},[39,42216,35601],{"class":102},[39,42218,42219,42221,42223,42225],{"class":41,"line":17839},[39,42220,4461],{"class":49},[39,42222,35608],{"class":45},[39,42224,27100],{"class":49},[39,42226,35252],{"class":45},[39,42228,42229,42231,42233],{"class":41,"line":17852},[39,42230,33665],{"class":45},[39,42232,50],{"class":49},[39,42234,33670],{"class":45},[39,42236,42237,42239,42241],{"class":41,"line":17857},[39,42238,33680],{"class":45},[39,42240,50],{"class":49},[39,42242,33685],{"class":45},[39,42244,42245],{"class":41,"line":17871},[39,42246,3458],{"emptyLinePlaceholder":1145},[39,42248,42249],{"class":41,"line":17876},[39,42250,35637],{"class":102},[39,42252,42253],{"class":41,"line":17882},[39,42254,33930],{"class":45},[39,42256,42257],{"class":41,"line":17887},[39,42258,35646],{"class":102},[39,42260,42261,42263,42265],{"class":41,"line":17901},[39,42262,33715],{"class":45},[39,42264,50],{"class":49},[39,42266,33720],{"class":45},[39,42268,42269],{"class":41,"line":17906},[39,42270,35659],{"class":102},[39,42272,42273,42275,42277,42279,42281,42283,42285],{"class":41,"line":17911},[39,42274,33732],{"class":45},[39,42276,50],{"class":49},[39,42278,33737],{"class":45},[39,42280,33740],{"class":254},[39,42282,50],{"class":49},[39,42284,57],{"class":56},[39,42286,209],{"class":45},[39,42288,42289],{"class":41,"line":17925},[39,42290,35680],{"class":102},[39,42292,42293,42295,42297],{"class":41,"line":17937},[39,42294,35685],{"class":45},[39,42296,50],{"class":49},[39,42298,35690],{"class":45},[39,42300,42301,42303,42305],{"class":41,"line":17942},[39,42302,35695],{"class":45},[39,42304,50],{"class":49},[39,42306,35700],{"class":45},[39,42308,42309,42311,42313,42315,42317,42319,42321,42323],{"class":41,"line":17955},[39,42310,35705],{"class":56},[39,42312,1221],{"class":45},[39,42314,35710],{"class":1319},[39,42316,35713],{"class":45},[39,42318,35716],{"class":1319},[39,42320,60],{"class":45},[39,42322,35721],{"class":1319},[39,42324,35724],{"class":45},[1188,42326,42328],{"id":42327},"_23googlenet","2.3.GoogLeNet",[23054,42330,42332],{"id":42331},"_231原理","2.3.1.原理",[1171,42334,42335],{},[1174,42336,42337],{},"网络结构",[19,42339,42340],{},[269,42341],{"alt":34,"src":42342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[19,42344,42345],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,42347,42348],{},[269,42349],{"alt":34,"src":42350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[19,42352,42353],{},[269,42354],{"alt":34,"src":42355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[19,42357,42358],{},[269,42359],{"alt":34,"src":42360},"\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",[1171,42362,42363],{"start":74},[1174,42364,42365],{},"1x1卷积的优点",[19,42367,42368],{},[269,42369],{"alt":34,"src":42370},"\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",[1171,42372,42373],{"start":99},[1174,42374,42375],{},"全局平均池化层优点",[19,42377,42378],{},[269,42379],{"alt":34,"src":42380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[19,42382,42383],{},[269,42384],{"alt":34,"src":42385},"\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",[1171,42387,42388],{"start":106},[1174,42389,42390],{},"参数详细描述",[19,42392,42393],{},[269,42394],{"alt":34,"src":42395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[19,42397,42398],{},[269,42399],{"alt":34,"src":42400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[19,42402,42403],{},[269,42404],{"alt":34,"src":42405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[19,42407,42408],{},[269,42409],{"alt":34,"src":42410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[19,42412,42413],{},[269,42414],{"alt":34,"src":42415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[19,42417,42418],{},[269,42419],{"alt":34,"src":42420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[19,42422,42423],{},[269,42424],{"alt":34,"src":42425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[19,42427,42428],{},[269,42429],{"alt":34,"src":42430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[19,42432,42433],{},[269,42434],{"alt":34,"src":42435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[19,42437,42438],{},[269,42439],{"alt":34,"src":42440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[19,42442,42443],{},[269,42444],{"alt":34,"src":42445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[19,42447,42448],{},[269,42449],{"alt":34,"src":42450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[19,42452,42453],{},[269,42454],{"alt":34,"src":42455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[19,42457,42458],{},[269,42459],{"alt":34,"src":42460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[19,42462,42463],{},[269,42464],{"alt":34,"src":42465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[19,42467,42468],{},[269,42469],{"alt":34,"src":42470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[19,42472,42473],{},[269,42474],{"alt":34,"src":42475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[19,42477,42478],{},[269,42479],{"alt":34,"src":42480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[19,42482,42483],{},[269,42484],{"alt":34,"src":42485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[19,42487,42488],{},[269,42489],{"alt":34,"src":42490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[19,42492,42493],{},[269,42494],{"alt":34,"src":42495},"\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",[23054,42497,42499],{"id":42498},"_232代码实现","2.3.2.代码实现",[1171,42501,42502],{},[1174,42503,31766],{},[19,42505,42506],{},"根据原理一步一步搭建即可",[29,42508,42510],{"className":31,"code":42509,"language":33,"meta":34,"style":34},"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",[36,42511,42512,42518,42528,42538,42542,42559,42568,42583,42593,42598,42631,42636,42673,42720,42725,42761,42808,42813,42818,42853,42885,42889,42897,42913,42937,42962,42983,42988,43003,43007,43011,43016,43033,43038,43047,43062,43073,43117,43121,43149,43153,43164,43192,43196,43233,43237,43265,43269,43280,43316,43348,43376,43380,43391,43425,43457,43489,43522,43556,43584,43588,43599,43632,43664,43678,43682,43695,43699,43704,43716,43724,43746,43751,43756,43761,43766,43771,43776,43790,43798,43807,43820,43835,43844,43848,43856,43867,43878,43889,43900,43911,43917,43921,43926,43938,43958,43967],{"__ignoreMap":34},[39,42513,42514,42516],{"class":41,"line":42},[39,42515,31447],{"class":49},[39,42517,31450],{"class":45},[39,42519,42520,42522,42524,42526],{"class":41,"line":74},[39,42521,31792],{"class":49},[39,42523,31795],{"class":45},[39,42525,31447],{"class":49},[39,42527,31800],{"class":45},[39,42529,42530,42532,42534,42536],{"class":41,"line":99},[39,42531,31792],{"class":49},[39,42533,31812],{"class":45},[39,42535,31447],{"class":49},[39,42537,31817],{"class":45},[39,42539,42540],{"class":41,"line":106},[39,42541,3458],{"emptyLinePlaceholder":1145},[39,42543,42544,42546,42549,42551,42553,42555,42557],{"class":41,"line":112},[39,42545,15750],{"class":49},[39,42547,42548],{"class":3021}," Inception",[39,42550,1221],{"class":45},[39,42552,31833],{"class":3021},[39,42554,1758],{"class":45},[39,42556,31838],{"class":3021},[39,42558,31841],{"class":45},[39,42560,42561,42563,42565],{"class":41,"line":118},[39,42562,31856],{"class":49},[39,42564,31859],{"class":56},[39,42566,42567],{"class":45},"(self,in_channels,c1,c2,c3,c4):\n",[39,42569,42570,42572,42575,42577,42579,42581],{"class":41,"line":413},[39,42571,31872],{"class":56},[39,42573,42574],{"class":45},"(Inception,",[39,42576,31878],{"class":56},[39,42578,31881],{"class":45},[39,42580,31884],{"class":56},[39,42582,3034],{"class":45},[39,42584,42585,42587,42589,42591],{"class":41,"line":419},[39,42586,31900],{"class":56},[39,42588,35826],{"class":45},[39,42590,50],{"class":49},[39,42592,35831],{"class":45},[39,42594,42595],{"class":41,"line":425},[39,42596,42597],{"class":102},"        # 路线1：定义1*1卷积\n",[39,42599,42600,42602,42605,42607,42609,42611,42613,42616,42618,42620,42623,42625,42627,42629],{"class":41,"line":443},[39,42601,31900],{"class":56},[39,42603,42604],{"class":45},".p1_1",[39,42606,50],{"class":49},[39,42608,31908],{"class":45},[39,42610,31911],{"class":254},[39,42612,50],{"class":49},[39,42614,42615],{"class":45},"in_channels,",[39,42617,31920],{"class":254},[39,42619,50],{"class":49},[39,42621,42622],{"class":45},"c1,",[39,42624,31929],{"class":254},[39,42626,50],{"class":49},[39,42628,57],{"class":56},[39,42630,209],{"class":45},[39,42632,42633],{"class":41,"line":449},[39,42634,42635],{"class":102},"        # 路线2：定义1*1卷积和3*3\n",[39,42637,42638,42640,42643,42645,42647,42649,42651,42653,42655,42657,42660,42662,42665,42667,42669,42671],{"class":41,"line":455},[39,42639,31900],{"class":56},[39,42641,42642],{"class":45},".p2_1",[39,42644,50],{"class":49},[39,42646,31908],{"class":45},[39,42648,31911],{"class":254},[39,42650,50],{"class":49},[39,42652,42615],{"class":45},[39,42654,31920],{"class":254},[39,42656,50],{"class":49},[39,42658,42659],{"class":45},"c2[",[39,42661,260],{"class":56},[39,42663,42664],{"class":45},"],",[39,42666,31929],{"class":254},[39,42668,50],{"class":49},[39,42670,57],{"class":56},[39,42672,209],{"class":45},[39,42674,42675,42677,42680,42682,42684,42686,42688,42690,42692,42694,42696,42698,42700,42702,42704,42706,42708,42710,42712,42714,42716,42718],{"class":41,"line":461},[39,42676,31900],{"class":56},[39,42678,42679],{"class":45},".p2_2",[39,42681,50],{"class":49},[39,42683,31908],{"class":45},[39,42685,31911],{"class":254},[39,42687,50],{"class":49},[39,42689,42659],{"class":45},[39,42691,260],{"class":56},[39,42693,42664],{"class":45},[39,42695,31920],{"class":254},[39,42697,50],{"class":49},[39,42699,42659],{"class":45},[39,42701,57],{"class":56},[39,42703,42664],{"class":45},[39,42705,31929],{"class":254},[39,42707,50],{"class":49},[39,42709,68],{"class":56},[39,42711,60],{"class":45},[39,42713,31938],{"class":254},[39,42715,50],{"class":49},[39,42717,57],{"class":56},[39,42719,209],{"class":45},[39,42721,42722],{"class":41,"line":475},[39,42723,42724],{"class":102},"        # 路线3：定义1*1卷积和5*5\n",[39,42726,42727,42729,42732,42734,42736,42738,42740,42742,42744,42746,42749,42751,42753,42755,42757,42759],{"class":41,"line":665},[39,42728,31900],{"class":56},[39,42730,42731],{"class":45},".p3_1",[39,42733,50],{"class":49},[39,42735,31908],{"class":45},[39,42737,31911],{"class":254},[39,42739,50],{"class":49},[39,42741,42615],{"class":45},[39,42743,31920],{"class":254},[39,42745,50],{"class":49},[39,42747,42748],{"class":45},"c3[",[39,42750,260],{"class":56},[39,42752,42664],{"class":45},[39,42754,31929],{"class":254},[39,42756,50],{"class":49},[39,42758,57],{"class":56},[39,42760,209],{"class":45},[39,42762,42763,42765,42768,42770,42772,42774,42776,42778,42780,42782,42784,42786,42788,42790,42792,42794,42796,42798,42800,42802,42804,42806],{"class":41,"line":671},[39,42764,31900],{"class":56},[39,42766,42767],{"class":45},".p3_2",[39,42769,50],{"class":49},[39,42771,31908],{"class":45},[39,42773,31911],{"class":254},[39,42775,50],{"class":49},[39,42777,42748],{"class":45},[39,42779,260],{"class":56},[39,42781,42664],{"class":45},[39,42783,31920],{"class":254},[39,42785,50],{"class":49},[39,42787,42748],{"class":45},[39,42789,57],{"class":56},[39,42791,42664],{"class":45},[39,42793,31929],{"class":254},[39,42795,50],{"class":49},[39,42797,89],{"class":56},[39,42799,60],{"class":45},[39,42801,31938],{"class":254},[39,42803,50],{"class":49},[39,42805,63],{"class":56},[39,42807,209],{"class":45},[39,42809,42810],{"class":41,"line":684},[39,42811,42812],{"class":102},"        # 路线4：定义3*3最大池化和1*1卷积\n",[39,42814,42815],{"class":41,"line":2732},[39,42816,42817],{"class":102},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[39,42819,42820,42822,42825,42827,42829,42831,42833,42835,42837,42839,42841,42843,42845,42847,42849,42851],{"class":41,"line":2737},[39,42821,31900],{"class":56},[39,42823,42824],{"class":45},".p4_1",[39,42826,50],{"class":49},[39,42828,35884],{"class":45},[39,42830,31929],{"class":254},[39,42832,50],{"class":49},[39,42834,68],{"class":56},[39,42836,60],{"class":45},[39,42838,31984],{"class":254},[39,42840,50],{"class":49},[39,42842,57],{"class":56},[39,42844,60],{"class":45},[39,42846,31938],{"class":254},[39,42848,50],{"class":49},[39,42850,57],{"class":56},[39,42852,209],{"class":45},[39,42854,42855,42857,42860,42862,42864,42866,42868,42870,42872,42874,42877,42879,42881,42883],{"class":41,"line":2751},[39,42856,31900],{"class":56},[39,42858,42859],{"class":45},".p4_2",[39,42861,50],{"class":49},[39,42863,31908],{"class":45},[39,42865,31911],{"class":254},[39,42867,50],{"class":49},[39,42869,42615],{"class":45},[39,42871,31920],{"class":254},[39,42873,50],{"class":49},[39,42875,42876],{"class":45},"c4,",[39,42878,31929],{"class":254},[39,42880,50],{"class":49},[39,42882,57],{"class":56},[39,42884,209],{"class":45},[39,42886,42887],{"class":41,"line":2756},[39,42888,3458],{"emptyLinePlaceholder":1145},[39,42890,42891,42893,42895],{"class":41,"line":2785},[39,42892,31856],{"class":49},[39,42894,32148],{"class":3021},[39,42896,32151],{"class":45},[39,42898,42899,42902,42904,42906,42908,42910],{"class":41,"line":2790},[39,42900,42901],{"class":45},"        p1",[39,42903,50],{"class":49},[39,42905,31878],{"class":56},[39,42907,36239],{"class":45},[39,42909,31878],{"class":56},[39,42911,42912],{"class":45},".p1_1(x))\n",[39,42914,42915,42917,42919,42921,42923,42925,42928,42930,42932,42934],{"class":41,"line":2807},[39,42916,8141],{"class":45},[39,42918,50],{"class":49},[39,42920,31878],{"class":56},[39,42922,36239],{"class":45},[39,42924,31878],{"class":56},[39,42926,42927],{"class":45},".p2_2(",[39,42929,31878],{"class":56},[39,42931,36239],{"class":45},[39,42933,31878],{"class":56},[39,42935,42936],{"class":45},".p2_1(x))))\n",[39,42938,42939,42942,42944,42946,42948,42950,42953,42955,42957,42959],{"class":41,"line":2812},[39,42940,42941],{"class":45},"        p3",[39,42943,50],{"class":49},[39,42945,31878],{"class":56},[39,42947,36239],{"class":45},[39,42949,31878],{"class":56},[39,42951,42952],{"class":45},".p3_2(",[39,42954,31878],{"class":56},[39,42956,36239],{"class":45},[39,42958,31878],{"class":56},[39,42960,42961],{"class":45},".p3_1(x))))\n",[39,42963,42964,42967,42969,42971,42973,42975,42978,42980],{"class":41,"line":2817},[39,42965,42966],{"class":45},"        p4",[39,42968,50],{"class":49},[39,42970,31878],{"class":56},[39,42972,36239],{"class":45},[39,42974,31878],{"class":56},[39,42976,42977],{"class":45},".p4_2(",[39,42979,31878],{"class":56},[39,42981,42982],{"class":45},".p4_1(x)))\n",[39,42984,42985],{"class":41,"line":2822},[39,42986,42987],{"class":102},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[39,42989,42990,42992,42995,42997,42999,43001],{"class":41,"line":2836},[39,42991,15808],{"class":49},[39,42993,42994],{"class":45}," torch.cat((p1,p2,p3,p4),",[39,42996,33740],{"class":254},[39,42998,50],{"class":49},[39,43000,57],{"class":56},[39,43002,209],{"class":45},[39,43004,43005],{"class":41,"line":2841},[39,43006,3458],{"emptyLinePlaceholder":1145},[39,43008,43009],{"class":41,"line":3635},[39,43010,3458],{"emptyLinePlaceholder":1145},[39,43012,43013],{"class":41,"line":3649},[39,43014,43015],{"class":102},"# 搭建GoogLeNet网络\n",[39,43017,43018,43020,43023,43025,43027,43029,43031],{"class":41,"line":3657},[39,43019,15750],{"class":49},[39,43021,43022],{"class":3021}," GoogLeNet",[39,43024,1221],{"class":45},[39,43026,31833],{"class":3021},[39,43028,1758],{"class":45},[39,43030,31838],{"class":3021},[39,43032,31841],{"class":45},[39,43034,43035],{"class":41,"line":3662},[39,43036,43037],{"class":102},"    # 必须把Inception导入到里边\n",[39,43039,43040,43042,43044],{"class":41,"line":3668},[39,43041,31856],{"class":49},[39,43043,31859],{"class":56},[39,43045,43046],{"class":45},"(self,Inception):\n",[39,43048,43049,43051,43054,43056,43058,43060],{"class":41,"line":3674},[39,43050,31872],{"class":56},[39,43052,43053],{"class":45},"(GoogLeNet,",[39,43055,31878],{"class":56},[39,43057,31881],{"class":45},[39,43059,31884],{"class":56},[39,43061,3034],{"class":45},[39,43063,43064,43066,43069,43071],{"class":41,"line":3679},[39,43065,31900],{"class":56},[39,43067,43068],{"class":45},".b1",[39,43070,50],{"class":49},[39,43072,39064],{"class":45},[39,43074,43075,43077,43079,43081,43083,43085,43087,43089,43091,43093,43095,43097,43099,43101,43103,43105,43107,43109,43111,43113,43115],{"class":41,"line":9004},[39,43076,39069],{"class":45},[39,43078,31911],{"class":254},[39,43080,50],{"class":49},[39,43082,57],{"class":56},[39,43084,60],{"class":45},[39,43086,31920],{"class":254},[39,43088,50],{"class":49},[39,43090,1416],{"class":56},[39,43092,60],{"class":45},[39,43094,31929],{"class":254},[39,43096,50],{"class":49},[39,43098,1573],{"class":56},[39,43100,60],{"class":45},[39,43102,31984],{"class":254},[39,43104,50],{"class":49},[39,43106,63],{"class":56},[39,43108,60],{"class":45},[39,43110,31938],{"class":254},[39,43112,50],{"class":49},[39,43114,68],{"class":56},[39,43116,39102],{"class":45},[39,43118,43119],{"class":41,"line":9028},[39,43120,39107],{"class":45},[39,43122,43123,43125,43127,43129,43131,43133,43135,43137,43139,43141,43143,43145,43147],{"class":41,"line":9033},[39,43124,39152],{"class":45},[39,43126,31929],{"class":254},[39,43128,50],{"class":49},[39,43130,68],{"class":56},[39,43132,60],{"class":45},[39,43134,31984],{"class":254},[39,43136,50],{"class":49},[39,43138,63],{"class":56},[39,43140,60],{"class":45},[39,43142,31938],{"class":254},[39,43144,50],{"class":49},[39,43146,57],{"class":56},[39,43148,209],{"class":45},[39,43150,43151],{"class":41,"line":9039},[39,43152,39181],{"class":45},[39,43154,43155,43157,43160,43162],{"class":41,"line":9066},[39,43156,31900],{"class":56},[39,43158,43159],{"class":45},".b2",[39,43161,50],{"class":49},[39,43163,39064],{"class":45},[39,43165,43166,43168,43170,43172,43174,43176,43178,43180,43182,43184,43186,43188,43190],{"class":41,"line":9071},[39,43167,39069],{"class":45},[39,43169,31911],{"class":254},[39,43171,50],{"class":49},[39,43173,1416],{"class":56},[39,43175,60],{"class":45},[39,43177,31920],{"class":254},[39,43179,50],{"class":49},[39,43181,1416],{"class":56},[39,43183,60],{"class":45},[39,43185,31929],{"class":254},[39,43187,50],{"class":49},[39,43189,57],{"class":56},[39,43191,39102],{"class":45},[39,43193,43194],{"class":41,"line":9077},[39,43195,39107],{"class":45},[39,43197,43198,43200,43202,43204,43206,43208,43210,43212,43215,43217,43219,43221,43223,43225,43227,43229,43231],{"class":41,"line":9089},[39,43199,39069],{"class":45},[39,43201,31911],{"class":254},[39,43203,50],{"class":49},[39,43205,1416],{"class":56},[39,43207,60],{"class":45},[39,43209,31920],{"class":254},[39,43211,50],{"class":49},[39,43213,43214],{"class":56},"192",[39,43216,60],{"class":45},[39,43218,31929],{"class":254},[39,43220,50],{"class":49},[39,43222,68],{"class":56},[39,43224,60],{"class":45},[39,43226,31938],{"class":254},[39,43228,50],{"class":49},[39,43230,57],{"class":56},[39,43232,39102],{"class":45},[39,43234,43235],{"class":41,"line":9101},[39,43236,39107],{"class":45},[39,43238,43239,43241,43243,43245,43247,43249,43251,43253,43255,43257,43259,43261,43263],{"class":41,"line":9113},[39,43240,39152],{"class":45},[39,43242,31929],{"class":254},[39,43244,50],{"class":49},[39,43246,68],{"class":56},[39,43248,60],{"class":45},[39,43250,31984],{"class":254},[39,43252,50],{"class":49},[39,43254,63],{"class":56},[39,43256,60],{"class":45},[39,43258,31938],{"class":254},[39,43260,50],{"class":49},[39,43262,57],{"class":56},[39,43264,209],{"class":45},[39,43266,43267],{"class":41,"line":10772},[39,43268,39181],{"class":45},[39,43270,43271,43273,43276,43278],{"class":41,"line":10797},[39,43272,31900],{"class":56},[39,43274,43275],{"class":45},".b3",[39,43277,50],{"class":49},[39,43279,39064],{"class":45},[39,43281,43282,43285,43287,43289,43291,43294,43296,43298,43300,43303,43305,43307,43309,43312,43314],{"class":41,"line":10820},[39,43283,43284],{"class":45},"            Inception(",[39,43286,43214],{"class":56},[39,43288,60],{"class":45},[39,43290,1416],{"class":56},[39,43292,43293],{"class":45},",(",[39,43295,1422],{"class":56},[39,43297,60],{"class":45},[39,43299,33125],{"class":56},[39,43301,43302],{"class":45},"),(",[39,43304,1801],{"class":56},[39,43306,60],{"class":45},[39,43308,1410],{"class":56},[39,43310,43311],{"class":45},"),",[39,43313,1410],{"class":56},[39,43315,39102],{"class":45},[39,43317,43318,43320,43322,43324,43326,43328,43330,43332,43334,43336,43338,43340,43342,43344,43346],{"class":41,"line":10844},[39,43319,43284],{"class":45},[39,43321,35925],{"class":56},[39,43323,60],{"class":45},[39,43325,33125],{"class":56},[39,43327,43293],{"class":45},[39,43329,33125],{"class":56},[39,43331,60],{"class":45},[39,43333,43214],{"class":56},[39,43335,43302],{"class":45},[39,43337,1410],{"class":56},[39,43339,60],{"class":45},[39,43341,1422],{"class":56},[39,43343,43311],{"class":45},[39,43345,1416],{"class":56},[39,43347,39102],{"class":45},[39,43349,43350,43352,43354,43356,43358,43360,43362,43364,43366,43368,43370,43372,43374],{"class":41,"line":10849},[39,43351,39152],{"class":45},[39,43353,31929],{"class":254},[39,43355,50],{"class":49},[39,43357,68],{"class":56},[39,43359,60],{"class":45},[39,43361,31984],{"class":254},[39,43363,50],{"class":49},[39,43365,63],{"class":56},[39,43367,60],{"class":45},[39,43369,31938],{"class":254},[39,43371,50],{"class":49},[39,43373,57],{"class":56},[39,43375,209],{"class":45},[39,43377,43378],{"class":41,"line":10854},[39,43379,39181],{"class":45},[39,43381,43382,43384,43387,43389],{"class":41,"line":10859},[39,43383,31900],{"class":56},[39,43385,43386],{"class":45},".b4",[39,43388,50],{"class":49},[39,43390,39064],{"class":45},[39,43392,43393,43395,43398,43400,43402,43404,43406,43408,43411,43413,43415,43417,43419,43421,43423],{"class":41,"line":10868},[39,43394,43284],{"class":45},[39,43396,43397],{"class":56},"480",[39,43399,60],{"class":45},[39,43401,43214],{"class":56},[39,43403,43293],{"class":45},[39,43405,1422],{"class":56},[39,43407,60],{"class":45},[39,43409,43410],{"class":56},"208",[39,43412,43302],{"class":45},[39,43414,1801],{"class":56},[39,43416,60],{"class":45},[39,43418,1807],{"class":56},[39,43420,43311],{"class":45},[39,43422,1416],{"class":56},[39,43424,39102],{"class":45},[39,43426,43427,43429,43431,43433,43435,43437,43439,43441,43443,43445,43447,43449,43451,43453,43455],{"class":41,"line":10873},[39,43428,43284],{"class":45},[39,43430,39512],{"class":56},[39,43432,60],{"class":45},[39,43434,22104],{"class":56},[39,43436,43293],{"class":45},[39,43438,1818],{"class":56},[39,43440,60],{"class":45},[39,43442,32556],{"class":56},[39,43444,43302],{"class":45},[39,43446,1998],{"class":56},[39,43448,60],{"class":45},[39,43450,1416],{"class":56},[39,43452,43311],{"class":45},[39,43454,1416],{"class":56},[39,43456,39102],{"class":45},[39,43458,43459,43461,43463,43465,43467,43469,43471,43473,43475,43477,43479,43481,43483,43485,43487],{"class":41,"line":10879},[39,43460,43284],{"class":45},[39,43462,39512],{"class":56},[39,43464,60],{"class":45},[39,43466,33125],{"class":56},[39,43468,43293],{"class":45},[39,43470,33125],{"class":56},[39,43472,60],{"class":45},[39,43474,35925],{"class":56},[39,43476,43302],{"class":45},[39,43478,1998],{"class":56},[39,43480,60],{"class":45},[39,43482,1416],{"class":56},[39,43484,43311],{"class":45},[39,43486,1416],{"class":56},[39,43488,39102],{"class":45},[39,43490,43491,43493,43495,43497,43499,43501,43503,43505,43508,43510,43512,43514,43516,43518,43520],{"class":41,"line":10900},[39,43492,43284],{"class":45},[39,43494,39512],{"class":56},[39,43496,60],{"class":45},[39,43498,1818],{"class":56},[39,43500,43293],{"class":45},[39,43502,33125],{"class":56},[39,43504,60],{"class":45},[39,43506,43507],{"class":56},"288",[39,43509,43302],{"class":45},[39,43511,1410],{"class":56},[39,43513,60],{"class":45},[39,43515,1416],{"class":56},[39,43517,43311],{"class":45},[39,43519,1416],{"class":56},[39,43521,39102],{"class":45},[39,43523,43524,43526,43529,43531,43533,43535,43537,43539,43542,43544,43546,43548,43550,43552,43554],{"class":41,"line":10906},[39,43525,43284],{"class":45},[39,43527,43528],{"class":56},"528",[39,43530,60],{"class":45},[39,43532,35925],{"class":56},[39,43534,43293],{"class":45},[39,43536,22104],{"class":56},[39,43538,60],{"class":45},[39,43540,43541],{"class":56},"320",[39,43543,43302],{"class":45},[39,43545,1410],{"class":56},[39,43547,60],{"class":45},[39,43549,33125],{"class":56},[39,43551,43311],{"class":45},[39,43553,33125],{"class":56},[39,43555,39102],{"class":45},[39,43557,43558,43560,43562,43564,43566,43568,43570,43572,43574,43576,43578,43580,43582],{"class":41,"line":10920},[39,43559,39152],{"class":45},[39,43561,31929],{"class":254},[39,43563,50],{"class":49},[39,43565,68],{"class":56},[39,43567,60],{"class":45},[39,43569,31984],{"class":254},[39,43571,50],{"class":49},[39,43573,63],{"class":56},[39,43575,60],{"class":45},[39,43577,31938],{"class":254},[39,43579,50],{"class":49},[39,43581,57],{"class":56},[39,43583,209],{"class":45},[39,43585,43586],{"class":41,"line":10926},[39,43587,39181],{"class":45},[39,43589,43590,43592,43595,43597],{"class":41,"line":10953},[39,43591,31900],{"class":56},[39,43593,43594],{"class":45},".b5",[39,43596,50],{"class":49},[39,43598,39064],{"class":45},[39,43600,43601,43603,43606,43608,43610,43612,43614,43616,43618,43620,43622,43624,43626,43628,43630],{"class":41,"line":10962},[39,43602,43284],{"class":45},[39,43604,43605],{"class":56},"832",[39,43607,60],{"class":45},[39,43609,35925],{"class":56},[39,43611,43293],{"class":45},[39,43613,22104],{"class":56},[39,43615,60],{"class":45},[39,43617,43541],{"class":56},[39,43619,43302],{"class":45},[39,43621,1410],{"class":56},[39,43623,60],{"class":45},[39,43625,33125],{"class":56},[39,43627,43311],{"class":45},[39,43629,33125],{"class":56},[39,43631,39102],{"class":45},[39,43633,43634,43636,43638,43640,43642,43644,43646,43648,43650,43652,43654,43656,43658,43660,43662],{"class":41,"line":10968},[39,43635,43284],{"class":45},[39,43637,43605],{"class":56},[39,43639,60],{"class":45},[39,43641,35995],{"class":56},[39,43643,43293],{"class":45},[39,43645,43214],{"class":56},[39,43647,60],{"class":45},[39,43649,35995],{"class":56},[39,43651,43302],{"class":45},[39,43653,1807],{"class":56},[39,43655,60],{"class":45},[39,43657,33125],{"class":56},[39,43659,43311],{"class":45},[39,43661,33125],{"class":56},[39,43663,39102],{"class":45},[39,43665,43666,43669,43671,43673,43675],{"class":41,"line":10976},[39,43667,43668],{"class":45},"            nn.AdaptiveAvgPool2d((",[39,43670,57],{"class":56},[39,43672,60],{"class":45},[39,43674,57],{"class":56},[39,43676,43677],{"class":45},")),\n",[39,43679,43680],{"class":41,"line":10981},[39,43681,39845],{"class":45},[39,43683,43684,43686,43689,43691,43693],{"class":41,"line":17660},[39,43685,39850],{"class":45},[39,43687,43688],{"class":56},"1024",[39,43690,60],{"class":45},[39,43692,146],{"class":56},[39,43694,209],{"class":45},[39,43696,43697],{"class":41,"line":17666},[39,43698,39181],{"class":45},[39,43700,43701],{"class":41,"line":17689},[39,43702,43703],{"class":102},"        # 对模型参数初始化\n",[39,43705,43706,43708,43710,43712,43714],{"class":41,"line":17695},[39,43707,4461],{"class":49},[39,43709,39923],{"class":45},[39,43711,27100],{"class":49},[39,43713,39928],{"class":56},[39,43715,39931],{"class":45},[39,43717,43718,43720,43722],{"class":41,"line":17718},[39,43719,5700],{"class":49},[39,43721,39943],{"class":56},[39,43723,39946],{"class":45},[39,43725,43726,43728,43731,43733,43736,43738,43740,43742,43744],{"class":41,"line":17732},[39,43727,39956],{"class":45},[39,43729,43730],{"class":254},"mode",[39,43732,50],{"class":49},[39,43734,43735],{"class":1319},"'fan_out'",[39,43737,60],{"class":45},[39,43739,39959],{"class":254},[39,43741,50],{"class":49},[39,43743,39964],{"class":1319},[39,43745,209],{"class":45},[39,43747,43748],{"class":41,"line":17752},[39,43749,43750],{"class":102},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[39,43752,43753],{"class":41,"line":17758},[39,43754,43755],{"class":102},"                # ② mode = 'fan_out'决定使用的fan值：\n",[39,43757,43758],{"class":41,"line":17769},[39,43759,43760],{"class":102},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[39,43762,43763],{"class":41,"line":17792},[39,43764,43765],{"class":102},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[39,43767,43768],{"class":41,"line":17814},[39,43769,43770],{"class":102},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[39,43772,43773],{"class":41,"line":17819},[39,43774,43775],{"class":102},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[39,43777,43778,43780,43782,43784,43786,43788],{"class":41,"line":17825},[39,43779,39976],{"class":49},[39,43781,39979],{"class":45},[39,43783,39982],{"class":49},[39,43785,39985],{"class":49},[39,43787,39988],{"class":56},[39,43789,4797],{"class":45},[39,43791,43792,43794,43796],{"class":41,"line":17839},[39,43793,40000],{"class":45},[39,43795,260],{"class":56},[39,43797,209],{"class":45},[39,43799,43800,43803,43805],{"class":41,"line":17852},[39,43801,43802],{"class":49},"                elif",[39,43804,39943],{"class":56},[39,43806,40019],{"class":45},[39,43808,43809,43812,43814,43816,43818],{"class":41,"line":17857},[39,43810,43811],{"class":45},"                    nn.init.normal_(m.weight,",[39,43813,260],{"class":56},[39,43815,60],{"class":45},[39,43817,40041],{"class":56},[39,43819,209],{"class":45},[39,43821,43822,43825,43827,43829,43831,43833],{"class":41,"line":17871},[39,43823,43824],{"class":49},"                    if",[39,43826,39979],{"class":45},[39,43828,39982],{"class":49},[39,43830,39985],{"class":49},[39,43832,39988],{"class":56},[39,43834,4797],{"class":45},[39,43836,43837,43840,43842],{"class":41,"line":17876},[39,43838,43839],{"class":45},"                        nn.init.constant_(m.bias,",[39,43841,260],{"class":56},[39,43843,209],{"class":45},[39,43845,43846],{"class":41,"line":17882},[39,43847,36220],{"class":102},[39,43849,43850,43852,43854],{"class":41,"line":17887},[39,43851,31856],{"class":49},[39,43853,32148],{"class":3021},[39,43855,32151],{"class":45},[39,43857,43858,43860,43862,43864],{"class":41,"line":17901},[39,43859,32156],{"class":45},[39,43861,50],{"class":49},[39,43863,31878],{"class":56},[39,43865,43866],{"class":45},".b1(x)\n",[39,43868,43869,43871,43873,43875],{"class":41,"line":17906},[39,43870,32156],{"class":45},[39,43872,50],{"class":49},[39,43874,31878],{"class":56},[39,43876,43877],{"class":45},".b2(x)\n",[39,43879,43880,43882,43884,43886],{"class":41,"line":17911},[39,43881,32156],{"class":45},[39,43883,50],{"class":49},[39,43885,31878],{"class":56},[39,43887,43888],{"class":45},".b3(x)\n",[39,43890,43891,43893,43895,43897],{"class":41,"line":17925},[39,43892,32156],{"class":45},[39,43894,50],{"class":49},[39,43896,31878],{"class":56},[39,43898,43899],{"class":45},".b4(x)\n",[39,43901,43902,43904,43906,43908],{"class":41,"line":17937},[39,43903,32156],{"class":45},[39,43905,50],{"class":49},[39,43907,31878],{"class":56},[39,43909,43910],{"class":45},".b5(x)\n",[39,43912,43913,43915],{"class":41,"line":17942},[39,43914,15808],{"class":49},[39,43916,32264],{"class":45},[39,43918,43919],{"class":41,"line":17955},[39,43920,3458],{"emptyLinePlaceholder":1145},[39,43922,43923],{"class":41,"line":17960},[39,43924,43925],{"class":102},"# 模型展示\n",[39,43927,43928,43930,43932,43934,43936],{"class":41,"line":17965},[39,43929,2596],{"class":49},[39,43931,32275],{"class":56},[39,43933,4007],{"class":49},[39,43935,32280],{"class":1319},[39,43937,4797],{"class":45},[39,43939,43940,43942,43944,43946,43948,43950,43952,43954,43956],{"class":41,"line":17970},[39,43941,32292],{"class":45},[39,43943,50],{"class":49},[39,43945,31506],{"class":45},[39,43947,32299],{"class":1319},[39,43949,2762],{"class":49},[39,43951,32304],{"class":45},[39,43953,2759],{"class":49},[39,43955,31531],{"class":1319},[39,43957,209],{"class":45},[39,43959,43960,43962,43964],{"class":41,"line":17983},[39,43961,32344],{"class":45},[39,43963,50],{"class":49},[39,43965,43966],{"class":45},"GoogLeNet(Inception).to(device)\n",[39,43968,43969,43971,43973,43975,43977,43979,43981,43983],{"class":41,"line":17988},[39,43970,32354],{"class":56},[39,43972,32357],{"class":45},[39,43974,57],{"class":56},[39,43976,60],{"class":45},[39,43978,32556],{"class":56},[39,43980,60],{"class":45},[39,43982,32556],{"class":56},[39,43984,32370],{"class":45},[1171,43986,43987],{"start":74},[1174,43988,40238],{},[29,43990,43992],{"className":31,"code":43991,"language":33,"meta":34,"style":34},"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",[36,43993,43994,44000,44006,44016,44022,44032,44042,44052,44062,44072,44076,44087,44097,44101,44105,44109,44117,44129,44139,44155,44165,44197,44211,44221,44231,44235,44245,44259,44269,44279,44289,44295,44299,44303,44307,44311,44315,44323,44343,44347,44351,44355,44359,44363,44379,44383,44387,44395,44399,44403,44411,44415,44419,44423,44431,44435,44439,44443,44447,44455,44459,44467,44471,44479,44483,44491,44495,44503,44507,44511,44519,44523,44527,44531,44543,44567,44581,44585,44589,44593,44601,44605,44613,44617,44625,44629,44637,44641,44649,44653,44661,44665,44677,44681,44689,44693,44701,44705,44709,44713,44717,44725,44729,44745,44749,44757,44761,44765,44769,44773,44777,44781,44785,44801,44805,44817,44821,44833,44837,44849,44853,44861,44865,44873,44877,44881,44885,44891,44895,44903,44907,44923,44927,44935,44939,44955,44967,44971,44983,44987,44991,44999,45003,45007,45015,45019,45027,45031,45039,45043,45047,45089,45131,45135,45139,45155,45159,45175,45179,45183,45191,45195,45199,45211,45249,45253,45257,45265,45269,45283,45293,45299,45305,45311,45317,45321,45325,45331,45335,45339,45347,45351,45369,45373,45377,45381,45397,45401,45405,45409,45413,45417,45437,45457,45461,45465,45469,45477,45485,45489,45505,45525,45545,45549,45553,45561,45569,45573,45577,45581,45593,45597,45607,45615,45632],{"__ignoreMap":34},[39,43995,43996,43998],{"class":41,"line":42},[39,43997,31447],{"class":49},[39,43999,32877],{"class":45},[39,44001,44002,44004],{"class":41,"line":74},[39,44003,31447],{"class":49},[39,44005,32884],{"class":45},[39,44007,44008,44010,44012,44014],{"class":41,"line":99},[39,44009,31447],{"class":49},[39,44011,32895],{"class":45},[39,44013,32438],{"class":49},[39,44015,32900],{"class":45},[39,44017,44018,44020],{"class":41,"line":106},[39,44019,31447],{"class":49},[39,44021,31450],{"class":45},[39,44023,44024,44026,44028,44030],{"class":41,"line":112},[39,44025,31792],{"class":49},[39,44027,32470],{"class":45},[39,44029,31447],{"class":49},[39,44031,32917],{"class":45},[39,44033,44034,44036,44038,44040],{"class":41,"line":118},[39,44035,31792],{"class":49},[39,44037,32423],{"class":45},[39,44039,31447],{"class":49},[39,44041,32428],{"class":45},[39,44043,44044,44046,44048,44050],{"class":41,"line":413},[39,44045,31792],{"class":49},[39,44047,32453],{"class":45},[39,44049,31447],{"class":49},[39,44051,32458],{"class":45},[39,44053,44054,44056,44058,44060],{"class":41,"line":419},[39,44055,31447],{"class":49},[39,44057,32470],{"class":45},[39,44059,32438],{"class":49},[39,44061,32475],{"class":45},[39,44063,44064,44066,44068,44070],{"class":41,"line":425},[39,44065,31447],{"class":49},[39,44067,32487],{"class":45},[39,44069,32438],{"class":49},[39,44071,32492],{"class":45},[39,44073,44074],{"class":41,"line":443},[39,44075,32962],{"class":102},[39,44077,44078,44080,44082,44084],{"class":41,"line":449},[39,44079,31792],{"class":49},[39,44081,32969],{"class":45},[39,44083,31447],{"class":49},[39,44085,44086],{"class":45}," GoogLeNet, Inception\n",[39,44088,44089,44091,44093,44095],{"class":41,"line":455},[39,44090,31792],{"class":49},[39,44092,31795],{"class":45},[39,44094,31447],{"class":49},[39,44096,31800],{"class":45},[39,44098,44099],{"class":41,"line":461},[39,44100,3458],{"emptyLinePlaceholder":1145},[39,44102,44103],{"class":41,"line":475},[39,44104,3458],{"emptyLinePlaceholder":1145},[39,44106,44107],{"class":41,"line":665},[39,44108,32997],{"class":102},[39,44110,44111,44113,44115],{"class":41,"line":671},[39,44112,33002],{"class":49},[39,44114,33005],{"class":3021},[39,44116,33008],{"class":45},[39,44118,44119,44121,44123,44125,44127],{"class":41,"line":684},[39,44120,33013],{"class":45},[39,44122,50],{"class":49},[39,44124,32510],{"class":45},[39,44126,32518],{"class":1319},[39,44128,32521],{"class":45},[39,44130,44131,44133,44135,44137],{"class":41,"line":2732},[39,44132,33026],{"class":254},[39,44134,50],{"class":49},[39,44136,32531],{"class":56},[39,44138,32521],{"class":45},[39,44140,44141,44143,44145,44147,44149,44151,44153],{"class":41,"line":2737},[39,44142,33037],{"class":254},[39,44144,50],{"class":49},[39,44146,32548],{"class":45},[39,44148,32551],{"class":254},[39,44150,50],{"class":49},[39,44152,36504],{"class":56},[39,44154,32559],{"class":45},[39,44156,44157,44159,44161,44163],{"class":41,"line":2751},[39,44158,33054],{"class":254},[39,44160,50],{"class":49},[39,44162,32531],{"class":56},[39,44164,209],{"class":45},[39,44166,44167,44169,44171,44173,44175,44177,44179,44181,44183,44185,44187,44189,44191,44193,44195],{"class":41,"line":2756},[39,44168,33065],{"class":45},[39,44170,50],{"class":49},[39,44172,33070],{"class":45},[39,44174,33073],{"class":56},[39,44176,1221],{"class":45},[39,44178,33078],{"class":56},[39,44180,1657],{"class":49},[39,44182,8414],{"class":56},[39,44184,33085],{"class":45},[39,44186,33073],{"class":56},[39,44188,1221],{"class":45},[39,44190,33092],{"class":56},[39,44192,1657],{"class":49},[39,44194,8414],{"class":56},[39,44196,33099],{"class":45},[39,44198,44199,44201,44203,44205,44207,44209],{"class":41,"line":2785},[39,44200,33104],{"class":45},[39,44202,50],{"class":49},[39,44204,33109],{"class":45},[39,44206,32592],{"class":254},[39,44208,50],{"class":49},[39,44210,32597],{"class":45},[39,44212,44213,44215,44217,44219],{"class":41,"line":2790},[39,44214,33120],{"class":254},[39,44216,50],{"class":49},[39,44218,1410],{"class":56},[39,44220,32521],{"class":45},[39,44222,44223,44225,44227,44229],{"class":41,"line":2807},[39,44224,33132],{"class":254},[39,44226,50],{"class":49},[39,44228,32531],{"class":56},[39,44230,32521],{"class":45},[39,44232,44233],{"class":41,"line":2812},[39,44234,33143],{"class":102},[39,44236,44237,44239,44241,44243],{"class":41,"line":2817},[39,44238,33148],{"class":254},[39,44240,50],{"class":49},[39,44242,1598],{"class":56},[39,44244,209],{"class":45},[39,44246,44247,44249,44251,44253,44255,44257],{"class":41,"line":2822},[39,44248,33159],{"class":45},[39,44250,50],{"class":49},[39,44252,32589],{"class":45},[39,44254,32592],{"class":254},[39,44256,50],{"class":49},[39,44258,33170],{"class":45},[39,44260,44261,44263,44265,44267],{"class":41,"line":2836},[39,44262,33175],{"class":254},[39,44264,50],{"class":49},[39,44266,1410],{"class":56},[39,44268,32521],{"class":45},[39,44270,44271,44273,44275,44277],{"class":41,"line":2841},[39,44272,33186],{"class":254},[39,44274,50],{"class":49},[39,44276,32531],{"class":56},[39,44278,32521],{"class":45},[39,44280,44281,44283,44285,44287],{"class":41,"line":3635},[39,44282,33197],{"class":254},[39,44284,50],{"class":49},[39,44286,1598],{"class":56},[39,44288,209],{"class":45},[39,44290,44291,44293],{"class":41,"line":3649},[39,44292,5148],{"class":49},[39,44294,33210],{"class":45},[39,44296,44297],{"class":41,"line":3657},[39,44298,3458],{"emptyLinePlaceholder":1145},[39,44300,44301],{"class":41,"line":3662},[39,44302,33219],{"class":102},[39,44304,44305],{"class":41,"line":3668},[39,44306,33224],{"class":102},[39,44308,44309],{"class":41,"line":3674},[39,44310,3458],{"emptyLinePlaceholder":1145},[39,44312,44313],{"class":41,"line":3679},[39,44314,33233],{"class":102},[39,44316,44317,44319,44321],{"class":41,"line":9004},[39,44318,33002],{"class":49},[39,44320,33240],{"class":3021},[39,44322,33243],{"class":45},[39,44324,44325,44327,44329,44331,44333,44335,44337,44339,44341],{"class":41,"line":9028},[39,44326,32292],{"class":45},[39,44328,50],{"class":49},[39,44330,31506],{"class":45},[39,44332,32299],{"class":1319},[39,44334,2762],{"class":49},[39,44336,32304],{"class":45},[39,44338,2759],{"class":49},[39,44340,33262],{"class":1319},[39,44342,209],{"class":45},[39,44344,44345],{"class":41,"line":9033},[39,44346,3458],{"emptyLinePlaceholder":1145},[39,44348,44349],{"class":41,"line":9039},[39,44350,3458],{"emptyLinePlaceholder":1145},[39,44352,44353],{"class":41,"line":9066},[39,44354,33277],{"class":102},[39,44356,44357],{"class":41,"line":9071},[39,44358,33282],{"class":102},[39,44360,44361],{"class":41,"line":9077},[39,44362,33287],{"class":102},[39,44364,44365,44367,44369,44371,44373,44375,44377],{"class":41,"line":9089},[39,44366,33292],{"class":45},[39,44368,50],{"class":49},[39,44370,33297],{"class":45},[39,44372,33300],{"class":254},[39,44374,50],{"class":49},[39,44376,33305],{"class":56},[39,44378,209],{"class":45},[39,44380,44381],{"class":41,"line":9101},[39,44382,3458],{"emptyLinePlaceholder":1145},[39,44384,44385],{"class":41,"line":9113},[39,44386,33316],{"class":102},[39,44388,44389,44391,44393],{"class":41,"line":10772},[39,44390,33321],{"class":45},[39,44392,50],{"class":49},[39,44394,33326],{"class":45},[39,44396,44397],{"class":41,"line":10797},[39,44398,3458],{"emptyLinePlaceholder":1145},[39,44400,44401],{"class":41,"line":10820},[39,44402,33335],{"class":102},[39,44404,44405,44407,44409],{"class":41,"line":10844},[39,44406,32344],{"class":45},[39,44408,50],{"class":49},[39,44410,33344],{"class":45},[39,44412,44413],{"class":41,"line":10849},[39,44414,33349],{"class":102},[39,44416,44417],{"class":41,"line":10854},[39,44418,33354],{"class":102},[39,44420,44421],{"class":41,"line":10859},[39,44422,33359],{"class":102},[39,44424,44425,44427,44429],{"class":41,"line":10868},[39,44426,33364],{"class":45},[39,44428,50],{"class":49},[39,44430,33369],{"class":45},[39,44432,44433],{"class":41,"line":10873},[39,44434,3458],{"emptyLinePlaceholder":1145},[39,44436,44437],{"class":41,"line":10879},[39,44438,3458],{"emptyLinePlaceholder":1145},[39,44440,44441],{"class":41,"line":10900},[39,44442,33382],{"class":102},[39,44444,44445],{"class":41,"line":10906},[39,44446,33387],{"class":102},[39,44448,44449,44451,44453],{"class":41,"line":10920},[39,44450,33392],{"class":45},[39,44452,50],{"class":49},[39,44454,33397],{"class":56},[39,44456,44457],{"class":41,"line":10926},[39,44458,33402],{"class":102},[39,44460,44461,44463,44465],{"class":41,"line":10953},[39,44462,33407],{"class":45},[39,44464,50],{"class":49},[39,44466,33412],{"class":45},[39,44468,44469],{"class":41,"line":10962},[39,44470,33417],{"class":102},[39,44472,44473,44475,44477],{"class":41,"line":10968},[39,44474,33422],{"class":45},[39,44476,50],{"class":49},[39,44478,33412],{"class":45},[39,44480,44481],{"class":41,"line":10976},[39,44482,33431],{"class":102},[39,44484,44485,44487,44489],{"class":41,"line":10981},[39,44486,33436],{"class":45},[39,44488,50],{"class":49},[39,44490,33412],{"class":45},[39,44492,44493],{"class":41,"line":17660},[39,44494,33445],{"class":102},[39,44496,44497,44499,44501],{"class":41,"line":17666},[39,44498,33450],{"class":45},[39,44500,50],{"class":49},[39,44502,33412],{"class":45},[39,44504,44505],{"class":41,"line":17689},[39,44506,3458],{"emptyLinePlaceholder":1145},[39,44508,44509],{"class":41,"line":17695},[39,44510,33463],{"class":102},[39,44512,44513,44515,44517],{"class":41,"line":17718},[39,44514,33468],{"class":45},[39,44516,50],{"class":49},[39,44518,33473],{"class":45},[39,44520,44521],{"class":41,"line":17732},[39,44522,3458],{"emptyLinePlaceholder":1145},[39,44524,44525],{"class":41,"line":17752},[39,44526,3458],{"emptyLinePlaceholder":1145},[39,44528,44529],{"class":41,"line":17758},[39,44530,33486],{"class":102},[39,44532,44533,44535,44537,44539,44541],{"class":41,"line":17769},[39,44534,4259],{"class":49},[39,44536,33493],{"class":45},[39,44538,27100],{"class":49},[39,44540,33498],{"class":56},[39,44542,33501],{"class":45},[39,44544,44545,44547,44549,44551,44553,44555,44557,44559,44561,44563,44565],{"class":41,"line":17792},[39,44546,33506],{"class":56},[39,44548,1221],{"class":45},[39,44550,33511],{"class":1319},[39,44552,33514],{"class":56},[39,44554,1784],{"class":1319},[39,44556,33514],{"class":56},[39,44558,1462],{"class":1319},[39,44560,33523],{"class":45},[39,44562,1732],{"class":49},[39,44564,57],{"class":56},[39,44566,31552],{"class":45},[39,44568,44569,44571,44573,44575,44577,44579],{"class":41,"line":17814},[39,44570,33506],{"class":56},[39,44572,1221],{"class":45},[39,44574,33538],{"class":1319},[39,44576,1657],{"class":49},[39,44578,146],{"class":56},[39,44580,209],{"class":45},[39,44582,44583],{"class":41,"line":17819},[39,44584,3458],{"emptyLinePlaceholder":1145},[39,44586,44587],{"class":41,"line":17825},[39,44588,33553],{"class":102},[39,44590,44591],{"class":41,"line":17839},[39,44592,33558],{"class":102},[39,44594,44595,44597,44599],{"class":41,"line":17852},[39,44596,33563],{"class":45},[39,44598,50],{"class":49},[39,44600,33397],{"class":56},[39,44602,44603],{"class":41,"line":17857},[39,44604,33572],{"class":102},[39,44606,44607,44609,44611],{"class":41,"line":17871},[39,44608,33577],{"class":45},[39,44610,50],{"class":49},[39,44612,4143],{"class":56},[39,44614,44615],{"class":41,"line":17876},[39,44616,33586],{"class":102},[39,44618,44619,44621,44623],{"class":41,"line":17882},[39,44620,33591],{"class":45},[39,44622,50],{"class":49},[39,44624,33397],{"class":56},[39,44626,44627],{"class":41,"line":17887},[39,44628,33600],{"class":102},[39,44630,44631,44633,44635],{"class":41,"line":17901},[39,44632,33605],{"class":45},[39,44634,50],{"class":49},[39,44636,4143],{"class":56},[39,44638,44639],{"class":41,"line":17906},[39,44640,33614],{"class":102},[39,44642,44643,44645,44647],{"class":41,"line":17911},[39,44644,33619],{"class":45},[39,44646,50],{"class":49},[39,44648,4143],{"class":56},[39,44650,44651],{"class":41,"line":17925},[39,44652,33628],{"class":102},[39,44654,44655,44657,44659],{"class":41,"line":17937},[39,44656,33633],{"class":45},[39,44658,50],{"class":49},[39,44660,4143],{"class":56},[39,44662,44663],{"class":41,"line":17942},[39,44664,33642],{"class":102},[39,44666,44667,44669,44671,44673,44675],{"class":41,"line":17955},[39,44668,4461],{"class":49},[39,44670,32656],{"class":45},[39,44672,27100],{"class":49},[39,44674,32661],{"class":56},[39,44676,33655],{"class":45},[39,44678,44679],{"class":41,"line":17960},[39,44680,33660],{"class":102},[39,44682,44683,44685,44687],{"class":41,"line":17965},[39,44684,33665],{"class":45},[39,44686,50],{"class":49},[39,44688,33670],{"class":45},[39,44690,44691],{"class":41,"line":17970},[39,44692,33675],{"class":102},[39,44694,44695,44697,44699],{"class":41,"line":17983},[39,44696,33680],{"class":45},[39,44698,50],{"class":49},[39,44700,33685],{"class":45},[39,44702,44703],{"class":41,"line":17988},[39,44704,33691],{"class":102},[39,44706,44707],{"class":41,"line":33688},[39,44708,33697],{"class":45},[39,44710,44711],{"class":41,"line":33694},[39,44712,33703],{"class":102},[39,44714,44715],{"class":41,"line":33700},[39,44716,33709],{"class":102},[39,44718,44719,44721,44723],{"class":41,"line":33706},[39,44720,33715],{"class":45},[39,44722,50],{"class":49},[39,44724,33720],{"class":45},[39,44726,44727],{"class":41,"line":33712},[39,44728,33726],{"class":102},[39,44730,44731,44733,44735,44737,44739,44741,44743],{"class":41,"line":33723},[39,44732,33732],{"class":45},[39,44734,50],{"class":49},[39,44736,33737],{"class":45},[39,44738,33740],{"class":254},[39,44740,50],{"class":49},[39,44742,57],{"class":56},[39,44744,209],{"class":45},[39,44746,44747],{"class":41,"line":33729},[39,44748,33752],{"class":102},[39,44750,44751,44753,44755],{"class":41,"line":33749},[39,44752,33758],{"class":45},[39,44754,50],{"class":49},[39,44756,33763],{"class":45},[39,44758,44759],{"class":41,"line":33755},[39,44760,33769],{"class":102},[39,44762,44763],{"class":41,"line":33766},[39,44764,33775],{"class":45},[39,44766,44767],{"class":41,"line":33772},[39,44768,33781],{"class":102},[39,44770,44771],{"class":41,"line":33778},[39,44772,33787],{"class":45},[39,44774,44775],{"class":41,"line":33784},[39,44776,33793],{"class":102},[39,44778,44779],{"class":41,"line":33790},[39,44780,33799],{"class":45},[39,44782,44783],{"class":41,"line":33796},[39,44784,33805],{"class":102},[39,44786,44787,44789,44791,44793,44795,44797,44799],{"class":41,"line":33802},[39,44788,33811],{"class":45},[39,44790,10533],{"class":49},[39,44792,33816],{"class":45},[39,44794,1657],{"class":49},[39,44796,33821],{"class":45},[39,44798,260],{"class":56},[39,44800,209],{"class":45},[39,44802,44803],{"class":41,"line":33808},[39,44804,33831],{"class":102},[39,44806,44807,44809,44811,44813,44815],{"class":41,"line":33828},[39,44808,33837],{"class":45},[39,44810,10533],{"class":49},[39,44812,33842],{"class":45},[39,44814,4007],{"class":49},[39,44816,33847],{"class":45},[39,44818,44819],{"class":41,"line":33834},[39,44820,33853],{"class":102},[39,44822,44823,44825,44827,44829,44831],{"class":41,"line":33850},[39,44824,33859],{"class":45},[39,44826,10533],{"class":49},[39,44828,33821],{"class":45},[39,44830,260],{"class":56},[39,44832,209],{"class":45},[39,44834,44835],{"class":41,"line":33856},[39,44836,33873],{"class":102},[39,44838,44839,44841,44843,44845,44847],{"class":41,"line":33870},[39,44840,4461],{"class":49},[39,44842,33881],{"class":45},[39,44844,27100],{"class":49},[39,44846,32661],{"class":56},[39,44848,33888],{"class":45},[39,44850,44851],{"class":41,"line":33876},[39,44852,33894],{"class":102},[39,44854,44855,44857,44859],{"class":41,"line":33891},[39,44856,33665],{"class":45},[39,44858,50],{"class":49},[39,44860,33670],{"class":45},[39,44862,44863],{"class":41,"line":33897},[39,44864,33909],{"class":102},[39,44866,44867,44869,44871],{"class":41,"line":33906},[39,44868,33680],{"class":45},[39,44870,50],{"class":49},[39,44872,33685],{"class":45},[39,44874,44875],{"class":41,"line":33912},[39,44876,33924],{"class":102},[39,44878,44879],{"class":41,"line":33921},[39,44880,33930],{"class":45},[39,44882,44883],{"class":41,"line":33927},[39,44884,37411],{"class":102},[39,44886,44887,44889],{"class":41,"line":33933},[39,44888,33936],{"class":49},[39,44890,33939],{"class":45},[39,44892,44893],{"class":41,"line":33942},[39,44894,33945],{"class":102},[39,44896,44897,44899,44901],{"class":41,"line":33948},[39,44898,37426],{"class":45},[39,44900,50],{"class":49},[39,44902,33720],{"class":45},[39,44904,44905],{"class":41,"line":33959},[39,44906,33962],{"class":102},[39,44908,44909,44911,44913,44915,44917,44919,44921],{"class":41,"line":33965},[39,44910,37439],{"class":45},[39,44912,50],{"class":49},[39,44914,33737],{"class":45},[39,44916,33740],{"class":254},[39,44918,50],{"class":49},[39,44920,57],{"class":56},[39,44922,209],{"class":45},[39,44924,44925],{"class":41,"line":33984},[39,44926,33987],{"class":102},[39,44928,44929,44931,44933],{"class":41,"line":33990},[39,44930,37460],{"class":45},[39,44932,50],{"class":49},[39,44934,33763],{"class":45},[39,44936,44937],{"class":41,"line":34001},[39,44938,34004],{"class":102},[39,44940,44941,44943,44945,44947,44949,44951,44953],{"class":41,"line":34007},[39,44942,37473],{"class":45},[39,44944,10533],{"class":49},[39,44946,37478],{"class":45},[39,44948,1657],{"class":49},[39,44950,33821],{"class":45},[39,44952,260],{"class":56},[39,44954,209],{"class":45},[39,44956,44957,44959,44961,44963,44965],{"class":41,"line":34027},[39,44958,37491],{"class":45},[39,44960,10533],{"class":49},[39,44962,33842],{"class":45},[39,44964,4007],{"class":49},[39,44966,33847],{"class":45},[39,44968,44969],{"class":41,"line":34043},[39,44970,37504],{"class":102},[39,44972,44973,44975,44977,44979,44981],{"class":41,"line":34049},[39,44974,37509],{"class":45},[39,44976,10533],{"class":49},[39,44978,33821],{"class":45},[39,44980,260],{"class":56},[39,44982,209],{"class":45},[39,44984,44985],{"class":41,"line":34063},[39,44986,34066],{"class":102},[39,44988,44989],{"class":41,"line":34069},[39,44990,34072],{"class":102},[39,44992,44993,44995,44997],{"class":41,"line":34075},[39,44994,34078],{"class":45},[39,44996,1784],{"class":49},[39,44998,34083],{"class":45},[39,45000,45001],{"class":41,"line":34086},[39,45002,34089],{"class":102},[39,45004,45005],{"class":41,"line":34092},[39,45006,34095],{"class":102},[39,45008,45009,45011,45013],{"class":41,"line":34098},[39,45010,34101],{"class":45},[39,45012,1784],{"class":49},[39,45014,34083],{"class":45},[39,45016,45017],{"class":41,"line":34108},[39,45018,34111],{"class":102},[39,45020,45021,45023,45025],{"class":41,"line":34114},[39,45022,34117],{"class":45},[39,45024,1784],{"class":49},[39,45026,34122],{"class":45},[39,45028,45029],{"class":41,"line":34125},[39,45030,34128],{"class":102},[39,45032,45033,45035,45037],{"class":41,"line":34131},[39,45034,34134],{"class":45},[39,45036,1784],{"class":49},[39,45038,34122],{"class":45},[39,45040,45041],{"class":41,"line":34141},[39,45042,3458],{"emptyLinePlaceholder":1145},[39,45044,45045],{"class":41,"line":34146},[39,45046,34149],{"class":102},[39,45048,45049,45051,45053,45055,45057,45059,45061,45063,45065,45067,45069,45071,45073,45075,45077,45079,45081,45083,45085,45087],{"class":41,"line":34152},[39,45050,33506],{"class":56},[39,45052,1221],{"class":45},[39,45054,4650],{"class":1319},[39,45056,33514],{"class":56},[39,45058,34163],{"class":1319},[39,45060,2094],{"class":56},[39,45062,34168],{"class":49},[39,45064,2144],{"class":56},[39,45066,34173],{"class":1319},[39,45068,2094],{"class":56},[39,45070,34168],{"class":49},[39,45072,2144],{"class":56},[39,45074,4650],{"class":1319},[39,45076,34184],{"class":45},[39,45078,1732],{"class":49},[39,45080,57],{"class":56},[39,45082,34191],{"class":45},[39,45084,1732],{"class":49},[39,45086,57],{"class":56},[39,45088,34198],{"class":45},[39,45090,45091,45093,45095,45097,45099,45101,45103,45105,45107,45109,45111,45113,45115,45117,45119,45121,45123,45125,45127,45129],{"class":41,"line":34201},[39,45092,33506],{"class":56},[39,45094,1221],{"class":45},[39,45096,4650],{"class":1319},[39,45098,33514],{"class":56},[39,45100,34212],{"class":1319},[39,45102,2094],{"class":56},[39,45104,34168],{"class":49},[39,45106,2144],{"class":56},[39,45108,34221],{"class":1319},[39,45110,2094],{"class":56},[39,45112,34168],{"class":49},[39,45114,2144],{"class":56},[39,45116,4650],{"class":1319},[39,45118,34232],{"class":45},[39,45120,1732],{"class":49},[39,45122,57],{"class":56},[39,45124,34239],{"class":45},[39,45126,1732],{"class":49},[39,45128,57],{"class":56},[39,45130,34198],{"class":45},[39,45132,45133],{"class":41,"line":34248},[39,45134,3458],{"emptyLinePlaceholder":1145},[39,45136,45137],{"class":41,"line":34253},[39,45138,34256],{"class":102},[39,45140,45141,45143,45145,45147,45149,45151,45153],{"class":41,"line":34259},[39,45142,3555],{"class":49},[39,45144,34264],{"class":45},[39,45146,1732],{"class":49},[39,45148,57],{"class":56},[39,45150,2138],{"class":45},[39,45152,2158],{"class":49},[39,45154,34275],{"class":45},[39,45156,45157],{"class":41,"line":34278},[39,45158,34281],{"class":102},[39,45160,45161,45163,45165,45167,45169,45171,45173],{"class":41,"line":34284},[39,45162,34287],{"class":45},[39,45164,1259],{"class":56},[39,45166,50],{"class":49},[39,45168,34294],{"class":45},[39,45170,1732],{"class":49},[39,45172,57],{"class":56},[39,45174,34301],{"class":45},[39,45176,45177],{"class":41,"line":34304},[39,45178,34307],{"class":102},[39,45180,45181],{"class":41,"line":34310},[39,45182,34313],{"class":102},[39,45184,45185,45187,45189],{"class":41,"line":34316},[39,45186,34319],{"class":45},[39,45188,50],{"class":49},[39,45190,33369],{"class":45},[39,45192,45193],{"class":41,"line":34326},[39,45194,3458],{"emptyLinePlaceholder":1145},[39,45196,45197],{"class":41,"line":34331},[39,45198,34334],{"class":102},[39,45200,45201,45203,45205,45207,45209],{"class":41,"line":34337},[39,45202,34340],{"class":45},[39,45204,50],{"class":49},[39,45206,34345],{"class":45},[39,45208,1732],{"class":49},[39,45210,34350],{"class":45},[39,45212,45213,45215,45217,45219,45221,45223,45225,45227,45229,45231,45233,45235,45237,45239,45241,45243,45245,45247],{"class":41,"line":34353},[39,45214,33506],{"class":56},[39,45216,1221],{"class":45},[39,45218,34360],{"class":1319},[39,45220,2094],{"class":56},[39,45222,34365],{"class":49},[39,45224,2144],{"class":56},[39,45226,1744],{"class":1319},[39,45228,2094],{"class":56},[39,45230,34365],{"class":49},[39,45232,2144],{"class":56},[39,45234,34378],{"class":1319},[39,45236,34381],{"class":45},[39,45238,34384],{"class":49},[39,45240,2105],{"class":56},[39,45242,34389],{"class":45},[39,45244,1534],{"class":49},[39,45246,2105],{"class":56},[39,45248,31552],{"class":45},[39,45250,45251],{"class":41,"line":34398},[39,45252,37788],{"class":102},[39,45254,45255],{"class":41,"line":34404},[39,45256,37793],{"class":102},[39,45258,45259,45261,45263],{"class":41,"line":34410},[39,45260,37798],{"class":45},[39,45262,34422],{"class":1319},[39,45264,209],{"class":45},[39,45266,45267],{"class":41,"line":34416},[39,45268,34442],{"class":102},[39,45270,45271,45273,45275,45277,45279,45281],{"class":41,"line":34427},[39,45272,34448],{"class":45},[39,45274,50],{"class":49},[39,45276,34453],{"class":45},[39,45278,34456],{"class":254},[39,45280,50],{"class":49},[39,45282,2611],{"class":45},[39,45284,45285,45287,45289,45291],{"class":41,"line":34433},[39,45286,34466],{"class":1319},[39,45288,2057],{"class":45},[39,45290,34471],{"class":56},[39,45292,34474],{"class":45},[39,45294,45295,45297],{"class":41,"line":34439},[39,45296,34480],{"class":1319},[39,45298,34483],{"class":45},[39,45300,45301,45303],{"class":41,"line":34445},[39,45302,34489],{"class":1319},[39,45304,34492],{"class":45},[39,45306,45307,45309],{"class":41,"line":34463},[39,45308,34498],{"class":1319},[39,45310,34501],{"class":45},[39,45312,45313,45315],{"class":41,"line":34477},[39,45314,34507],{"class":1319},[39,45316,34510],{"class":45},[39,45318,45319],{"class":41,"line":34486},[39,45320,34516],{"class":45},[39,45322,45323],{"class":41,"line":34495},[39,45324,34522],{"class":102},[39,45326,45327,45329],{"class":41,"line":34504},[39,45328,5148],{"class":49},[39,45330,34530],{"class":45},[39,45332,45333],{"class":41,"line":34513},[39,45334,3458],{"emptyLinePlaceholder":1145},[39,45336,45337],{"class":41,"line":34519},[39,45338,34541],{"class":102},[39,45340,45341,45343,45345],{"class":41,"line":34525},[39,45342,33002],{"class":49},[39,45344,34549],{"class":3021},[39,45346,34552],{"class":45},[39,45348,45349],{"class":41,"line":34533},[39,45350,34558],{"class":102},[39,45352,45353,45355,45357,45359,45361,45363,45365,45367],{"class":41,"line":34538},[39,45354,34564],{"class":45},[39,45356,32748],{"class":254},[39,45358,50],{"class":49},[39,45360,1221],{"class":45},[39,45362,1699],{"class":56},[39,45364,60],{"class":45},[39,45366,84],{"class":56},[39,45368,31552],{"class":45},[39,45370,45371],{"class":41,"line":34544},[39,45372,34584],{"class":102},[39,45374,45375],{"class":41,"line":34555},[39,45376,34590],{"class":102},[39,45378,45379],{"class":41,"line":34561},[39,45380,34596],{"class":102},[39,45382,45383,45385,45387,45389,45391,45393,45395],{"class":41,"line":34581},[39,45384,32782],{"class":45},[39,45386,57],{"class":56},[39,45388,60],{"class":45},[39,45390,63],{"class":56},[39,45392,60],{"class":45},[39,45394,57],{"class":56},[39,45396,209],{"class":45},[39,45398,45399],{"class":41,"line":34587},[39,45400,34619],{"class":102},[39,45402,45403],{"class":41,"line":34593},[39,45404,34625],{"class":102},[39,45406,45407],{"class":41,"line":34599},[39,45408,34631],{"class":102},[39,45410,45411],{"class":41,"line":34616},[39,45412,34637],{"class":102},[39,45414,45415],{"class":41,"line":34622},[39,45416,34643],{"class":102},[39,45418,45419,45421,45423,45425,45427,45429,45431,45433,45435],{"class":41,"line":34628},[39,45420,34649],{"class":45},[39,45422,34652],{"class":1319},[39,45424,34655],{"class":45},[39,45426,34658],{"class":1319},[39,45428,60],{"class":45},[39,45430,34663],{"class":254},[39,45432,50],{"class":49},[39,45434,34668],{"class":1319},[39,45436,209],{"class":45},[39,45438,45439,45441,45443,45445,45447,45449,45451,45453,45455],{"class":41,"line":34634},[39,45440,34649],{"class":45},[39,45442,34652],{"class":1319},[39,45444,34680],{"class":45},[39,45446,34683],{"class":1319},[39,45448,60],{"class":45},[39,45450,34663],{"class":254},[39,45452,50],{"class":49},[39,45454,34692],{"class":1319},[39,45456,209],{"class":45},[39,45458,45459],{"class":41,"line":34640},[39,45460,34700],{"class":102},[39,45462,45463],{"class":41,"line":34646},[39,45464,34706],{"class":45},[39,45466,45467],{"class":41,"line":34673},[39,45468,34712],{"class":102},[39,45470,45471,45473,45475],{"class":41,"line":34697},[39,45472,34718],{"class":45},[39,45474,34721],{"class":1319},[39,45476,209],{"class":45},[39,45478,45479,45481,45483],{"class":41,"line":34703},[39,45480,34729],{"class":45},[39,45482,34732],{"class":1319},[39,45484,209],{"class":45},[39,45486,45487],{"class":41,"line":34709},[39,45488,34740],{"class":102},[39,45490,45491,45493,45495,45497,45499,45501,45503],{"class":41,"line":34715},[39,45492,32782],{"class":45},[39,45494,57],{"class":56},[39,45496,60],{"class":45},[39,45498,63],{"class":56},[39,45500,60],{"class":45},[39,45502,63],{"class":56},[39,45504,209],{"class":45},[39,45506,45507,45509,45511,45513,45515,45517,45519,45521,45523],{"class":41,"line":34726},[39,45508,34649],{"class":45},[39,45510,34652],{"class":1319},[39,45512,34767],{"class":45},[39,45514,34658],{"class":1319},[39,45516,60],{"class":45},[39,45518,34663],{"class":254},[39,45520,50],{"class":49},[39,45522,34778],{"class":1319},[39,45524,209],{"class":45},[39,45526,45527,45529,45531,45533,45535,45537,45539,45541,45543],{"class":41,"line":34737},[39,45528,34649],{"class":45},[39,45530,34652],{"class":1319},[39,45532,34790],{"class":45},[39,45534,34683],{"class":1319},[39,45536,60],{"class":45},[39,45538,34663],{"class":254},[39,45540,50],{"class":49},[39,45542,34801],{"class":1319},[39,45544,209],{"class":45},[39,45546,45547],{"class":41,"line":34743},[39,45548,34809],{"class":102},[39,45550,45551],{"class":41,"line":34760},[39,45552,34706],{"class":45},[39,45554,45555,45557,45559],{"class":41,"line":34783},[39,45556,34718],{"class":45},[39,45558,34652],{"class":1319},[39,45560,209],{"class":45},[39,45562,45563,45565,45567],{"class":41,"line":34806},[39,45564,34729],{"class":45},[39,45566,34831],{"class":1319},[39,45568,209],{"class":45},[39,45570,45571],{"class":41,"line":34812},[39,45572,34839],{"class":45},[39,45574,45575],{"class":41,"line":34817},[39,45576,3458],{"emptyLinePlaceholder":1145},[39,45578,45579],{"class":41,"line":34826},[39,45580,34850],{"class":102},[39,45582,45583,45585,45587,45589,45591],{"class":41,"line":34836},[39,45584,2596],{"class":49},[39,45586,32275],{"class":56},[39,45588,4007],{"class":49},[39,45590,32280],{"class":1319},[39,45592,4797],{"class":45},[39,45594,45595],{"class":41,"line":34842},[39,45596,34869],{"class":102},[39,45598,45599,45602,45604],{"class":41,"line":34847},[39,45600,45601],{"class":45},"    GoogLeNet",[39,45603,50],{"class":49},[39,45605,45606],{"class":45},"GoogLeNet(Inception)\n",[39,45608,45609,45611,45613],{"class":41,"line":34853},[39,45610,34886],{"class":45},[39,45612,50],{"class":49},[39,45614,34891],{"class":45},[39,45616,45617,45619,45621,45624,45626,45628,45630],{"class":41,"line":34866},[39,45618,34448],{"class":45},[39,45620,50],{"class":49},[39,45622,45623],{"class":45},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[39,45625,34904],{"class":254},[39,45627,50],{"class":49},[39,45629,2149],{"class":56},[39,45631,209],{"class":45},[39,45633,45634],{"class":41,"line":34872},[39,45635,34916],{"class":45},[1171,45637,45638],{"start":99},[1174,45639,41629],{},[29,45641,45643],{"className":31,"code":45642,"language":33,"meta":34,"style":34},"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",[36,45644,45645,45651,45661,45671,45675,45685,45696,45700,45704,45708,45716,45732,45742,45758,45768,45782,45786,45796,45806,45816,45822,45826,45830,45838,45842,45858,45866,45870,45874,45882,45890,45894,45898,45902,45906,45912,45916,45926,45934,45942,45946,45950,45954,45962,45966,45982,45986,45990,45994,46006,46010,46022,46026,46030,46042,46046,46056,46060,46064,46076,46080,46088,46092,46096,46104,46108,46116,46120,46124,46128,46132,46136,46152,46160,46164,46168,46216,46222,46226,46236,46244,46252,46256,46260,46264,46268,46276,46280,46296,46300,46308,46316],{"__ignoreMap":34},[39,45646,45647,45649],{"class":41,"line":42},[39,45648,31447],{"class":49},[39,45650,31450],{"class":45},[39,45652,45653,45655,45657,45659],{"class":41,"line":74},[39,45654,31447],{"class":49},[39,45656,32470],{"class":45},[39,45658,32438],{"class":49},[39,45660,32475],{"class":45},[39,45662,45663,45665,45667,45669],{"class":41,"line":99},[39,45664,31792],{"class":49},[39,45666,32453],{"class":45},[39,45668,31447],{"class":49},[39,45670,32458],{"class":45},[39,45672,45673],{"class":41,"line":106},[39,45674,34977],{"class":102},[39,45676,45677,45679,45681,45683],{"class":41,"line":112},[39,45678,31792],{"class":49},[39,45680,32423],{"class":45},[39,45682,31447],{"class":49},[39,45684,32428],{"class":45},[39,45686,45687,45689,45691,45693],{"class":41,"line":118},[39,45688,31792],{"class":49},[39,45690,32969],{"class":45},[39,45692,31447],{"class":49},[39,45694,45695],{"class":45}," GoogLeNet,Inception\n",[39,45697,45698],{"class":41,"line":413},[39,45699,3458],{"emptyLinePlaceholder":1145},[39,45701,45702],{"class":41,"line":419},[39,45703,3458],{"emptyLinePlaceholder":1145},[39,45705,45706],{"class":41,"line":425},[39,45707,35006],{"class":102},[39,45709,45710,45712,45714],{"class":41,"line":443},[39,45711,33002],{"class":49},[39,45713,35013],{"class":3021},[39,45715,33008],{"class":45},[39,45717,45718,45720,45722,45724,45726,45728,45730],{"class":41,"line":449},[39,45719,35020],{"class":45},[39,45721,50],{"class":49},[39,45723,32510],{"class":45},[39,45725,32513],{"class":254},[39,45727,50],{"class":49},[39,45729,32518],{"class":1319},[39,45731,32521],{"class":45},[39,45733,45734,45736,45738,45740],{"class":41,"line":455},[39,45735,35037],{"class":254},[39,45737,50],{"class":49},[39,45739,35042],{"class":56},[39,45741,32521],{"class":45},[39,45743,45744,45746,45748,45750,45752,45754,45756],{"class":41,"line":461},[39,45745,35049],{"class":254},[39,45747,50],{"class":49},[39,45749,32548],{"class":45},[39,45751,32551],{"class":254},[39,45753,50],{"class":49},[39,45755,36504],{"class":56},[39,45757,32559],{"class":45},[39,45759,45760,45762,45764,45766],{"class":41,"line":475},[39,45761,35066],{"class":254},[39,45763,50],{"class":49},[39,45765,32531],{"class":56},[39,45767,209],{"class":45},[39,45769,45770,45772,45774,45776,45778,45780],{"class":41,"line":665},[39,45771,35077],{"class":45},[39,45773,50],{"class":49},[39,45775,32589],{"class":45},[39,45777,32592],{"class":254},[39,45779,50],{"class":49},[39,45781,35088],{"class":45},[39,45783,45784],{"class":41,"line":671},[39,45785,35093],{"class":102},[39,45787,45788,45790,45792,45794],{"class":41,"line":684},[39,45789,35098],{"class":254},[39,45791,50],{"class":49},[39,45793,57],{"class":56},[39,45795,32521],{"class":45},[39,45797,45798,45800,45802,45804],{"class":41,"line":2732},[39,45799,35109],{"class":254},[39,45801,50],{"class":49},[39,45803,32531],{"class":56},[39,45805,32521],{"class":45},[39,45807,45808,45810,45812,45814],{"class":41,"line":2737},[39,45809,35120],{"class":254},[39,45811,50],{"class":49},[39,45813,260],{"class":56},[39,45815,209],{"class":45},[39,45817,45818,45820],{"class":41,"line":2751},[39,45819,5148],{"class":49},[39,45821,35133],{"class":45},[39,45823,45824],{"class":41,"line":2756},[39,45825,3458],{"emptyLinePlaceholder":1145},[39,45827,45828],{"class":41,"line":2785},[39,45829,35142],{"class":102},[39,45831,45832,45834,45836],{"class":41,"line":2790},[39,45833,33002],{"class":49},[39,45835,35149],{"class":3021},[39,45837,35152],{"class":45},[39,45839,45840],{"class":41,"line":2807},[39,45841,35157],{"class":102},[39,45843,45844,45846,45848,45850,45852,45854,45856],{"class":41,"line":2812},[39,45845,32292],{"class":45},[39,45847,50],{"class":49},[39,45849,32299],{"class":1319},[39,45851,2762],{"class":49},[39,45853,32304],{"class":45},[39,45855,2759],{"class":49},[39,45857,35174],{"class":1319},[39,45859,45860,45862,45864],{"class":41,"line":2817},[39,45861,32344],{"class":45},[39,45863,50],{"class":49},[39,45865,33344],{"class":45},[39,45867,45868],{"class":41,"line":2822},[39,45869,3458],{"emptyLinePlaceholder":1145},[39,45871,45872],{"class":41,"line":2836},[39,45873,35191],{"class":102},[39,45875,45876,45878,45880],{"class":41,"line":2841},[39,45877,35196],{"class":45},[39,45879,50],{"class":49},[39,45881,33397],{"class":56},[39,45883,45884,45886,45888],{"class":41,"line":3635},[39,45885,35205],{"class":45},[39,45887,50],{"class":49},[39,45889,4143],{"class":56},[39,45891,45892],{"class":41,"line":3649},[39,45893,3458],{"emptyLinePlaceholder":1145},[39,45895,45896],{"class":41,"line":3657},[39,45897,35218],{"class":102},[39,45899,45900],{"class":41,"line":3662},[39,45901,35223],{"class":102},[39,45903,45904],{"class":41,"line":3668},[39,45905,35228],{"class":102},[39,45907,45908,45910],{"class":41,"line":3674},[39,45909,35233],{"class":49},[39,45911,33939],{"class":45},[39,45913,45914],{"class":41,"line":3679},[39,45915,35240],{"class":102},[39,45917,45918,45920,45922,45924],{"class":41,"line":9004},[39,45919,4461],{"class":49},[39,45921,35247],{"class":45},[39,45923,27100],{"class":49},[39,45925,35252],{"class":45},[39,45927,45928,45930,45932],{"class":41,"line":9028},[39,45929,35257],{"class":45},[39,45931,50],{"class":49},[39,45933,35262],{"class":45},[39,45935,45936,45938,45940],{"class":41,"line":9033},[39,45937,35267],{"class":45},[39,45939,50],{"class":49},[39,45941,35272],{"class":45},[39,45943,45944],{"class":41,"line":9039},[39,45945,35277],{"class":102},[39,45947,45948],{"class":41,"line":9066},[39,45949,33930],{"class":45},[39,45951,45952],{"class":41,"line":9071},[39,45953,35286],{"class":102},[39,45955,45956,45958,45960],{"class":41,"line":9077},[39,45957,33715],{"class":45},[39,45959,50],{"class":49},[39,45961,35295],{"class":45},[39,45963,45964],{"class":41,"line":9089},[39,45965,35300],{"class":102},[39,45967,45968,45970,45972,45974,45976,45978,45980],{"class":41,"line":9101},[39,45969,33732],{"class":45},[39,45971,50],{"class":49},[39,45973,33737],{"class":45},[39,45975,33740],{"class":254},[39,45977,50],{"class":49},[39,45979,57],{"class":56},[39,45981,209],{"class":45},[39,45983,45984],{"class":41,"line":9113},[39,45985,35321],{"class":102},[39,45987,45988],{"class":41,"line":10772},[39,45989,35326],{"class":102},[39,45991,45992],{"class":41,"line":10797},[39,45993,35331],{"class":102},[39,45995,45996,45998,46000,46002,46004],{"class":41,"line":10820},[39,45997,35336],{"class":45},[39,45999,10533],{"class":49},[39,46001,33842],{"class":45},[39,46003,4007],{"class":49},[39,46005,35345],{"class":45},[39,46007,46008],{"class":41,"line":10844},[39,46009,35350],{"class":102},[39,46011,46012,46014,46016,46018,46020],{"class":41,"line":10849},[39,46013,35355],{"class":45},[39,46015,10533],{"class":49},[39,46017,35360],{"class":45},[39,46019,260],{"class":56},[39,46021,209],{"class":45},[39,46023,46024],{"class":41,"line":10854},[39,46025,3458],{"emptyLinePlaceholder":1145},[39,46027,46028],{"class":41,"line":10859},[39,46029,35373],{"class":102},[39,46031,46032,46034,46036,46038,46040],{"class":41,"line":10868},[39,46033,35378],{"class":45},[39,46035,50],{"class":49},[39,46037,35383],{"class":45},[39,46039,1784],{"class":49},[39,46041,35388],{"class":45},[39,46043,46044],{"class":41,"line":10873},[39,46045,35393],{"class":102},[39,46047,46048,46050,46052,46054],{"class":41,"line":10879},[39,46049,33506],{"class":56},[39,46051,1221],{"class":45},[39,46053,35402],{"class":1319},[39,46055,35405],{"class":45},[39,46057,46058],{"class":41,"line":10900},[39,46059,3458],{"emptyLinePlaceholder":1145},[39,46061,46062],{"class":41,"line":10906},[39,46063,35414],{"class":102},[39,46065,46066,46068,46070,46072,46074],{"class":41,"line":10920},[39,46067,2596],{"class":49},[39,46069,32275],{"class":56},[39,46071,4007],{"class":49},[39,46073,32280],{"class":1319},[39,46075,4797],{"class":45},[39,46077,46078],{"class":41,"line":10926},[39,46079,35431],{"class":102},[39,46081,46082,46084,46086],{"class":41,"line":10953},[39,46083,32344],{"class":45},[39,46085,50],{"class":49},[39,46087,45606],{"class":45},[39,46089,46090],{"class":41,"line":10962},[39,46091,35444],{"class":102},[39,46093,46094],{"class":41,"line":10968},[39,46095,35449],{"class":102},[39,46097,46098,46100,46102],{"class":41,"line":10976},[39,46099,35454],{"class":45},[39,46101,35457],{"class":1319},[39,46103,31552],{"class":45},[39,46105,46106],{"class":41,"line":10981},[39,46107,35464],{"class":102},[39,46109,46110,46112,46114],{"class":41,"line":17660},[39,46111,35077],{"class":45},[39,46113,50],{"class":49},[39,46115,35473],{"class":45},[39,46117,46118],{"class":41,"line":17666},[39,46119,35478],{"class":102},[39,46121,46122],{"class":41,"line":17689},[39,46123,35483],{"class":45},[39,46125,46126],{"class":41,"line":17695},[39,46127,3458],{"emptyLinePlaceholder":1145},[39,46129,46130],{"class":41,"line":17718},[39,46131,35492],{"class":102},[39,46133,46134],{"class":41,"line":17732},[39,46135,35497],{"class":102},[39,46137,46138,46140,46142,46144,46146,46148,46150],{"class":41,"line":17752},[39,46139,32292],{"class":45},[39,46141,50],{"class":49},[39,46143,32299],{"class":1319},[39,46145,2762],{"class":49},[39,46147,32304],{"class":45},[39,46149,2759],{"class":49},[39,46151,35174],{"class":1319},[39,46153,46154,46156,46158],{"class":41,"line":17758},[39,46155,32344],{"class":45},[39,46157,50],{"class":49},[39,46159,33344],{"class":45},[39,46161,46162],{"class":41,"line":17769},[39,46163,35526],{"class":102},[39,46165,46166],{"class":41,"line":17792},[39,46167,35531],{"class":102},[39,46169,46170,46172,46174,46176,46178,46180,46182,46184,46186,46188,46190,46192,46194,46196,46198,46200,46202,46204,46206,46208,46210,46212,46214],{"class":41,"line":17814},[39,46171,35536],{"class":45},[39,46173,50],{"class":49},[39,46175,2088],{"class":45},[39,46177,35543],{"class":1319},[39,46179,60],{"class":45},[39,46181,35548],{"class":1319},[39,46183,60],{"class":45},[39,46185,35553],{"class":1319},[39,46187,60],{"class":45},[39,46189,35558],{"class":1319},[39,46191,60],{"class":45},[39,46193,35563],{"class":1319},[39,46195,60],{"class":45},[39,46197,35568],{"class":1319},[39,46199,60],{"class":45},[39,46201,35573],{"class":1319},[39,46203,60],{"class":45},[39,46205,35578],{"class":1319},[39,46207,60],{"class":45},[39,46209,35583],{"class":1319},[39,46211,60],{"class":45},[39,46213,35588],{"class":1319},[39,46215,34301],{"class":45},[39,46217,46218,46220],{"class":41,"line":17819},[39,46219,35233],{"class":49},[39,46221,33939],{"class":45},[39,46223,46224],{"class":41,"line":17825},[39,46225,35601],{"class":102},[39,46227,46228,46230,46232,46234],{"class":41,"line":17839},[39,46229,4461],{"class":49},[39,46231,35608],{"class":45},[39,46233,27100],{"class":49},[39,46235,35252],{"class":45},[39,46237,46238,46240,46242],{"class":41,"line":17852},[39,46239,33665],{"class":45},[39,46241,50],{"class":49},[39,46243,33670],{"class":45},[39,46245,46246,46248,46250],{"class":41,"line":17857},[39,46247,33680],{"class":45},[39,46249,50],{"class":49},[39,46251,33685],{"class":45},[39,46253,46254],{"class":41,"line":17871},[39,46255,3458],{"emptyLinePlaceholder":1145},[39,46257,46258],{"class":41,"line":17876},[39,46259,35637],{"class":102},[39,46261,46262],{"class":41,"line":17882},[39,46263,33930],{"class":45},[39,46265,46266],{"class":41,"line":17887},[39,46267,35646],{"class":102},[39,46269,46270,46272,46274],{"class":41,"line":17901},[39,46271,33715],{"class":45},[39,46273,50],{"class":49},[39,46275,33720],{"class":45},[39,46277,46278],{"class":41,"line":17906},[39,46279,35659],{"class":102},[39,46281,46282,46284,46286,46288,46290,46292,46294],{"class":41,"line":17911},[39,46283,33732],{"class":45},[39,46285,50],{"class":49},[39,46287,33737],{"class":45},[39,46289,33740],{"class":254},[39,46291,50],{"class":49},[39,46293,57],{"class":56},[39,46295,209],{"class":45},[39,46297,46298],{"class":41,"line":17925},[39,46299,35680],{"class":102},[39,46301,46302,46304,46306],{"class":41,"line":17937},[39,46303,35685],{"class":45},[39,46305,50],{"class":49},[39,46307,35690],{"class":45},[39,46309,46310,46312,46314],{"class":41,"line":17942},[39,46311,35695],{"class":45},[39,46313,50],{"class":49},[39,46315,35700],{"class":45},[39,46317,46318,46320,46322,46324,46326,46328,46330,46332],{"class":41,"line":17955},[39,46319,35705],{"class":56},[39,46321,1221],{"class":45},[39,46323,35710],{"class":1319},[39,46325,35713],{"class":45},[39,46327,35716],{"class":1319},[39,46329,60],{"class":45},[39,46331,35721],{"class":1319},[39,46333,35724],{"class":45},[1188,46335,46337],{"id":46336},"_24训练自己的数据集","2.4.训练自己的数据集",[19,46339,46340],{},"猫狗分类任务",[19,46342,46343],{},"划分数据集和验证集",[29,46345,46347],{"className":31,"code":46346,"language":33,"meta":34,"style":34},"# 创建脚本，用于划分数据集和验证集\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",[36,46348,46349,46354,46361,46366,46377,46384,46388,46398,46412,46421,46425,46430,46440,46460,46464,46469,46479,46490,46503,46507,46512,46521,46531,46542,46546,46551,46561,46565,46570,46575,46580,46585,46590,46594,46604,46631,46644,46656,46683,46688,46693,46707,46712,46724,46739,46754,46762,46766,46771,46777,46789,46802,46807,46812,46817,46867,46873,46877],{"__ignoreMap":34},[39,46350,46351],{"class":41,"line":42},[39,46352,46353],{"class":102},"# 创建脚本，用于划分数据集和验证集\n",[39,46355,46356,46358],{"class":41,"line":74},[39,46357,31447],{"class":49},[39,46359,46360],{"class":45}," os\n",[39,46362,46363],{"class":41,"line":99},[39,46364,46365],{"class":102},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[39,46367,46368,46370,46373,46375],{"class":41,"line":106},[39,46369,31792],{"class":49},[39,46371,46372],{"class":45}," shutil ",[39,46374,31447],{"class":49},[39,46376,32877],{"class":45},[39,46378,46379,46381],{"class":41,"line":112},[39,46380,31447],{"class":49},[39,46382,46383],{"class":45}," random\n",[39,46385,46386],{"class":41,"line":118},[39,46387,3458],{"emptyLinePlaceholder":1145},[39,46389,46390,46392,46395],{"class":41,"line":413},[39,46391,33002],{"class":49},[39,46393,46394],{"class":3021}," mkfile",[39,46396,46397],{"class":45},"(file):\n",[39,46399,46400,46402,46404,46407,46410],{"class":41,"line":419},[39,46401,4159],{"class":49},[39,46403,39985],{"class":49},[39,46405,46406],{"class":45}," os.path.exists(",[39,46408,46409],{"class":254},"file",[39,46411,31841],{"class":45},[39,46413,46414,46417,46419],{"class":41,"line":425},[39,46415,46416],{"class":45},"        os.makedirs(",[39,46418,46409],{"class":254},[39,46420,209],{"class":45},[39,46422,46423],{"class":41,"line":443},[39,46424,3458],{"emptyLinePlaceholder":1145},[39,46426,46427],{"class":41,"line":449},[39,46428,46429],{"class":102},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[39,46431,46432,46435,46437],{"class":41,"line":455},[39,46433,46434],{"class":45},"file_path",[39,46436,50],{"class":49},[39,46438,46439],{"class":1319},"'data_cat_dog'\n",[39,46441,46442,46445,46447,46450,46452,46455,46457],{"class":41,"line":461},[39,46443,46444],{"class":45},"flower_class",[39,46446,50],{"class":49},[39,46448,46449],{"class":45},"[cla ",[39,46451,4083],{"class":49},[39,46453,46454],{"class":45}," cla ",[39,46456,27100],{"class":49},[39,46458,46459],{"class":45}," os.listdir(file_path)]\n",[39,46461,46462],{"class":41,"line":475},[39,46463,3458],{"emptyLinePlaceholder":1145},[39,46465,46466],{"class":41,"line":665},[39,46467,46468],{"class":102},"# 创建训练集train文件夹\n",[39,46470,46471,46474,46477],{"class":41,"line":671},[39,46472,46473],{"class":45},"mkfile(",[39,46475,46476],{"class":1319},"'data\u002Ftrain'",[39,46478,209],{"class":45},[39,46480,46481,46483,46485,46487],{"class":41,"line":684},[39,46482,4083],{"class":49},[39,46484,46454],{"class":45},[39,46486,27100],{"class":49},[39,46488,46489],{"class":45}," flower_class:\n",[39,46491,46492,46495,46498,46500],{"class":41,"line":2732},[39,46493,46494],{"class":45},"    mkfile(",[39,46496,46497],{"class":1319},"'data\u002Ftrain\u002F'",[39,46499,1682],{"class":49},[39,46501,46502],{"class":45},"cla)\n",[39,46504,46505],{"class":41,"line":2737},[39,46506,3458],{"emptyLinePlaceholder":1145},[39,46508,46509],{"class":41,"line":2751},[39,46510,46511],{"class":102},"# 创建验证集val文件夹\n",[39,46513,46514,46516,46519],{"class":41,"line":2756},[39,46515,46473],{"class":45},[39,46517,46518],{"class":1319},"'data\u002Ftest'",[39,46520,209],{"class":45},[39,46522,46523,46525,46527,46529],{"class":41,"line":2785},[39,46524,4083],{"class":49},[39,46526,46454],{"class":45},[39,46528,27100],{"class":49},[39,46530,46489],{"class":45},[39,46532,46533,46535,46538,46540],{"class":41,"line":2790},[39,46534,46494],{"class":45},[39,46536,46537],{"class":1319},"'data\u002Ftest\u002F'",[39,46539,1682],{"class":49},[39,46541,46502],{"class":45},[39,46543,46544],{"class":41,"line":2807},[39,46545,3458],{"emptyLinePlaceholder":1145},[39,46547,46548],{"class":41,"line":2812},[39,46549,46550],{"class":102},"# 划分比例，训练集：测试集=9：1\n",[39,46552,46553,46556,46558],{"class":41,"line":2817},[39,46554,46555],{"class":45},"split_rate",[39,46557,50],{"class":49},[39,46559,46560],{"class":56},"0.1\n",[39,46562,46563],{"class":41,"line":2822},[39,46564,3458],{"emptyLinePlaceholder":1145},[39,46566,46567],{"class":41,"line":2836},[39,46568,46569],{"class":102},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[39,46571,46572],{"class":41,"line":2841},[39,46573,46574],{"class":102},"# cla_path：当前类别的原始图片路径\n",[39,46576,46577],{"class":41,"line":3635},[39,46578,46579],{"class":102},"# images：当前类别下所有图片的文件名列表\n",[39,46581,46582],{"class":41,"line":3649},[39,46583,46584],{"class":102},"# num：该类别图片总数\n",[39,46586,46587],{"class":41,"line":3657},[39,46588,46589],{"class":102},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[39,46591,46592],{"class":41,"line":3662},[39,46593,3458],{"emptyLinePlaceholder":1145},[39,46595,46596,46598,46600,46602],{"class":41,"line":3668},[39,46597,4083],{"class":49},[39,46599,46454],{"class":45},[39,46601,27100],{"class":49},[39,46603,46489],{"class":45},[39,46605,46606,46609,46611,46614,46616,46619,46622,46624,46626,46628],{"class":41,"line":3674},[39,46607,46608],{"class":45},"    cla_path ",[39,46610,50],{"class":49},[39,46612,46613],{"class":45}," file_path ",[39,46615,1682],{"class":49},[39,46617,46618],{"class":1319}," '\u002F'",[39,46620,46621],{"class":49}," +",[39,46623,46454],{"class":45},[39,46625,1682],{"class":49},[39,46627,46618],{"class":1319},[39,46629,46630],{"class":102},"  # 某一类别的子目录\n",[39,46632,46633,46636,46638,46641],{"class":41,"line":3679},[39,46634,46635],{"class":45},"    images ",[39,46637,50],{"class":49},[39,46639,46640],{"class":45}," os.listdir(cla_path)  ",[39,46642,46643],{"class":102},"# iamges 列表存储了该目录下所有图像的名称\n",[39,46645,46646,46649,46651,46653],{"class":41,"line":9004},[39,46647,46648],{"class":45},"    num ",[39,46650,50],{"class":49},[39,46652,8387],{"class":56},[39,46654,46655],{"class":45},"(images)\n",[39,46657,46658,46661,46663,46666,46668,46670,46672,46675,46677,46680],{"class":41,"line":9028},[39,46659,46660],{"class":45},"    eval_index ",[39,46662,50],{"class":49},[39,46664,46665],{"class":45}," random.sample(images, ",[39,46667,1694],{"class":254},[39,46669,50],{"class":49},[39,46671,1224],{"class":56},[39,46673,46674],{"class":45},"(num ",[39,46676,1657],{"class":49},[39,46678,46679],{"class":45}," split_rate))  ",[39,46681,46682],{"class":102},"# 从images列表中随机抽取 k 个图像名称\n",[39,46684,46685],{"class":41,"line":9033},[39,46686,46687],{"class":102},"    # 遍历该类别下的所有图片\n",[39,46689,46690],{"class":41,"line":9039},[39,46691,46692],{"class":102},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[39,46694,46695,46697,46700,46702,46704],{"class":41,"line":9066},[39,46696,4259],{"class":49},[39,46698,46699],{"class":45}," index, image ",[39,46701,27100],{"class":49},[39,46703,32661],{"class":56},[39,46705,46706],{"class":45},"(images):\n",[39,46708,46709],{"class":41,"line":9071},[39,46710,46711],{"class":102},"        # eval_index 中保存验证集val的图像名称\n",[39,46713,46714,46716,46719,46721],{"class":41,"line":9077},[39,46715,3555],{"class":49},[39,46717,46718],{"class":45}," image ",[39,46720,27100],{"class":49},[39,46722,46723],{"class":45}," eval_index:\n",[39,46725,46726,46729,46731,46734,46736],{"class":41,"line":9089},[39,46727,46728],{"class":45},"            image_path ",[39,46730,50],{"class":49},[39,46732,46733],{"class":45}," cla_path ",[39,46735,1682],{"class":49},[39,46737,46738],{"class":45}," image\n",[39,46740,46741,46744,46746,46749,46751],{"class":41,"line":9101},[39,46742,46743],{"class":45},"            new_path ",[39,46745,50],{"class":49},[39,46747,46748],{"class":1319}," 'data\u002Ftest\u002F'",[39,46750,46621],{"class":49},[39,46752,46753],{"class":45}," cla\n",[39,46755,46756,46759],{"class":41,"line":9113},[39,46757,46758],{"class":45},"            copy(image_path, new_path)  ",[39,46760,46761],{"class":102},"# 将选中的图像复制到新路径\n",[39,46763,46764],{"class":41,"line":10772},[39,46765,3458],{"emptyLinePlaceholder":1145},[39,46767,46768],{"class":41,"line":10797},[39,46769,46770],{"class":102},"        # 其余的图像保存在训练集train中\n",[39,46772,46773,46775],{"class":41,"line":10820},[39,46774,3592],{"class":49},[39,46776,4797],{"class":45},[39,46778,46779,46781,46783,46785,46787],{"class":41,"line":10844},[39,46780,46728],{"class":45},[39,46782,50],{"class":49},[39,46784,46733],{"class":45},[39,46786,1682],{"class":49},[39,46788,46738],{"class":45},[39,46790,46791,46793,46795,46798,46800],{"class":41,"line":10849},[39,46792,46743],{"class":45},[39,46794,50],{"class":49},[39,46796,46797],{"class":1319}," 'data\u002Ftrain\u002F'",[39,46799,46621],{"class":49},[39,46801,46753],{"class":45},[39,46803,46804],{"class":41,"line":10854},[39,46805,46806],{"class":45},"            copy(image_path, new_path)\n",[39,46808,46809],{"class":41,"line":10859},[39,46810,46811],{"class":102},"            # 打印进度条信息\n",[39,46813,46814],{"class":41,"line":10868},[39,46815,46816],{"class":102},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[39,46818,46819,46821,46823,46825,46828,46830,46832,46835,46837,46839,46841,46844,46847,46849,46851,46854,46857,46859,46861,46864],{"class":41,"line":10873},[39,46820,33506],{"class":56},[39,46822,1221],{"class":45},[39,46824,1462],{"class":1319},[39,46826,46827],{"class":56},"\\r",[39,46829,2088],{"class":1319},[39,46831,33514],{"class":56},[39,46833,46834],{"class":1319},"] processing [",[39,46836,33514],{"class":56},[39,46838,1784],{"class":1319},[39,46840,33514],{"class":56},[39,46842,46843],{"class":1319},"]\"",[39,46845,46846],{"class":45},".format(cla, index ",[39,46848,1682],{"class":49},[39,46850,26175],{"class":56},[39,46852,46853],{"class":45},", num), ",[39,46855,46856],{"class":254},"end",[39,46858,50],{"class":49},[39,46860,8708],{"class":1319},[39,46862,46863],{"class":45},")  ",[39,46865,46866],{"class":102},"# processing bar\n",[39,46868,46869,46871],{"class":41,"line":10879},[39,46870,32354],{"class":56},[39,46872,3034],{"class":45},[39,46874,46875],{"class":41,"line":10900},[39,46876,3458],{"emptyLinePlaceholder":1145},[39,46878,46879,46881,46883,46886],{"class":41,"line":10906},[39,46880,31470],{"class":56},[39,46882,1221],{"class":45},[39,46884,46885],{"class":1319},"\"processing done!\"",[39,46887,209],{"class":45},[19,46889,46890],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23054,46892,46894],{"id":46893},"_242模型代码","2.4.2.模型代码",[19,46896,46897],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[29,46899,46901],{"className":31,"code":46900,"language":33,"meta":34,"style":34},"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",[36,46902,46903,46909,46919,46929,46933,46949,46957,46971,46981,46985,47015,47019,47053,47099,47103,47137,47183,47187,47191,47225,47255,47259,47267,47281,47303,47325,47343,47347,47361,47365,47369,47385,47389,47397,47411,47421,47465,47469,47497,47501,47511,47539,47543,47579,47583,47611,47615,47625,47657,47689,47717,47721,47731,47763,47795,47827,47859,47891,47919,47923,47933,47965,47997,48009,48013,48025,48029,48033,48045,48053,48073,48077,48081,48085,48089,48093,48097,48111,48119,48127,48139,48153,48161,48165,48173,48183,48193,48203,48213,48223,48229,48233,48237,48249,48269,48277],{"__ignoreMap":34},[39,46904,46905,46907],{"class":41,"line":42},[39,46906,31447],{"class":49},[39,46908,31450],{"class":45},[39,46910,46911,46913,46915,46917],{"class":41,"line":74},[39,46912,31792],{"class":49},[39,46914,31795],{"class":45},[39,46916,31447],{"class":49},[39,46918,31800],{"class":45},[39,46920,46921,46923,46925,46927],{"class":41,"line":99},[39,46922,31792],{"class":49},[39,46924,31812],{"class":45},[39,46926,31447],{"class":49},[39,46928,31817],{"class":45},[39,46930,46931],{"class":41,"line":106},[39,46932,3458],{"emptyLinePlaceholder":1145},[39,46934,46935,46937,46939,46941,46943,46945,46947],{"class":41,"line":112},[39,46936,15750],{"class":49},[39,46938,42548],{"class":3021},[39,46940,1221],{"class":45},[39,46942,31833],{"class":3021},[39,46944,1758],{"class":45},[39,46946,31838],{"class":3021},[39,46948,31841],{"class":45},[39,46950,46951,46953,46955],{"class":41,"line":118},[39,46952,31856],{"class":49},[39,46954,31859],{"class":56},[39,46956,42567],{"class":45},[39,46958,46959,46961,46963,46965,46967,46969],{"class":41,"line":413},[39,46960,31872],{"class":56},[39,46962,42574],{"class":45},[39,46964,31878],{"class":56},[39,46966,31881],{"class":45},[39,46968,31884],{"class":56},[39,46970,3034],{"class":45},[39,46972,46973,46975,46977,46979],{"class":41,"line":419},[39,46974,31900],{"class":56},[39,46976,35826],{"class":45},[39,46978,50],{"class":49},[39,46980,35831],{"class":45},[39,46982,46983],{"class":41,"line":425},[39,46984,42597],{"class":102},[39,46986,46987,46989,46991,46993,46995,46997,46999,47001,47003,47005,47007,47009,47011,47013],{"class":41,"line":443},[39,46988,31900],{"class":56},[39,46990,42604],{"class":45},[39,46992,50],{"class":49},[39,46994,31908],{"class":45},[39,46996,31911],{"class":254},[39,46998,50],{"class":49},[39,47000,42615],{"class":45},[39,47002,31920],{"class":254},[39,47004,50],{"class":49},[39,47006,42622],{"class":45},[39,47008,31929],{"class":254},[39,47010,50],{"class":49},[39,47012,57],{"class":56},[39,47014,209],{"class":45},[39,47016,47017],{"class":41,"line":449},[39,47018,42635],{"class":102},[39,47020,47021,47023,47025,47027,47029,47031,47033,47035,47037,47039,47041,47043,47045,47047,47049,47051],{"class":41,"line":455},[39,47022,31900],{"class":56},[39,47024,42642],{"class":45},[39,47026,50],{"class":49},[39,47028,31908],{"class":45},[39,47030,31911],{"class":254},[39,47032,50],{"class":49},[39,47034,42615],{"class":45},[39,47036,31920],{"class":254},[39,47038,50],{"class":49},[39,47040,42659],{"class":45},[39,47042,260],{"class":56},[39,47044,42664],{"class":45},[39,47046,31929],{"class":254},[39,47048,50],{"class":49},[39,47050,57],{"class":56},[39,47052,209],{"class":45},[39,47054,47055,47057,47059,47061,47063,47065,47067,47069,47071,47073,47075,47077,47079,47081,47083,47085,47087,47089,47091,47093,47095,47097],{"class":41,"line":461},[39,47056,31900],{"class":56},[39,47058,42679],{"class":45},[39,47060,50],{"class":49},[39,47062,31908],{"class":45},[39,47064,31911],{"class":254},[39,47066,50],{"class":49},[39,47068,42659],{"class":45},[39,47070,260],{"class":56},[39,47072,42664],{"class":45},[39,47074,31920],{"class":254},[39,47076,50],{"class":49},[39,47078,42659],{"class":45},[39,47080,57],{"class":56},[39,47082,42664],{"class":45},[39,47084,31929],{"class":254},[39,47086,50],{"class":49},[39,47088,68],{"class":56},[39,47090,60],{"class":45},[39,47092,31938],{"class":254},[39,47094,50],{"class":49},[39,47096,57],{"class":56},[39,47098,209],{"class":45},[39,47100,47101],{"class":41,"line":475},[39,47102,42724],{"class":102},[39,47104,47105,47107,47109,47111,47113,47115,47117,47119,47121,47123,47125,47127,47129,47131,47133,47135],{"class":41,"line":665},[39,47106,31900],{"class":56},[39,47108,42731],{"class":45},[39,47110,50],{"class":49},[39,47112,31908],{"class":45},[39,47114,31911],{"class":254},[39,47116,50],{"class":49},[39,47118,42615],{"class":45},[39,47120,31920],{"class":254},[39,47122,50],{"class":49},[39,47124,42748],{"class":45},[39,47126,260],{"class":56},[39,47128,42664],{"class":45},[39,47130,31929],{"class":254},[39,47132,50],{"class":49},[39,47134,57],{"class":56},[39,47136,209],{"class":45},[39,47138,47139,47141,47143,47145,47147,47149,47151,47153,47155,47157,47159,47161,47163,47165,47167,47169,47171,47173,47175,47177,47179,47181],{"class":41,"line":671},[39,47140,31900],{"class":56},[39,47142,42767],{"class":45},[39,47144,50],{"class":49},[39,47146,31908],{"class":45},[39,47148,31911],{"class":254},[39,47150,50],{"class":49},[39,47152,42748],{"class":45},[39,47154,260],{"class":56},[39,47156,42664],{"class":45},[39,47158,31920],{"class":254},[39,47160,50],{"class":49},[39,47162,42748],{"class":45},[39,47164,57],{"class":56},[39,47166,42664],{"class":45},[39,47168,31929],{"class":254},[39,47170,50],{"class":49},[39,47172,89],{"class":56},[39,47174,60],{"class":45},[39,47176,31938],{"class":254},[39,47178,50],{"class":49},[39,47180,63],{"class":56},[39,47182,209],{"class":45},[39,47184,47185],{"class":41,"line":684},[39,47186,42812],{"class":102},[39,47188,47189],{"class":41,"line":2732},[39,47190,42817],{"class":102},[39,47192,47193,47195,47197,47199,47201,47203,47205,47207,47209,47211,47213,47215,47217,47219,47221,47223],{"class":41,"line":2737},[39,47194,31900],{"class":56},[39,47196,42824],{"class":45},[39,47198,50],{"class":49},[39,47200,35884],{"class":45},[39,47202,31929],{"class":254},[39,47204,50],{"class":49},[39,47206,68],{"class":56},[39,47208,60],{"class":45},[39,47210,31984],{"class":254},[39,47212,50],{"class":49},[39,47214,57],{"class":56},[39,47216,60],{"class":45},[39,47218,31938],{"class":254},[39,47220,50],{"class":49},[39,47222,57],{"class":56},[39,47224,209],{"class":45},[39,47226,47227,47229,47231,47233,47235,47237,47239,47241,47243,47245,47247,47249,47251,47253],{"class":41,"line":2751},[39,47228,31900],{"class":56},[39,47230,42859],{"class":45},[39,47232,50],{"class":49},[39,47234,31908],{"class":45},[39,47236,31911],{"class":254},[39,47238,50],{"class":49},[39,47240,42615],{"class":45},[39,47242,31920],{"class":254},[39,47244,50],{"class":49},[39,47246,42876],{"class":45},[39,47248,31929],{"class":254},[39,47250,50],{"class":49},[39,47252,57],{"class":56},[39,47254,209],{"class":45},[39,47256,47257],{"class":41,"line":2756},[39,47258,3458],{"emptyLinePlaceholder":1145},[39,47260,47261,47263,47265],{"class":41,"line":2785},[39,47262,31856],{"class":49},[39,47264,32148],{"class":3021},[39,47266,32151],{"class":45},[39,47268,47269,47271,47273,47275,47277,47279],{"class":41,"line":2790},[39,47270,42901],{"class":45},[39,47272,50],{"class":49},[39,47274,31878],{"class":56},[39,47276,36239],{"class":45},[39,47278,31878],{"class":56},[39,47280,42912],{"class":45},[39,47282,47283,47285,47287,47289,47291,47293,47295,47297,47299,47301],{"class":41,"line":2807},[39,47284,8141],{"class":45},[39,47286,50],{"class":49},[39,47288,31878],{"class":56},[39,47290,36239],{"class":45},[39,47292,31878],{"class":56},[39,47294,42927],{"class":45},[39,47296,31878],{"class":56},[39,47298,36239],{"class":45},[39,47300,31878],{"class":56},[39,47302,42936],{"class":45},[39,47304,47305,47307,47309,47311,47313,47315,47317,47319,47321,47323],{"class":41,"line":2812},[39,47306,42941],{"class":45},[39,47308,50],{"class":49},[39,47310,31878],{"class":56},[39,47312,36239],{"class":45},[39,47314,31878],{"class":56},[39,47316,42952],{"class":45},[39,47318,31878],{"class":56},[39,47320,36239],{"class":45},[39,47322,31878],{"class":56},[39,47324,42961],{"class":45},[39,47326,47327,47329,47331,47333,47335,47337,47339,47341],{"class":41,"line":2817},[39,47328,42966],{"class":45},[39,47330,50],{"class":49},[39,47332,31878],{"class":56},[39,47334,36239],{"class":45},[39,47336,31878],{"class":56},[39,47338,42977],{"class":45},[39,47340,31878],{"class":56},[39,47342,42982],{"class":45},[39,47344,47345],{"class":41,"line":2822},[39,47346,42987],{"class":102},[39,47348,47349,47351,47353,47355,47357,47359],{"class":41,"line":2836},[39,47350,15808],{"class":49},[39,47352,42994],{"class":45},[39,47354,33740],{"class":254},[39,47356,50],{"class":49},[39,47358,57],{"class":56},[39,47360,209],{"class":45},[39,47362,47363],{"class":41,"line":2841},[39,47364,3458],{"emptyLinePlaceholder":1145},[39,47366,47367],{"class":41,"line":3635},[39,47368,43015],{"class":102},[39,47370,47371,47373,47375,47377,47379,47381,47383],{"class":41,"line":3649},[39,47372,15750],{"class":49},[39,47374,43022],{"class":3021},[39,47376,1221],{"class":45},[39,47378,31833],{"class":3021},[39,47380,1758],{"class":45},[39,47382,31838],{"class":3021},[39,47384,31841],{"class":45},[39,47386,47387],{"class":41,"line":3657},[39,47388,43037],{"class":102},[39,47390,47391,47393,47395],{"class":41,"line":3662},[39,47392,31856],{"class":49},[39,47394,31859],{"class":56},[39,47396,43046],{"class":45},[39,47398,47399,47401,47403,47405,47407,47409],{"class":41,"line":3668},[39,47400,31872],{"class":56},[39,47402,43053],{"class":45},[39,47404,31878],{"class":56},[39,47406,31881],{"class":45},[39,47408,31884],{"class":56},[39,47410,3034],{"class":45},[39,47412,47413,47415,47417,47419],{"class":41,"line":3674},[39,47414,31900],{"class":56},[39,47416,43068],{"class":45},[39,47418,50],{"class":49},[39,47420,39064],{"class":45},[39,47422,47423,47425,47427,47429,47431,47433,47435,47437,47439,47441,47443,47445,47447,47449,47451,47453,47455,47457,47459,47461,47463],{"class":41,"line":3679},[39,47424,39069],{"class":45},[39,47426,31911],{"class":254},[39,47428,50],{"class":49},[39,47430,68],{"class":56},[39,47432,60],{"class":45},[39,47434,31920],{"class":254},[39,47436,50],{"class":49},[39,47438,1416],{"class":56},[39,47440,60],{"class":45},[39,47442,31929],{"class":254},[39,47444,50],{"class":49},[39,47446,1573],{"class":56},[39,47448,60],{"class":45},[39,47450,31984],{"class":254},[39,47452,50],{"class":49},[39,47454,63],{"class":56},[39,47456,60],{"class":45},[39,47458,31938],{"class":254},[39,47460,50],{"class":49},[39,47462,68],{"class":56},[39,47464,39102],{"class":45},[39,47466,47467],{"class":41,"line":9004},[39,47468,39107],{"class":45},[39,47470,47471,47473,47475,47477,47479,47481,47483,47485,47487,47489,47491,47493,47495],{"class":41,"line":9028},[39,47472,39152],{"class":45},[39,47474,31929],{"class":254},[39,47476,50],{"class":49},[39,47478,68],{"class":56},[39,47480,60],{"class":45},[39,47482,31984],{"class":254},[39,47484,50],{"class":49},[39,47486,63],{"class":56},[39,47488,60],{"class":45},[39,47490,31938],{"class":254},[39,47492,50],{"class":49},[39,47494,57],{"class":56},[39,47496,209],{"class":45},[39,47498,47499],{"class":41,"line":9033},[39,47500,39181],{"class":45},[39,47502,47503,47505,47507,47509],{"class":41,"line":9039},[39,47504,31900],{"class":56},[39,47506,43159],{"class":45},[39,47508,50],{"class":49},[39,47510,39064],{"class":45},[39,47512,47513,47515,47517,47519,47521,47523,47525,47527,47529,47531,47533,47535,47537],{"class":41,"line":9066},[39,47514,39069],{"class":45},[39,47516,31911],{"class":254},[39,47518,50],{"class":49},[39,47520,1416],{"class":56},[39,47522,60],{"class":45},[39,47524,31920],{"class":254},[39,47526,50],{"class":49},[39,47528,1416],{"class":56},[39,47530,60],{"class":45},[39,47532,31929],{"class":254},[39,47534,50],{"class":49},[39,47536,57],{"class":56},[39,47538,39102],{"class":45},[39,47540,47541],{"class":41,"line":9071},[39,47542,39107],{"class":45},[39,47544,47545,47547,47549,47551,47553,47555,47557,47559,47561,47563,47565,47567,47569,47571,47573,47575,47577],{"class":41,"line":9077},[39,47546,39069],{"class":45},[39,47548,31911],{"class":254},[39,47550,50],{"class":49},[39,47552,1416],{"class":56},[39,47554,60],{"class":45},[39,47556,31920],{"class":254},[39,47558,50],{"class":49},[39,47560,43214],{"class":56},[39,47562,60],{"class":45},[39,47564,31929],{"class":254},[39,47566,50],{"class":49},[39,47568,68],{"class":56},[39,47570,60],{"class":45},[39,47572,31938],{"class":254},[39,47574,50],{"class":49},[39,47576,57],{"class":56},[39,47578,39102],{"class":45},[39,47580,47581],{"class":41,"line":9089},[39,47582,39107],{"class":45},[39,47584,47585,47587,47589,47591,47593,47595,47597,47599,47601,47603,47605,47607,47609],{"class":41,"line":9101},[39,47586,39152],{"class":45},[39,47588,31929],{"class":254},[39,47590,50],{"class":49},[39,47592,68],{"class":56},[39,47594,60],{"class":45},[39,47596,31984],{"class":254},[39,47598,50],{"class":49},[39,47600,63],{"class":56},[39,47602,60],{"class":45},[39,47604,31938],{"class":254},[39,47606,50],{"class":49},[39,47608,57],{"class":56},[39,47610,209],{"class":45},[39,47612,47613],{"class":41,"line":9113},[39,47614,39181],{"class":45},[39,47616,47617,47619,47621,47623],{"class":41,"line":10772},[39,47618,31900],{"class":56},[39,47620,43275],{"class":45},[39,47622,50],{"class":49},[39,47624,39064],{"class":45},[39,47626,47627,47629,47631,47633,47635,47637,47639,47641,47643,47645,47647,47649,47651,47653,47655],{"class":41,"line":10797},[39,47628,43284],{"class":45},[39,47630,43214],{"class":56},[39,47632,60],{"class":45},[39,47634,1416],{"class":56},[39,47636,43293],{"class":45},[39,47638,1422],{"class":56},[39,47640,60],{"class":45},[39,47642,33125],{"class":56},[39,47644,43302],{"class":45},[39,47646,1801],{"class":56},[39,47648,60],{"class":45},[39,47650,1410],{"class":56},[39,47652,43311],{"class":45},[39,47654,1410],{"class":56},[39,47656,39102],{"class":45},[39,47658,47659,47661,47663,47665,47667,47669,47671,47673,47675,47677,47679,47681,47683,47685,47687],{"class":41,"line":10820},[39,47660,43284],{"class":45},[39,47662,35925],{"class":56},[39,47664,60],{"class":45},[39,47666,33125],{"class":56},[39,47668,43293],{"class":45},[39,47670,33125],{"class":56},[39,47672,60],{"class":45},[39,47674,43214],{"class":56},[39,47676,43302],{"class":45},[39,47678,1410],{"class":56},[39,47680,60],{"class":45},[39,47682,1422],{"class":56},[39,47684,43311],{"class":45},[39,47686,1416],{"class":56},[39,47688,39102],{"class":45},[39,47690,47691,47693,47695,47697,47699,47701,47703,47705,47707,47709,47711,47713,47715],{"class":41,"line":10844},[39,47692,39152],{"class":45},[39,47694,31929],{"class":254},[39,47696,50],{"class":49},[39,47698,68],{"class":56},[39,47700,60],{"class":45},[39,47702,31984],{"class":254},[39,47704,50],{"class":49},[39,47706,63],{"class":56},[39,47708,60],{"class":45},[39,47710,31938],{"class":254},[39,47712,50],{"class":49},[39,47714,57],{"class":56},[39,47716,209],{"class":45},[39,47718,47719],{"class":41,"line":10849},[39,47720,39181],{"class":45},[39,47722,47723,47725,47727,47729],{"class":41,"line":10854},[39,47724,31900],{"class":56},[39,47726,43386],{"class":45},[39,47728,50],{"class":49},[39,47730,39064],{"class":45},[39,47732,47733,47735,47737,47739,47741,47743,47745,47747,47749,47751,47753,47755,47757,47759,47761],{"class":41,"line":10859},[39,47734,43284],{"class":45},[39,47736,43397],{"class":56},[39,47738,60],{"class":45},[39,47740,43214],{"class":56},[39,47742,43293],{"class":45},[39,47744,1422],{"class":56},[39,47746,60],{"class":45},[39,47748,43410],{"class":56},[39,47750,43302],{"class":45},[39,47752,1801],{"class":56},[39,47754,60],{"class":45},[39,47756,1807],{"class":56},[39,47758,43311],{"class":45},[39,47760,1416],{"class":56},[39,47762,39102],{"class":45},[39,47764,47765,47767,47769,47771,47773,47775,47777,47779,47781,47783,47785,47787,47789,47791,47793],{"class":41,"line":10868},[39,47766,43284],{"class":45},[39,47768,39512],{"class":56},[39,47770,60],{"class":45},[39,47772,22104],{"class":56},[39,47774,43293],{"class":45},[39,47776,1818],{"class":56},[39,47778,60],{"class":45},[39,47780,32556],{"class":56},[39,47782,43302],{"class":45},[39,47784,1998],{"class":56},[39,47786,60],{"class":45},[39,47788,1416],{"class":56},[39,47790,43311],{"class":45},[39,47792,1416],{"class":56},[39,47794,39102],{"class":45},[39,47796,47797,47799,47801,47803,47805,47807,47809,47811,47813,47815,47817,47819,47821,47823,47825],{"class":41,"line":10873},[39,47798,43284],{"class":45},[39,47800,39512],{"class":56},[39,47802,60],{"class":45},[39,47804,33125],{"class":56},[39,47806,43293],{"class":45},[39,47808,33125],{"class":56},[39,47810,60],{"class":45},[39,47812,35925],{"class":56},[39,47814,43302],{"class":45},[39,47816,1998],{"class":56},[39,47818,60],{"class":45},[39,47820,1416],{"class":56},[39,47822,43311],{"class":45},[39,47824,1416],{"class":56},[39,47826,39102],{"class":45},[39,47828,47829,47831,47833,47835,47837,47839,47841,47843,47845,47847,47849,47851,47853,47855,47857],{"class":41,"line":10879},[39,47830,43284],{"class":45},[39,47832,39512],{"class":56},[39,47834,60],{"class":45},[39,47836,1818],{"class":56},[39,47838,43293],{"class":45},[39,47840,33125],{"class":56},[39,47842,60],{"class":45},[39,47844,43507],{"class":56},[39,47846,43302],{"class":45},[39,47848,1410],{"class":56},[39,47850,60],{"class":45},[39,47852,1416],{"class":56},[39,47854,43311],{"class":45},[39,47856,1416],{"class":56},[39,47858,39102],{"class":45},[39,47860,47861,47863,47865,47867,47869,47871,47873,47875,47877,47879,47881,47883,47885,47887,47889],{"class":41,"line":10900},[39,47862,43284],{"class":45},[39,47864,43528],{"class":56},[39,47866,60],{"class":45},[39,47868,35925],{"class":56},[39,47870,43293],{"class":45},[39,47872,22104],{"class":56},[39,47874,60],{"class":45},[39,47876,43541],{"class":56},[39,47878,43302],{"class":45},[39,47880,1410],{"class":56},[39,47882,60],{"class":45},[39,47884,33125],{"class":56},[39,47886,43311],{"class":45},[39,47888,33125],{"class":56},[39,47890,39102],{"class":45},[39,47892,47893,47895,47897,47899,47901,47903,47905,47907,47909,47911,47913,47915,47917],{"class":41,"line":10906},[39,47894,39152],{"class":45},[39,47896,31929],{"class":254},[39,47898,50],{"class":49},[39,47900,68],{"class":56},[39,47902,60],{"class":45},[39,47904,31984],{"class":254},[39,47906,50],{"class":49},[39,47908,63],{"class":56},[39,47910,60],{"class":45},[39,47912,31938],{"class":254},[39,47914,50],{"class":49},[39,47916,57],{"class":56},[39,47918,209],{"class":45},[39,47920,47921],{"class":41,"line":10920},[39,47922,39181],{"class":45},[39,47924,47925,47927,47929,47931],{"class":41,"line":10926},[39,47926,31900],{"class":56},[39,47928,43594],{"class":45},[39,47930,50],{"class":49},[39,47932,39064],{"class":45},[39,47934,47935,47937,47939,47941,47943,47945,47947,47949,47951,47953,47955,47957,47959,47961,47963],{"class":41,"line":10953},[39,47936,43284],{"class":45},[39,47938,43605],{"class":56},[39,47940,60],{"class":45},[39,47942,35925],{"class":56},[39,47944,43293],{"class":45},[39,47946,22104],{"class":56},[39,47948,60],{"class":45},[39,47950,43541],{"class":56},[39,47952,43302],{"class":45},[39,47954,1410],{"class":56},[39,47956,60],{"class":45},[39,47958,33125],{"class":56},[39,47960,43311],{"class":45},[39,47962,33125],{"class":56},[39,47964,39102],{"class":45},[39,47966,47967,47969,47971,47973,47975,47977,47979,47981,47983,47985,47987,47989,47991,47993,47995],{"class":41,"line":10962},[39,47968,43284],{"class":45},[39,47970,43605],{"class":56},[39,47972,60],{"class":45},[39,47974,35995],{"class":56},[39,47976,43293],{"class":45},[39,47978,43214],{"class":56},[39,47980,60],{"class":45},[39,47982,35995],{"class":56},[39,47984,43302],{"class":45},[39,47986,1807],{"class":56},[39,47988,60],{"class":45},[39,47990,33125],{"class":56},[39,47992,43311],{"class":45},[39,47994,33125],{"class":56},[39,47996,39102],{"class":45},[39,47998,47999,48001,48003,48005,48007],{"class":41,"line":10968},[39,48000,43668],{"class":45},[39,48002,57],{"class":56},[39,48004,60],{"class":45},[39,48006,57],{"class":56},[39,48008,43677],{"class":45},[39,48010,48011],{"class":41,"line":10976},[39,48012,39845],{"class":45},[39,48014,48015,48017,48019,48021,48023],{"class":41,"line":10981},[39,48016,39850],{"class":45},[39,48018,43688],{"class":56},[39,48020,60],{"class":45},[39,48022,63],{"class":56},[39,48024,209],{"class":45},[39,48026,48027],{"class":41,"line":17660},[39,48028,39181],{"class":45},[39,48030,48031],{"class":41,"line":17666},[39,48032,43703],{"class":102},[39,48034,48035,48037,48039,48041,48043],{"class":41,"line":17689},[39,48036,4461],{"class":49},[39,48038,39923],{"class":45},[39,48040,27100],{"class":49},[39,48042,39928],{"class":56},[39,48044,39931],{"class":45},[39,48046,48047,48049,48051],{"class":41,"line":17695},[39,48048,5700],{"class":49},[39,48050,39943],{"class":56},[39,48052,39946],{"class":45},[39,48054,48055,48057,48059,48061,48063,48065,48067,48069,48071],{"class":41,"line":17718},[39,48056,39956],{"class":45},[39,48058,43730],{"class":254},[39,48060,50],{"class":49},[39,48062,43735],{"class":1319},[39,48064,60],{"class":45},[39,48066,39959],{"class":254},[39,48068,50],{"class":49},[39,48070,39964],{"class":1319},[39,48072,209],{"class":45},[39,48074,48075],{"class":41,"line":17732},[39,48076,43750],{"class":102},[39,48078,48079],{"class":41,"line":17752},[39,48080,43755],{"class":102},[39,48082,48083],{"class":41,"line":17758},[39,48084,43760],{"class":102},[39,48086,48087],{"class":41,"line":17769},[39,48088,43765],{"class":102},[39,48090,48091],{"class":41,"line":17792},[39,48092,43770],{"class":102},[39,48094,48095],{"class":41,"line":17814},[39,48096,43775],{"class":102},[39,48098,48099,48101,48103,48105,48107,48109],{"class":41,"line":17819},[39,48100,39976],{"class":49},[39,48102,39979],{"class":45},[39,48104,39982],{"class":49},[39,48106,39985],{"class":49},[39,48108,39988],{"class":56},[39,48110,4797],{"class":45},[39,48112,48113,48115,48117],{"class":41,"line":17825},[39,48114,40000],{"class":45},[39,48116,260],{"class":56},[39,48118,209],{"class":45},[39,48120,48121,48123,48125],{"class":41,"line":17839},[39,48122,43802],{"class":49},[39,48124,39943],{"class":56},[39,48126,40019],{"class":45},[39,48128,48129,48131,48133,48135,48137],{"class":41,"line":17852},[39,48130,43811],{"class":45},[39,48132,260],{"class":56},[39,48134,60],{"class":45},[39,48136,40041],{"class":56},[39,48138,209],{"class":45},[39,48140,48141,48143,48145,48147,48149,48151],{"class":41,"line":17857},[39,48142,43824],{"class":49},[39,48144,39979],{"class":45},[39,48146,39982],{"class":49},[39,48148,39985],{"class":49},[39,48150,39988],{"class":56},[39,48152,4797],{"class":45},[39,48154,48155,48157,48159],{"class":41,"line":17871},[39,48156,43839],{"class":45},[39,48158,260],{"class":56},[39,48160,209],{"class":45},[39,48162,48163],{"class":41,"line":17876},[39,48164,36220],{"class":102},[39,48166,48167,48169,48171],{"class":41,"line":17882},[39,48168,31856],{"class":49},[39,48170,32148],{"class":3021},[39,48172,32151],{"class":45},[39,48174,48175,48177,48179,48181],{"class":41,"line":17887},[39,48176,32156],{"class":45},[39,48178,50],{"class":49},[39,48180,31878],{"class":56},[39,48182,43866],{"class":45},[39,48184,48185,48187,48189,48191],{"class":41,"line":17901},[39,48186,32156],{"class":45},[39,48188,50],{"class":49},[39,48190,31878],{"class":56},[39,48192,43877],{"class":45},[39,48194,48195,48197,48199,48201],{"class":41,"line":17906},[39,48196,32156],{"class":45},[39,48198,50],{"class":49},[39,48200,31878],{"class":56},[39,48202,43888],{"class":45},[39,48204,48205,48207,48209,48211],{"class":41,"line":17911},[39,48206,32156],{"class":45},[39,48208,50],{"class":49},[39,48210,31878],{"class":56},[39,48212,43899],{"class":45},[39,48214,48215,48217,48219,48221],{"class":41,"line":17925},[39,48216,32156],{"class":45},[39,48218,50],{"class":49},[39,48220,31878],{"class":56},[39,48222,43910],{"class":45},[39,48224,48225,48227],{"class":41,"line":17937},[39,48226,15808],{"class":49},[39,48228,32264],{"class":45},[39,48230,48231],{"class":41,"line":17942},[39,48232,3458],{"emptyLinePlaceholder":1145},[39,48234,48235],{"class":41,"line":17955},[39,48236,43925],{"class":102},[39,48238,48239,48241,48243,48245,48247],{"class":41,"line":17960},[39,48240,2596],{"class":49},[39,48242,32275],{"class":56},[39,48244,4007],{"class":49},[39,48246,32280],{"class":1319},[39,48248,4797],{"class":45},[39,48250,48251,48253,48255,48257,48259,48261,48263,48265,48267],{"class":41,"line":17965},[39,48252,32292],{"class":45},[39,48254,50],{"class":49},[39,48256,31506],{"class":45},[39,48258,32299],{"class":1319},[39,48260,2762],{"class":49},[39,48262,32304],{"class":45},[39,48264,2759],{"class":49},[39,48266,31531],{"class":1319},[39,48268,209],{"class":45},[39,48270,48271,48273,48275],{"class":41,"line":17970},[39,48272,32344],{"class":45},[39,48274,50],{"class":49},[39,48276,43966],{"class":45},[39,48278,48279,48281,48283,48285,48287,48289,48291,48293],{"class":41,"line":17983},[39,48280,32354],{"class":56},[39,48282,32357],{"class":45},[39,48284,57],{"class":56},[39,48286,60],{"class":45},[39,48288,32556],{"class":56},[39,48290,60],{"class":45},[39,48292,32556],{"class":56},[39,48294,32370],{"class":45},[23054,48296,48298],{"id":48297},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,48300,48301],{},"计算图片的均值与方差，用于训练中归一化处理操作",[29,48303,48305],{"className":31,"code":48304,"language":33,"meta":34,"style":34},"# 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",[36,48306,48307,48312,48325,48330,48336,48341,48351,48355,48360,48370,48374,48379,48389,48406,48410,48415,48427,48439,48470,48479,48489,48499,48503,48508,48523,48527,48532,48537,48542,48552,48557,48581,48585,48590,48605,48609,48622,48626,48631,48636,48641,48646,48651,48661,48671,48694,48702,48710,48718,48722,48734,48738,48743,48747,48751,48758,48778,48802,48809,48823,48828,48833,48837,48851,48855,48867],{"__ignoreMap":34},[39,48308,48309],{"class":41,"line":42},[39,48310,48311],{"class":102},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[39,48313,48314,48316,48319,48322],{"class":41,"line":74},[39,48315,31792],{"class":49},[39,48317,48318],{"class":56}," PIL",[39,48320,48321],{"class":49}," import",[39,48323,48324],{"class":45}," Image\n",[39,48326,48327],{"class":41,"line":99},[39,48328,48329],{"class":102},"# os 用来处理文件夹和文件路径\n",[39,48331,48332,48334],{"class":41,"line":106},[39,48333,31447],{"class":49},[39,48335,46360],{"class":45},[39,48337,48338],{"class":41,"line":112},[39,48339,48340],{"class":102},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[39,48342,48343,48345,48347,48349],{"class":41,"line":118},[39,48344,31447],{"class":49},[39,48346,32435],{"class":45},[39,48348,32438],{"class":49},[39,48350,32441],{"class":45},[39,48352,48353],{"class":41,"line":413},[39,48354,3458],{"emptyLinePlaceholder":1145},[39,48356,48357],{"class":41,"line":419},[39,48358,48359],{"class":102},"# 文件夹路径，包含所有图片文件\n",[39,48361,48362,48365,48367],{"class":41,"line":425},[39,48363,48364],{"class":45},"folder_path ",[39,48366,50],{"class":49},[39,48368,48369],{"class":1319}," 'data_cat_dog'\n",[39,48371,48372],{"class":41,"line":443},[39,48373,3458],{"emptyLinePlaceholder":1145},[39,48375,48376],{"class":41,"line":449},[39,48377,48378],{"class":102},"# 初始化累积变量\n",[39,48380,48381,48384,48386],{"class":41,"line":455},[39,48382,48383],{"class":45},"total_pixels ",[39,48385,50],{"class":49},[39,48387,48388],{"class":56}," 0\n",[39,48390,48391,48394,48396,48399,48401,48403],{"class":41,"line":461},[39,48392,48393],{"class":45},"sum_normalized_pixel_values ",[39,48395,50],{"class":49},[39,48397,48398],{"class":45}," np.zeros(",[39,48400,68],{"class":56},[39,48402,46863],{"class":45},[39,48404,48405],{"class":102},"# 如果是RGB图像，需要三个通道的均值和方差\n",[39,48407,48408],{"class":41,"line":475},[39,48409,3458],{"emptyLinePlaceholder":1145},[39,48411,48412],{"class":41,"line":665},[39,48413,48414],{"class":102},"# 遍历文件夹中的图片文件\n",[39,48416,48417,48419,48422,48424],{"class":41,"line":671},[39,48418,4083],{"class":49},[39,48420,48421],{"class":45}," root, dirs, files ",[39,48423,27100],{"class":49},[39,48425,48426],{"class":45}," os.walk(folder_path):\n",[39,48428,48429,48431,48434,48436],{"class":41,"line":684},[39,48430,4259],{"class":49},[39,48432,48433],{"class":45}," filename ",[39,48435,27100],{"class":49},[39,48437,48438],{"class":45}," files:\n",[39,48440,48441,48443,48446,48449,48451,48454,48456,48459,48461,48464,48467],{"class":41,"line":2732},[39,48442,3555],{"class":49},[39,48444,48445],{"class":45}," filename.endswith((",[39,48447,48448],{"class":1319},"'.jpg'",[39,48450,13491],{"class":45},[39,48452,48453],{"class":1319},"'.jpeg'",[39,48455,13491],{"class":45},[39,48457,48458],{"class":1319},"'.png'",[39,48460,13491],{"class":45},[39,48462,48463],{"class":1319},"'.bmp'",[39,48465,48466],{"class":45},")):  ",[39,48468,48469],{"class":102},"# 可根据实际情况添加其他格式\n",[39,48471,48472,48474,48476],{"class":41,"line":2737},[39,48473,46728],{"class":45},[39,48475,50],{"class":49},[39,48477,48478],{"class":45}," os.path.join(root, filename)\n",[39,48480,48481,48484,48486],{"class":41,"line":2751},[39,48482,48483],{"class":45},"            image ",[39,48485,50],{"class":49},[39,48487,48488],{"class":45}," Image.open(image_path)\n",[39,48490,48491,48494,48496],{"class":41,"line":2756},[39,48492,48493],{"class":45},"            image_array ",[39,48495,50],{"class":49},[39,48497,48498],{"class":45}," np.array(image)\n",[39,48500,48501],{"class":41,"line":2785},[39,48502,3458],{"emptyLinePlaceholder":1145},[39,48504,48505],{"class":41,"line":2790},[39,48506,48507],{"class":102},"            # 归一化像素值到0-1之间\n",[39,48509,48510,48513,48515,48518,48520],{"class":41,"line":2807},[39,48511,48512],{"class":45},"            normalized_image_array ",[39,48514,50],{"class":49},[39,48516,48517],{"class":45}," image_array ",[39,48519,1784],{"class":49},[39,48521,48522],{"class":56}," 255.0\n",[39,48524,48525],{"class":41,"line":2812},[39,48526,3458],{"emptyLinePlaceholder":1145},[39,48528,48529],{"class":41,"line":2817},[39,48530,48531],{"class":102},"            # print(image_path)\n",[39,48533,48534],{"class":41,"line":2822},[39,48535,48536],{"class":102},"            # print(normalized_image_array.shape)\n",[39,48538,48539],{"class":41,"line":2836},[39,48540,48541],{"class":102},"            # 累积归一化后的像素值和像素数量\n",[39,48543,48544,48547,48549],{"class":41,"line":2841},[39,48545,48546],{"class":45},"            total_pixels ",[39,48548,10533],{"class":49},[39,48550,48551],{"class":45}," normalized_image_array.size\n",[39,48553,48554],{"class":41,"line":3635},[39,48555,48556],{"class":102},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[39,48558,48559,48562,48564,48567,48569,48571,48573,48575,48577,48579],{"class":41,"line":3649},[39,48560,48561],{"class":45},"            sum_normalized_pixel_values ",[39,48563,10533],{"class":49},[39,48565,48566],{"class":45}," np.sum(normalized_image_array, ",[39,48568,255],{"class":254},[39,48570,50],{"class":49},[39,48572,1221],{"class":45},[39,48574,260],{"class":56},[39,48576,13491],{"class":45},[39,48578,57],{"class":56},[39,48580,31552],{"class":45},[39,48582,48583],{"class":41,"line":3657},[39,48584,3458],{"emptyLinePlaceholder":1145},[39,48586,48587],{"class":41,"line":3662},[39,48588,48589],{"class":102},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[39,48591,48592,48595,48597,48600,48602],{"class":41,"line":3668},[39,48593,48594],{"class":45},"mean ",[39,48596,50],{"class":49},[39,48598,48599],{"class":45}," sum_normalized_pixel_values ",[39,48601,1784],{"class":49},[39,48603,48604],{"class":45}," total_pixels\n",[39,48606,48607],{"class":41,"line":3674},[39,48608,3458],{"emptyLinePlaceholder":1145},[39,48610,48611,48614,48616,48618,48620],{"class":41,"line":3679},[39,48612,48613],{"class":45},"sum_squared_diff ",[39,48615,50],{"class":49},[39,48617,48398],{"class":45},[39,48619,68],{"class":56},[39,48621,209],{"class":45},[39,48623,48624],{"class":41,"line":9004},[39,48625,3458],{"emptyLinePlaceholder":1145},[39,48627,48628],{"class":41,"line":9028},[39,48629,48630],{"class":102},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[39,48632,48633],{"class":41,"line":9033},[39,48634,48635],{"class":102},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[39,48637,48638],{"class":41,"line":9039},[39,48639,48640],{"class":102},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[39,48642,48643],{"class":41,"line":9066},[39,48644,48645],{"class":102},"# Image.open(image_path)：打开图片\n",[39,48647,48648],{"class":41,"line":9071},[39,48649,48650],{"class":102},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[39,48652,48653,48655,48657,48659],{"class":41,"line":9077},[39,48654,4083],{"class":49},[39,48656,48421],{"class":45},[39,48658,27100],{"class":49},[39,48660,48426],{"class":45},[39,48662,48663,48665,48667,48669],{"class":41,"line":9089},[39,48664,4259],{"class":49},[39,48666,48433],{"class":45},[39,48668,27100],{"class":49},[39,48670,48438],{"class":45},[39,48672,48673,48675,48677,48679,48681,48683,48685,48687,48689,48691],{"class":41,"line":9101},[39,48674,3555],{"class":49},[39,48676,48445],{"class":45},[39,48678,48448],{"class":1319},[39,48680,13491],{"class":45},[39,48682,48453],{"class":1319},[39,48684,13491],{"class":45},[39,48686,48458],{"class":1319},[39,48688,13491],{"class":45},[39,48690,48463],{"class":1319},[39,48692,48693],{"class":45},")):\n",[39,48695,48696,48698,48700],{"class":41,"line":9113},[39,48697,46728],{"class":45},[39,48699,50],{"class":49},[39,48701,48478],{"class":45},[39,48703,48704,48706,48708],{"class":41,"line":10772},[39,48705,48483],{"class":45},[39,48707,50],{"class":49},[39,48709,48488],{"class":45},[39,48711,48712,48714,48716],{"class":41,"line":10797},[39,48713,48493],{"class":45},[39,48715,50],{"class":49},[39,48717,48498],{"class":45},[39,48719,48720],{"class":41,"line":10820},[39,48721,48507],{"class":102},[39,48723,48724,48726,48728,48730,48732],{"class":41,"line":10844},[39,48725,48512],{"class":45},[39,48727,50],{"class":49},[39,48729,48517],{"class":45},[39,48731,1784],{"class":49},[39,48733,48522],{"class":56},[39,48735,48736],{"class":41,"line":10849},[39,48737,48536],{"class":102},[39,48739,48740],{"class":41,"line":10854},[39,48741,48742],{"class":102},"            # print(mean.shape)\n",[39,48744,48745],{"class":41,"line":10859},[39,48746,48531],{"class":102},[39,48748,48749],{"class":41,"line":10868},[39,48750,3458],{"emptyLinePlaceholder":1145},[39,48752,48753,48756],{"class":41,"line":10873},[39,48754,48755],{"class":49},"            try",[39,48757,4797],{"class":45},[39,48759,48760,48763,48765,48768,48770,48773,48775],{"class":41,"line":10879},[39,48761,48762],{"class":45},"                diff ",[39,48764,50],{"class":49},[39,48766,48767],{"class":45}," (normalized_image_array ",[39,48769,1732],{"class":49},[39,48771,48772],{"class":45}," mean) ",[39,48774,11717],{"class":49},[39,48776,48777],{"class":56}," 2\n",[39,48779,48780,48783,48785,48788,48790,48792,48794,48796,48798,48800],{"class":41,"line":10900},[39,48781,48782],{"class":45},"                sum_squared_diff ",[39,48784,10533],{"class":49},[39,48786,48787],{"class":45}," np.sum(diff, ",[39,48789,255],{"class":254},[39,48791,50],{"class":49},[39,48793,1221],{"class":45},[39,48795,260],{"class":56},[39,48797,13491],{"class":45},[39,48799,57],{"class":56},[39,48801,31552],{"class":45},[39,48803,48804,48807],{"class":41,"line":10906},[39,48805,48806],{"class":49},"            except",[39,48808,4797],{"class":45},[39,48810,48811,48814,48816,48818,48821],{"class":41,"line":10920},[39,48812,48813],{"class":56},"                print",[39,48815,1221],{"class":45},[39,48817,1270],{"class":49},[39,48819,48820],{"class":1319},"\"捕获到自定义异常\"",[39,48822,209],{"class":45},[39,48824,48825],{"class":41,"line":10926},[39,48826,48827],{"class":102},"            # diff = (normalized_image_array - mean) ** 2\n",[39,48829,48830],{"class":41,"line":10953},[39,48831,48832],{"class":102},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[39,48834,48835],{"class":41,"line":10962},[39,48836,3458],{"emptyLinePlaceholder":1145},[39,48838,48839,48842,48844,48847,48849],{"class":41,"line":10968},[39,48840,48841],{"class":45},"variance ",[39,48843,50],{"class":49},[39,48845,48846],{"class":45}," sum_squared_diff ",[39,48848,1784],{"class":49},[39,48850,48604],{"class":45},[39,48852,48853],{"class":41,"line":10976},[39,48854,3458],{"emptyLinePlaceholder":1145},[39,48856,48857,48859,48861,48864],{"class":41,"line":10981},[39,48858,31470],{"class":56},[39,48860,1221],{"class":45},[39,48862,48863],{"class":1319},"\"Mean:\"",[39,48865,48866],{"class":45},", mean)\n",[39,48868,48869,48871,48873,48876],{"class":41,"line":17660},[39,48870,31470],{"class":56},[39,48872,1221],{"class":45},[39,48874,48875],{"class":1319},"\"Variance:\"",[39,48877,48878],{"class":45},", variance)\n",[29,48880,48882],{"className":31,"code":48881,"language":33,"meta":34,"style":34},"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",[36,48883,48884,48890,48896,48906,48912,48922,48936,48946,48956,48966,48970,48980,48990,48994,48998,49006,49011,49016,49035,49039,49044,49049,49054,49059,49100,49105,49115,49120,49133,49138,49143,49148,49153,49158,49162,49167,49172,49194,49198,49230,49244,49254,49264,49268,49278,49292,49302,49312,49322,49328,49332,49336,49340,49344,49348,49356,49376,49380,49384,49388,49392,49408,49412,49416,49424,49428,49432,49440,49444,49448,49452,49460,49464,49468,49472,49480,49484,49492,49496,49504,49508,49516,49520,49528,49532,49536,49544,49548,49552,49564,49588,49602,49606,49610,49614,49622,49626,49634,49638,49646,49650,49658,49662,49670,49674,49682,49686,49698,49702,49710,49714,49722,49726,49730,49734,49738,49746,49750,49766,49770,49778,49782,49786,49790,49794,49798,49802,49806,49822,49826,49838,49842,49854,49858,49870,49874,49882,49886,49894,49898,49902,49906,49912,49916,49924,49928,49944,49948,49956,49960,49976,49988,49992,50004,50008,50012,50020,50024,50028,50036,50040,50048,50052,50060,50064,50068,50110,50152,50156,50160,50176,50180,50196,50200,50204,50212,50216,50220,50232,50270,50274,50278,50286,50290,50304,50314,50320,50326,50332,50338,50342,50346,50352,50356,50360,50368,50372,50390,50394,50398,50402,50418,50422,50426,50430,50434,50438,50458,50478,50482,50486,50490,50498,50506,50510,50526,50546,50566,50570,50575,50584,50593,50598,50603,50608,50621,50626,50635,50644,50661],{"__ignoreMap":34},[39,48885,48886,48888],{"class":41,"line":42},[39,48887,31447],{"class":49},[39,48889,32877],{"class":45},[39,48891,48892,48894],{"class":41,"line":74},[39,48893,31447],{"class":49},[39,48895,32884],{"class":45},[39,48897,48898,48900,48902,48904],{"class":41,"line":99},[39,48899,31447],{"class":49},[39,48901,32895],{"class":45},[39,48903,32438],{"class":49},[39,48905,32900],{"class":45},[39,48907,48908,48910],{"class":41,"line":106},[39,48909,31447],{"class":49},[39,48911,31450],{"class":45},[39,48913,48914,48916,48918,48920],{"class":41,"line":112},[39,48915,31792],{"class":49},[39,48917,32470],{"class":45},[39,48919,31447],{"class":49},[39,48921,32917],{"class":45},[39,48923,48924,48926,48928,48930,48933],{"class":41,"line":118},[39,48925,31792],{"class":49},[39,48927,32423],{"class":45},[39,48929,31447],{"class":49},[39,48931,48932],{"class":45}," ImageFolder ",[39,48934,48935],{"class":102},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[39,48937,48938,48940,48942,48944],{"class":41,"line":413},[39,48939,31792],{"class":49},[39,48941,32453],{"class":45},[39,48943,31447],{"class":49},[39,48945,32458],{"class":45},[39,48947,48948,48950,48952,48954],{"class":41,"line":419},[39,48949,31447],{"class":49},[39,48951,32470],{"class":45},[39,48953,32438],{"class":49},[39,48955,32475],{"class":45},[39,48957,48958,48960,48962,48964],{"class":41,"line":425},[39,48959,31447],{"class":49},[39,48961,32487],{"class":45},[39,48963,32438],{"class":49},[39,48965,32492],{"class":45},[39,48967,48968],{"class":41,"line":443},[39,48969,32962],{"class":102},[39,48971,48972,48974,48976,48978],{"class":41,"line":449},[39,48973,31792],{"class":49},[39,48975,32969],{"class":45},[39,48977,31447],{"class":49},[39,48979,44086],{"class":45},[39,48981,48982,48984,48986,48988],{"class":41,"line":455},[39,48983,31792],{"class":49},[39,48985,31795],{"class":45},[39,48987,31447],{"class":49},[39,48989,31800],{"class":45},[39,48991,48992],{"class":41,"line":461},[39,48993,3458],{"emptyLinePlaceholder":1145},[39,48995,48996],{"class":41,"line":475},[39,48997,32997],{"class":102},[39,48999,49000,49002,49004],{"class":41,"line":665},[39,49001,33002],{"class":49},[39,49003,33005],{"class":3021},[39,49005,33008],{"class":45},[39,49007,49008],{"class":41,"line":671},[39,49009,49010],{"class":102},"    # 导入自己的数据集，并进行数据处理\n",[39,49012,49013],{"class":41,"line":684},[39,49014,49015],{"class":102},"    # 定义数据集的路径\n",[39,49017,49018,49021,49023,49025,49027,49029,49033],{"class":41,"line":2732},[39,49019,49020],{"class":56},"    ROOT_PATH",[39,49022,50],{"class":49},[39,49024,1869],{"class":49},[39,49026,1462],{"class":1319},[39,49028,1758],{"class":56},[39,49030,49032],{"class":49031},"sA_wV","\u002Fdata\u002Ftrain",[39,49034,26190],{"class":1319},[39,49036,49037],{"class":41,"line":2737},[39,49038,3458],{"emptyLinePlaceholder":1145},[39,49040,49041],{"class":41,"line":2751},[39,49042,49043],{"class":102},"    # 定义归一化方法\n",[39,49045,49046],{"class":41,"line":2756},[39,49047,49048],{"class":102},"    # 这里需要先计算一下数据集的均值和方差\n",[39,49050,49051],{"class":41,"line":2785},[39,49052,49053],{"class":102},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[39,49055,49056],{"class":41,"line":2790},[39,49057,49058],{"class":102},"    # 第一个参数是均值，第二个参数是方差\n",[39,49060,49061,49064,49066,49069,49072,49074,49077,49079,49082,49085,49088,49090,49093,49095,49098],{"class":41,"line":2807},[39,49062,49063],{"class":45},"    normalize",[39,49065,50],{"class":49},[39,49067,49068],{"class":45},"transforms.Normalize([",[39,49070,49071],{"class":56},"0.162",[39,49073,60],{"class":45},[39,49075,49076],{"class":56},"0.151",[39,49078,60],{"class":45},[39,49080,49081],{"class":56},"0.138",[39,49083,49084],{"class":45},"],[",[39,49086,49087],{"class":56},"0.058",[39,49089,60],{"class":45},[39,49091,49092],{"class":56},"0.052",[39,49094,60],{"class":45},[39,49096,49097],{"class":56},"0.048",[39,49099,71],{"class":45},[39,49101,49102],{"class":41,"line":2812},[39,49103,49104],{"class":102},"    # 定义数据集处理方法变量\n",[39,49106,49107,49110,49112],{"class":41,"line":2817},[39,49108,49109],{"class":45},"    train_transform",[39,49111,50],{"class":49},[39,49113,49114],{"class":45},"transforms.Compose([\n",[39,49116,49117],{"class":41,"line":2822},[39,49118,49119],{"class":102},"        # 调整图像大小为224*224\n",[39,49121,49122,49125,49127,49129,49131],{"class":41,"line":2836},[39,49123,49124],{"class":45},"        transforms.Resize((",[39,49126,32556],{"class":56},[39,49128,60],{"class":45},[39,49130,32556],{"class":56},[39,49132,43677],{"class":45},[39,49134,49135],{"class":41,"line":2841},[39,49136,49137],{"class":102},"        # 将图像转换为张量\n",[39,49139,49140],{"class":41,"line":3635},[39,49141,49142],{"class":45},"        transforms.ToTensor(),\n",[39,49144,49145],{"class":41,"line":3649},[39,49146,49147],{"class":45},"        normalize])\n",[39,49149,49150],{"class":41,"line":3657},[39,49151,49152],{"class":102},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[39,49154,49155],{"class":41,"line":3662},[39,49156,49157],{"class":102},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[39,49159,49160],{"class":41,"line":3668},[39,49161,3458],{"emptyLinePlaceholder":1145},[39,49163,49164],{"class":41,"line":3674},[39,49165,49166],{"class":102},"    # 加载数据集\n",[39,49168,49169],{"class":41,"line":3679},[39,49170,49171],{"class":102},"    # 传入数据集路径与处理方法\n",[39,49173,49174,49176,49178,49181,49184,49186,49189,49191],{"class":41,"line":9004},[39,49175,33013],{"class":45},[39,49177,50],{"class":49},[39,49179,49180],{"class":45},"ImageFolder(",[39,49182,49183],{"class":56},"ROOT_PATH",[39,49185,60],{"class":45},[39,49187,49188],{"class":254},"transform",[39,49190,50],{"class":49},[39,49192,49193],{"class":45},"train_transform)\n",[39,49195,49196],{"class":41,"line":9028},[39,49197,3458],{"emptyLinePlaceholder":1145},[39,49199,49200,49202,49204,49206,49208,49210,49212,49214,49216,49218,49220,49222,49224,49226,49228],{"class":41,"line":9033},[39,49201,33065],{"class":45},[39,49203,50],{"class":49},[39,49205,33070],{"class":45},[39,49207,33073],{"class":56},[39,49209,1221],{"class":45},[39,49211,33078],{"class":56},[39,49213,1657],{"class":49},[39,49215,8414],{"class":56},[39,49217,33085],{"class":45},[39,49219,33073],{"class":56},[39,49221,1221],{"class":45},[39,49223,33092],{"class":56},[39,49225,1657],{"class":49},[39,49227,8414],{"class":56},[39,49229,33099],{"class":45},[39,49231,49232,49234,49236,49238,49240,49242],{"class":41,"line":9039},[39,49233,33104],{"class":45},[39,49235,50],{"class":49},[39,49237,33109],{"class":45},[39,49239,32592],{"class":254},[39,49241,50],{"class":49},[39,49243,32597],{"class":45},[39,49245,49246,49248,49250,49252],{"class":41,"line":9066},[39,49247,33120],{"class":254},[39,49249,50],{"class":49},[39,49251,1410],{"class":56},[39,49253,32521],{"class":45},[39,49255,49256,49258,49260,49262],{"class":41,"line":9071},[39,49257,33132],{"class":254},[39,49259,50],{"class":49},[39,49261,32531],{"class":56},[39,49263,32521],{"class":45},[39,49265,49266],{"class":41,"line":9077},[39,49267,33143],{"class":102},[39,49269,49270,49272,49274,49276],{"class":41,"line":9089},[39,49271,33148],{"class":254},[39,49273,50],{"class":49},[39,49275,1598],{"class":56},[39,49277,209],{"class":45},[39,49279,49280,49282,49284,49286,49288,49290],{"class":41,"line":9101},[39,49281,33159],{"class":45},[39,49283,50],{"class":49},[39,49285,32589],{"class":45},[39,49287,32592],{"class":254},[39,49289,50],{"class":49},[39,49291,33170],{"class":45},[39,49293,49294,49296,49298,49300],{"class":41,"line":9113},[39,49295,33175],{"class":254},[39,49297,50],{"class":49},[39,49299,1410],{"class":56},[39,49301,32521],{"class":45},[39,49303,49304,49306,49308,49310],{"class":41,"line":10772},[39,49305,33186],{"class":254},[39,49307,50],{"class":49},[39,49309,32531],{"class":56},[39,49311,32521],{"class":45},[39,49313,49314,49316,49318,49320],{"class":41,"line":10797},[39,49315,33197],{"class":254},[39,49317,50],{"class":49},[39,49319,1598],{"class":56},[39,49321,209],{"class":45},[39,49323,49324,49326],{"class":41,"line":10820},[39,49325,5148],{"class":49},[39,49327,33210],{"class":45},[39,49329,49330],{"class":41,"line":10844},[39,49331,3458],{"emptyLinePlaceholder":1145},[39,49333,49334],{"class":41,"line":10849},[39,49335,33219],{"class":102},[39,49337,49338],{"class":41,"line":10854},[39,49339,33224],{"class":102},[39,49341,49342],{"class":41,"line":10859},[39,49343,3458],{"emptyLinePlaceholder":1145},[39,49345,49346],{"class":41,"line":10868},[39,49347,33233],{"class":102},[39,49349,49350,49352,49354],{"class":41,"line":10873},[39,49351,33002],{"class":49},[39,49353,33240],{"class":3021},[39,49355,33243],{"class":45},[39,49357,49358,49360,49362,49364,49366,49368,49370,49372,49374],{"class":41,"line":10879},[39,49359,32292],{"class":45},[39,49361,50],{"class":49},[39,49363,31506],{"class":45},[39,49365,32299],{"class":1319},[39,49367,2762],{"class":49},[39,49369,32304],{"class":45},[39,49371,2759],{"class":49},[39,49373,33262],{"class":1319},[39,49375,209],{"class":45},[39,49377,49378],{"class":41,"line":10900},[39,49379,3458],{"emptyLinePlaceholder":1145},[39,49381,49382],{"class":41,"line":10906},[39,49383,33277],{"class":102},[39,49385,49386],{"class":41,"line":10920},[39,49387,33282],{"class":102},[39,49389,49390],{"class":41,"line":10926},[39,49391,33287],{"class":102},[39,49393,49394,49396,49398,49400,49402,49404,49406],{"class":41,"line":10953},[39,49395,33292],{"class":45},[39,49397,50],{"class":49},[39,49399,33297],{"class":45},[39,49401,33300],{"class":254},[39,49403,50],{"class":49},[39,49405,33305],{"class":56},[39,49407,209],{"class":45},[39,49409,49410],{"class":41,"line":10962},[39,49411,3458],{"emptyLinePlaceholder":1145},[39,49413,49414],{"class":41,"line":10968},[39,49415,33316],{"class":102},[39,49417,49418,49420,49422],{"class":41,"line":10976},[39,49419,33321],{"class":45},[39,49421,50],{"class":49},[39,49423,33326],{"class":45},[39,49425,49426],{"class":41,"line":10981},[39,49427,3458],{"emptyLinePlaceholder":1145},[39,49429,49430],{"class":41,"line":17660},[39,49431,33335],{"class":102},[39,49433,49434,49436,49438],{"class":41,"line":17666},[39,49435,32344],{"class":45},[39,49437,50],{"class":49},[39,49439,33344],{"class":45},[39,49441,49442],{"class":41,"line":17689},[39,49443,33349],{"class":102},[39,49445,49446],{"class":41,"line":17695},[39,49447,33354],{"class":102},[39,49449,49450],{"class":41,"line":17718},[39,49451,33359],{"class":102},[39,49453,49454,49456,49458],{"class":41,"line":17732},[39,49455,33364],{"class":45},[39,49457,50],{"class":49},[39,49459,33369],{"class":45},[39,49461,49462],{"class":41,"line":17752},[39,49463,3458],{"emptyLinePlaceholder":1145},[39,49465,49466],{"class":41,"line":17758},[39,49467,33382],{"class":102},[39,49469,49470],{"class":41,"line":17769},[39,49471,33387],{"class":102},[39,49473,49474,49476,49478],{"class":41,"line":17792},[39,49475,33392],{"class":45},[39,49477,50],{"class":49},[39,49479,33397],{"class":56},[39,49481,49482],{"class":41,"line":17814},[39,49483,33402],{"class":102},[39,49485,49486,49488,49490],{"class":41,"line":17819},[39,49487,33407],{"class":45},[39,49489,50],{"class":49},[39,49491,33412],{"class":45},[39,49493,49494],{"class":41,"line":17825},[39,49495,33417],{"class":102},[39,49497,49498,49500,49502],{"class":41,"line":17839},[39,49499,33422],{"class":45},[39,49501,50],{"class":49},[39,49503,33412],{"class":45},[39,49505,49506],{"class":41,"line":17852},[39,49507,33431],{"class":102},[39,49509,49510,49512,49514],{"class":41,"line":17857},[39,49511,33436],{"class":45},[39,49513,50],{"class":49},[39,49515,33412],{"class":45},[39,49517,49518],{"class":41,"line":17871},[39,49519,33445],{"class":102},[39,49521,49522,49524,49526],{"class":41,"line":17876},[39,49523,33450],{"class":45},[39,49525,50],{"class":49},[39,49527,33412],{"class":45},[39,49529,49530],{"class":41,"line":17882},[39,49531,3458],{"emptyLinePlaceholder":1145},[39,49533,49534],{"class":41,"line":17887},[39,49535,33463],{"class":102},[39,49537,49538,49540,49542],{"class":41,"line":17901},[39,49539,33468],{"class":45},[39,49541,50],{"class":49},[39,49543,33473],{"class":45},[39,49545,49546],{"class":41,"line":17906},[39,49547,3458],{"emptyLinePlaceholder":1145},[39,49549,49550],{"class":41,"line":17911},[39,49551,33486],{"class":102},[39,49553,49554,49556,49558,49560,49562],{"class":41,"line":17925},[39,49555,4259],{"class":49},[39,49557,33493],{"class":45},[39,49559,27100],{"class":49},[39,49561,33498],{"class":56},[39,49563,33501],{"class":45},[39,49565,49566,49568,49570,49572,49574,49576,49578,49580,49582,49584,49586],{"class":41,"line":17937},[39,49567,33506],{"class":56},[39,49569,1221],{"class":45},[39,49571,33511],{"class":1319},[39,49573,33514],{"class":56},[39,49575,1784],{"class":1319},[39,49577,33514],{"class":56},[39,49579,1462],{"class":1319},[39,49581,33523],{"class":45},[39,49583,1732],{"class":49},[39,49585,57],{"class":56},[39,49587,31552],{"class":45},[39,49589,49590,49592,49594,49596,49598,49600],{"class":41,"line":17942},[39,49591,33506],{"class":56},[39,49593,1221],{"class":45},[39,49595,33538],{"class":1319},[39,49597,1657],{"class":49},[39,49599,146],{"class":56},[39,49601,209],{"class":45},[39,49603,49604],{"class":41,"line":17955},[39,49605,3458],{"emptyLinePlaceholder":1145},[39,49607,49608],{"class":41,"line":17960},[39,49609,33553],{"class":102},[39,49611,49612],{"class":41,"line":17965},[39,49613,33558],{"class":102},[39,49615,49616,49618,49620],{"class":41,"line":17970},[39,49617,33563],{"class":45},[39,49619,50],{"class":49},[39,49621,33397],{"class":56},[39,49623,49624],{"class":41,"line":17983},[39,49625,33572],{"class":102},[39,49627,49628,49630,49632],{"class":41,"line":17988},[39,49629,33577],{"class":45},[39,49631,50],{"class":49},[39,49633,4143],{"class":56},[39,49635,49636],{"class":41,"line":33688},[39,49637,33586],{"class":102},[39,49639,49640,49642,49644],{"class":41,"line":33694},[39,49641,33591],{"class":45},[39,49643,50],{"class":49},[39,49645,33397],{"class":56},[39,49647,49648],{"class":41,"line":33700},[39,49649,33600],{"class":102},[39,49651,49652,49654,49656],{"class":41,"line":33706},[39,49653,33605],{"class":45},[39,49655,50],{"class":49},[39,49657,4143],{"class":56},[39,49659,49660],{"class":41,"line":33712},[39,49661,33614],{"class":102},[39,49663,49664,49666,49668],{"class":41,"line":33723},[39,49665,33619],{"class":45},[39,49667,50],{"class":49},[39,49669,4143],{"class":56},[39,49671,49672],{"class":41,"line":33729},[39,49673,33628],{"class":102},[39,49675,49676,49678,49680],{"class":41,"line":33749},[39,49677,33633],{"class":45},[39,49679,50],{"class":49},[39,49681,4143],{"class":56},[39,49683,49684],{"class":41,"line":33755},[39,49685,33642],{"class":102},[39,49687,49688,49690,49692,49694,49696],{"class":41,"line":33766},[39,49689,4461],{"class":49},[39,49691,32656],{"class":45},[39,49693,27100],{"class":49},[39,49695,32661],{"class":56},[39,49697,33655],{"class":45},[39,49699,49700],{"class":41,"line":33772},[39,49701,33660],{"class":102},[39,49703,49704,49706,49708],{"class":41,"line":33778},[39,49705,33665],{"class":45},[39,49707,50],{"class":49},[39,49709,33670],{"class":45},[39,49711,49712],{"class":41,"line":33784},[39,49713,33675],{"class":102},[39,49715,49716,49718,49720],{"class":41,"line":33790},[39,49717,33680],{"class":45},[39,49719,50],{"class":49},[39,49721,33685],{"class":45},[39,49723,49724],{"class":41,"line":33796},[39,49725,33691],{"class":102},[39,49727,49728],{"class":41,"line":33802},[39,49729,33697],{"class":45},[39,49731,49732],{"class":41,"line":33808},[39,49733,33703],{"class":102},[39,49735,49736],{"class":41,"line":33828},[39,49737,33709],{"class":102},[39,49739,49740,49742,49744],{"class":41,"line":33834},[39,49741,33715],{"class":45},[39,49743,50],{"class":49},[39,49745,33720],{"class":45},[39,49747,49748],{"class":41,"line":33850},[39,49749,33726],{"class":102},[39,49751,49752,49754,49756,49758,49760,49762,49764],{"class":41,"line":33856},[39,49753,33732],{"class":45},[39,49755,50],{"class":49},[39,49757,33737],{"class":45},[39,49759,33740],{"class":254},[39,49761,50],{"class":49},[39,49763,57],{"class":56},[39,49765,209],{"class":45},[39,49767,49768],{"class":41,"line":33870},[39,49769,33752],{"class":102},[39,49771,49772,49774,49776],{"class":41,"line":33876},[39,49773,33758],{"class":45},[39,49775,50],{"class":49},[39,49777,33763],{"class":45},[39,49779,49780],{"class":41,"line":33891},[39,49781,33769],{"class":102},[39,49783,49784],{"class":41,"line":33897},[39,49785,33775],{"class":45},[39,49787,49788],{"class":41,"line":33906},[39,49789,33781],{"class":102},[39,49791,49792],{"class":41,"line":33912},[39,49793,33787],{"class":45},[39,49795,49796],{"class":41,"line":33921},[39,49797,33793],{"class":102},[39,49799,49800],{"class":41,"line":33927},[39,49801,33799],{"class":45},[39,49803,49804],{"class":41,"line":33933},[39,49805,33805],{"class":102},[39,49807,49808,49810,49812,49814,49816,49818,49820],{"class":41,"line":33942},[39,49809,33811],{"class":45},[39,49811,10533],{"class":49},[39,49813,33816],{"class":45},[39,49815,1657],{"class":49},[39,49817,33821],{"class":45},[39,49819,260],{"class":56},[39,49821,209],{"class":45},[39,49823,49824],{"class":41,"line":33948},[39,49825,33831],{"class":102},[39,49827,49828,49830,49832,49834,49836],{"class":41,"line":33959},[39,49829,33837],{"class":45},[39,49831,10533],{"class":49},[39,49833,33842],{"class":45},[39,49835,4007],{"class":49},[39,49837,33847],{"class":45},[39,49839,49840],{"class":41,"line":33965},[39,49841,33853],{"class":102},[39,49843,49844,49846,49848,49850,49852],{"class":41,"line":33984},[39,49845,33859],{"class":45},[39,49847,10533],{"class":49},[39,49849,33821],{"class":45},[39,49851,260],{"class":56},[39,49853,209],{"class":45},[39,49855,49856],{"class":41,"line":33990},[39,49857,33873],{"class":102},[39,49859,49860,49862,49864,49866,49868],{"class":41,"line":34001},[39,49861,4461],{"class":49},[39,49863,33881],{"class":45},[39,49865,27100],{"class":49},[39,49867,32661],{"class":56},[39,49869,33888],{"class":45},[39,49871,49872],{"class":41,"line":34007},[39,49873,33894],{"class":102},[39,49875,49876,49878,49880],{"class":41,"line":34027},[39,49877,33665],{"class":45},[39,49879,50],{"class":49},[39,49881,33670],{"class":45},[39,49883,49884],{"class":41,"line":34043},[39,49885,33909],{"class":102},[39,49887,49888,49890,49892],{"class":41,"line":34049},[39,49889,33680],{"class":45},[39,49891,50],{"class":49},[39,49893,33685],{"class":45},[39,49895,49896],{"class":41,"line":34063},[39,49897,33924],{"class":102},[39,49899,49900],{"class":41,"line":34069},[39,49901,33930],{"class":45},[39,49903,49904],{"class":41,"line":34075},[39,49905,37411],{"class":102},[39,49907,49908,49910],{"class":41,"line":34086},[39,49909,33936],{"class":49},[39,49911,33939],{"class":45},[39,49913,49914],{"class":41,"line":34092},[39,49915,33945],{"class":102},[39,49917,49918,49920,49922],{"class":41,"line":34098},[39,49919,37426],{"class":45},[39,49921,50],{"class":49},[39,49923,33720],{"class":45},[39,49925,49926],{"class":41,"line":34108},[39,49927,33962],{"class":102},[39,49929,49930,49932,49934,49936,49938,49940,49942],{"class":41,"line":34114},[39,49931,37439],{"class":45},[39,49933,50],{"class":49},[39,49935,33737],{"class":45},[39,49937,33740],{"class":254},[39,49939,50],{"class":49},[39,49941,57],{"class":56},[39,49943,209],{"class":45},[39,49945,49946],{"class":41,"line":34125},[39,49947,33987],{"class":102},[39,49949,49950,49952,49954],{"class":41,"line":34131},[39,49951,37460],{"class":45},[39,49953,50],{"class":49},[39,49955,33763],{"class":45},[39,49957,49958],{"class":41,"line":34141},[39,49959,34004],{"class":102},[39,49961,49962,49964,49966,49968,49970,49972,49974],{"class":41,"line":34146},[39,49963,37473],{"class":45},[39,49965,10533],{"class":49},[39,49967,37478],{"class":45},[39,49969,1657],{"class":49},[39,49971,33821],{"class":45},[39,49973,260],{"class":56},[39,49975,209],{"class":45},[39,49977,49978,49980,49982,49984,49986],{"class":41,"line":34152},[39,49979,37491],{"class":45},[39,49981,10533],{"class":49},[39,49983,33842],{"class":45},[39,49985,4007],{"class":49},[39,49987,33847],{"class":45},[39,49989,49990],{"class":41,"line":34201},[39,49991,37504],{"class":102},[39,49993,49994,49996,49998,50000,50002],{"class":41,"line":34248},[39,49995,37509],{"class":45},[39,49997,10533],{"class":49},[39,49999,33821],{"class":45},[39,50001,260],{"class":56},[39,50003,209],{"class":45},[39,50005,50006],{"class":41,"line":34253},[39,50007,34066],{"class":102},[39,50009,50010],{"class":41,"line":34259},[39,50011,34072],{"class":102},[39,50013,50014,50016,50018],{"class":41,"line":34278},[39,50015,34078],{"class":45},[39,50017,1784],{"class":49},[39,50019,34083],{"class":45},[39,50021,50022],{"class":41,"line":34284},[39,50023,34089],{"class":102},[39,50025,50026],{"class":41,"line":34304},[39,50027,34095],{"class":102},[39,50029,50030,50032,50034],{"class":41,"line":34310},[39,50031,34101],{"class":45},[39,50033,1784],{"class":49},[39,50035,34083],{"class":45},[39,50037,50038],{"class":41,"line":34316},[39,50039,34111],{"class":102},[39,50041,50042,50044,50046],{"class":41,"line":34326},[39,50043,34117],{"class":45},[39,50045,1784],{"class":49},[39,50047,34122],{"class":45},[39,50049,50050],{"class":41,"line":34331},[39,50051,34128],{"class":102},[39,50053,50054,50056,50058],{"class":41,"line":34337},[39,50055,34134],{"class":45},[39,50057,1784],{"class":49},[39,50059,34122],{"class":45},[39,50061,50062],{"class":41,"line":34353},[39,50063,3458],{"emptyLinePlaceholder":1145},[39,50065,50066],{"class":41,"line":34398},[39,50067,34149],{"class":102},[39,50069,50070,50072,50074,50076,50078,50080,50082,50084,50086,50088,50090,50092,50094,50096,50098,50100,50102,50104,50106,50108],{"class":41,"line":34404},[39,50071,33506],{"class":56},[39,50073,1221],{"class":45},[39,50075,4650],{"class":1319},[39,50077,33514],{"class":56},[39,50079,34163],{"class":1319},[39,50081,2094],{"class":56},[39,50083,34168],{"class":49},[39,50085,2144],{"class":56},[39,50087,34173],{"class":1319},[39,50089,2094],{"class":56},[39,50091,34168],{"class":49},[39,50093,2144],{"class":56},[39,50095,4650],{"class":1319},[39,50097,34184],{"class":45},[39,50099,1732],{"class":49},[39,50101,57],{"class":56},[39,50103,34191],{"class":45},[39,50105,1732],{"class":49},[39,50107,57],{"class":56},[39,50109,34198],{"class":45},[39,50111,50112,50114,50116,50118,50120,50122,50124,50126,50128,50130,50132,50134,50136,50138,50140,50142,50144,50146,50148,50150],{"class":41,"line":34410},[39,50113,33506],{"class":56},[39,50115,1221],{"class":45},[39,50117,4650],{"class":1319},[39,50119,33514],{"class":56},[39,50121,34212],{"class":1319},[39,50123,2094],{"class":56},[39,50125,34168],{"class":49},[39,50127,2144],{"class":56},[39,50129,34221],{"class":1319},[39,50131,2094],{"class":56},[39,50133,34168],{"class":49},[39,50135,2144],{"class":56},[39,50137,4650],{"class":1319},[39,50139,34232],{"class":45},[39,50141,1732],{"class":49},[39,50143,57],{"class":56},[39,50145,34239],{"class":45},[39,50147,1732],{"class":49},[39,50149,57],{"class":56},[39,50151,34198],{"class":45},[39,50153,50154],{"class":41,"line":34416},[39,50155,3458],{"emptyLinePlaceholder":1145},[39,50157,50158],{"class":41,"line":34427},[39,50159,34256],{"class":102},[39,50161,50162,50164,50166,50168,50170,50172,50174],{"class":41,"line":34433},[39,50163,3555],{"class":49},[39,50165,34264],{"class":45},[39,50167,1732],{"class":49},[39,50169,57],{"class":56},[39,50171,2138],{"class":45},[39,50173,2158],{"class":49},[39,50175,34275],{"class":45},[39,50177,50178],{"class":41,"line":34439},[39,50179,34281],{"class":102},[39,50181,50182,50184,50186,50188,50190,50192,50194],{"class":41,"line":34445},[39,50183,34287],{"class":45},[39,50185,1259],{"class":56},[39,50187,50],{"class":49},[39,50189,34294],{"class":45},[39,50191,1732],{"class":49},[39,50193,57],{"class":56},[39,50195,34301],{"class":45},[39,50197,50198],{"class":41,"line":34463},[39,50199,34307],{"class":102},[39,50201,50202],{"class":41,"line":34477},[39,50203,34313],{"class":102},[39,50205,50206,50208,50210],{"class":41,"line":34486},[39,50207,34319],{"class":45},[39,50209,50],{"class":49},[39,50211,33369],{"class":45},[39,50213,50214],{"class":41,"line":34495},[39,50215,3458],{"emptyLinePlaceholder":1145},[39,50217,50218],{"class":41,"line":34504},[39,50219,34334],{"class":102},[39,50221,50222,50224,50226,50228,50230],{"class":41,"line":34513},[39,50223,34340],{"class":45},[39,50225,50],{"class":49},[39,50227,34345],{"class":45},[39,50229,1732],{"class":49},[39,50231,34350],{"class":45},[39,50233,50234,50236,50238,50240,50242,50244,50246,50248,50250,50252,50254,50256,50258,50260,50262,50264,50266,50268],{"class":41,"line":34519},[39,50235,33506],{"class":56},[39,50237,1221],{"class":45},[39,50239,34360],{"class":1319},[39,50241,2094],{"class":56},[39,50243,34365],{"class":49},[39,50245,2144],{"class":56},[39,50247,1744],{"class":1319},[39,50249,2094],{"class":56},[39,50251,34365],{"class":49},[39,50253,2144],{"class":56},[39,50255,34378],{"class":1319},[39,50257,34381],{"class":45},[39,50259,34384],{"class":49},[39,50261,2105],{"class":56},[39,50263,34389],{"class":45},[39,50265,1534],{"class":49},[39,50267,2105],{"class":56},[39,50269,31552],{"class":45},[39,50271,50272],{"class":41,"line":34525},[39,50273,37788],{"class":102},[39,50275,50276],{"class":41,"line":34533},[39,50277,37793],{"class":102},[39,50279,50280,50282,50284],{"class":41,"line":34538},[39,50281,37798],{"class":45},[39,50283,34422],{"class":1319},[39,50285,209],{"class":45},[39,50287,50288],{"class":41,"line":34544},[39,50289,34442],{"class":102},[39,50291,50292,50294,50296,50298,50300,50302],{"class":41,"line":34555},[39,50293,34448],{"class":45},[39,50295,50],{"class":49},[39,50297,34453],{"class":45},[39,50299,34456],{"class":254},[39,50301,50],{"class":49},[39,50303,2611],{"class":45},[39,50305,50306,50308,50310,50312],{"class":41,"line":34561},[39,50307,34466],{"class":1319},[39,50309,2057],{"class":45},[39,50311,34471],{"class":56},[39,50313,34474],{"class":45},[39,50315,50316,50318],{"class":41,"line":34581},[39,50317,34480],{"class":1319},[39,50319,34483],{"class":45},[39,50321,50322,50324],{"class":41,"line":34587},[39,50323,34489],{"class":1319},[39,50325,34492],{"class":45},[39,50327,50328,50330],{"class":41,"line":34593},[39,50329,34498],{"class":1319},[39,50331,34501],{"class":45},[39,50333,50334,50336],{"class":41,"line":34599},[39,50335,34507],{"class":1319},[39,50337,34510],{"class":45},[39,50339,50340],{"class":41,"line":34616},[39,50341,34516],{"class":45},[39,50343,50344],{"class":41,"line":34622},[39,50345,34522],{"class":102},[39,50347,50348,50350],{"class":41,"line":34628},[39,50349,5148],{"class":49},[39,50351,34530],{"class":45},[39,50353,50354],{"class":41,"line":34634},[39,50355,3458],{"emptyLinePlaceholder":1145},[39,50357,50358],{"class":41,"line":34640},[39,50359,34541],{"class":102},[39,50361,50362,50364,50366],{"class":41,"line":34646},[39,50363,33002],{"class":49},[39,50365,34549],{"class":3021},[39,50367,34552],{"class":45},[39,50369,50370],{"class":41,"line":34673},[39,50371,34558],{"class":102},[39,50373,50374,50376,50378,50380,50382,50384,50386,50388],{"class":41,"line":34697},[39,50375,34564],{"class":45},[39,50377,32748],{"class":254},[39,50379,50],{"class":49},[39,50381,1221],{"class":45},[39,50383,1699],{"class":56},[39,50385,60],{"class":45},[39,50387,84],{"class":56},[39,50389,31552],{"class":45},[39,50391,50392],{"class":41,"line":34703},[39,50393,34584],{"class":102},[39,50395,50396],{"class":41,"line":34709},[39,50397,34590],{"class":102},[39,50399,50400],{"class":41,"line":34715},[39,50401,34596],{"class":102},[39,50403,50404,50406,50408,50410,50412,50414,50416],{"class":41,"line":34726},[39,50405,32782],{"class":45},[39,50407,57],{"class":56},[39,50409,60],{"class":45},[39,50411,63],{"class":56},[39,50413,60],{"class":45},[39,50415,57],{"class":56},[39,50417,209],{"class":45},[39,50419,50420],{"class":41,"line":34737},[39,50421,34619],{"class":102},[39,50423,50424],{"class":41,"line":34743},[39,50425,34625],{"class":102},[39,50427,50428],{"class":41,"line":34760},[39,50429,34631],{"class":102},[39,50431,50432],{"class":41,"line":34783},[39,50433,34637],{"class":102},[39,50435,50436],{"class":41,"line":34806},[39,50437,34643],{"class":102},[39,50439,50440,50442,50444,50446,50448,50450,50452,50454,50456],{"class":41,"line":34812},[39,50441,34649],{"class":45},[39,50443,34652],{"class":1319},[39,50445,34655],{"class":45},[39,50447,34658],{"class":1319},[39,50449,60],{"class":45},[39,50451,34663],{"class":254},[39,50453,50],{"class":49},[39,50455,34668],{"class":1319},[39,50457,209],{"class":45},[39,50459,50460,50462,50464,50466,50468,50470,50472,50474,50476],{"class":41,"line":34817},[39,50461,34649],{"class":45},[39,50463,34652],{"class":1319},[39,50465,34680],{"class":45},[39,50467,34683],{"class":1319},[39,50469,60],{"class":45},[39,50471,34663],{"class":254},[39,50473,50],{"class":49},[39,50475,34692],{"class":1319},[39,50477,209],{"class":45},[39,50479,50480],{"class":41,"line":34826},[39,50481,34700],{"class":102},[39,50483,50484],{"class":41,"line":34836},[39,50485,34706],{"class":45},[39,50487,50488],{"class":41,"line":34842},[39,50489,34712],{"class":102},[39,50491,50492,50494,50496],{"class":41,"line":34847},[39,50493,34718],{"class":45},[39,50495,34721],{"class":1319},[39,50497,209],{"class":45},[39,50499,50500,50502,50504],{"class":41,"line":34853},[39,50501,34729],{"class":45},[39,50503,34732],{"class":1319},[39,50505,209],{"class":45},[39,50507,50508],{"class":41,"line":34866},[39,50509,34740],{"class":102},[39,50511,50512,50514,50516,50518,50520,50522,50524],{"class":41,"line":34872},[39,50513,32782],{"class":45},[39,50515,57],{"class":56},[39,50517,60],{"class":45},[39,50519,63],{"class":56},[39,50521,60],{"class":45},[39,50523,63],{"class":56},[39,50525,209],{"class":45},[39,50527,50528,50530,50532,50534,50536,50538,50540,50542,50544],{"class":41,"line":34883},[39,50529,34649],{"class":45},[39,50531,34652],{"class":1319},[39,50533,34767],{"class":45},[39,50535,34658],{"class":1319},[39,50537,60],{"class":45},[39,50539,34663],{"class":254},[39,50541,50],{"class":49},[39,50543,34778],{"class":1319},[39,50545,209],{"class":45},[39,50547,50548,50550,50552,50554,50556,50558,50560,50562,50564],{"class":41,"line":34894},[39,50549,34649],{"class":45},[39,50551,34652],{"class":1319},[39,50553,34790],{"class":45},[39,50555,34683],{"class":1319},[39,50557,60],{"class":45},[39,50559,34663],{"class":254},[39,50561,50],{"class":49},[39,50563,34801],{"class":1319},[39,50565,209],{"class":45},[39,50567,50568],{"class":41,"line":34913},[39,50569,34809],{"class":102},[39,50571,50573],{"class":41,"line":50572},219,[39,50574,34706],{"class":45},[39,50576,50578,50580,50582],{"class":41,"line":50577},220,[39,50579,34718],{"class":45},[39,50581,34652],{"class":1319},[39,50583,209],{"class":45},[39,50585,50587,50589,50591],{"class":41,"line":50586},221,[39,50588,34729],{"class":45},[39,50590,34831],{"class":1319},[39,50592,209],{"class":45},[39,50594,50596],{"class":41,"line":50595},222,[39,50597,34839],{"class":45},[39,50599,50601],{"class":41,"line":50600},223,[39,50602,3458],{"emptyLinePlaceholder":1145},[39,50604,50606],{"class":41,"line":50605},224,[39,50607,34850],{"class":102},[39,50609,50611,50613,50615,50617,50619],{"class":41,"line":50610},225,[39,50612,2596],{"class":49},[39,50614,32275],{"class":56},[39,50616,4007],{"class":49},[39,50618,32280],{"class":1319},[39,50620,4797],{"class":45},[39,50622,50624],{"class":41,"line":50623},226,[39,50625,34869],{"class":102},[39,50627,50629,50631,50633],{"class":41,"line":50628},227,[39,50630,45601],{"class":45},[39,50632,50],{"class":49},[39,50634,45606],{"class":45},[39,50636,50638,50640,50642],{"class":41,"line":50637},228,[39,50639,34886],{"class":45},[39,50641,50],{"class":49},[39,50643,34891],{"class":45},[39,50645,50647,50649,50651,50653,50655,50657,50659],{"class":41,"line":50646},229,[39,50648,34448],{"class":45},[39,50650,50],{"class":49},[39,50652,45623],{"class":45},[39,50654,34904],{"class":254},[39,50656,50],{"class":49},[39,50658,2105],{"class":56},[39,50660,209],{"class":45},[39,50662,50664],{"class":41,"line":50663},230,[39,50665,34916],{"class":45},[23054,50667,50669],{"id":50668},"_242测试代码","2.4.2.测试代码",[19,50671,50672],{},"使用测试集进行测试与推理",[29,50674,50676],{"className":31,"code":50675,"language":33,"meta":34,"style":34},"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",[36,50677,50678,50684,50694,50704,50715,50725,50729,50733,50741,50746,50750,50767,50771,50775,50779,50783,50787,50819,50823,50831,50835,50847,50851,50855,50859,50863,50867,50871,50875,50879,50897,50911,50915,50925,50935,50945,50951,50955,50959,50967,50971,50987,50995,50999,51003,51011,51019,51023,51027,51031,51035,51041,51045,51055,51063,51071,51075,51079,51083,51091,51095,51111,51115,51119,51123,51135,51139,51151,51155,51159,51171,51175,51185,51189,51193,51205,51209,51217,51221,51225,51233,51237,51245,51249,51253,51257,51261,51265,51281,51289,51293,51297,51315,51321,51325,51335,51343,51351,51355,51359,51363,51367,51375,51379,51395,51399,51407,51415],{"__ignoreMap":34},[39,50679,50680,50682],{"class":41,"line":42},[39,50681,31447],{"class":49},[39,50683,31450],{"class":45},[39,50685,50686,50688,50690,50692],{"class":41,"line":74},[39,50687,31447],{"class":49},[39,50689,32470],{"class":45},[39,50691,32438],{"class":49},[39,50693,32475],{"class":45},[39,50695,50696,50698,50700,50702],{"class":41,"line":99},[39,50697,31792],{"class":49},[39,50699,32453],{"class":45},[39,50701,31447],{"class":49},[39,50703,32458],{"class":45},[39,50705,50706,50708,50710,50712],{"class":41,"line":106},[39,50707,31792],{"class":49},[39,50709,32423],{"class":45},[39,50711,31447],{"class":49},[39,50713,50714],{"class":45}," ImageFolder\n",[39,50716,50717,50719,50721,50723],{"class":41,"line":112},[39,50718,31792],{"class":49},[39,50720,32969],{"class":45},[39,50722,31447],{"class":49},[39,50724,45695],{"class":45},[39,50726,50727],{"class":41,"line":118},[39,50728,3458],{"emptyLinePlaceholder":1145},[39,50730,50731],{"class":41,"line":413},[39,50732,35006],{"class":102},[39,50734,50735,50737,50739],{"class":41,"line":419},[39,50736,33002],{"class":49},[39,50738,35013],{"class":3021},[39,50740,33008],{"class":45},[39,50742,50743],{"class":41,"line":425},[39,50744,50745],{"class":102},"   # 导入自己的数据集，并进行数据处理\n",[39,50747,50748],{"class":41,"line":443},[39,50749,49015],{"class":102},[39,50751,50752,50754,50756,50758,50760,50762,50765],{"class":41,"line":449},[39,50753,49020],{"class":56},[39,50755,50],{"class":49},[39,50757,1869],{"class":49},[39,50759,1462],{"class":1319},[39,50761,1758],{"class":56},[39,50763,50764],{"class":49031},"\u002Fdata\u002Ftest",[39,50766,26190],{"class":1319},[39,50768,50769],{"class":41,"line":455},[39,50770,3458],{"emptyLinePlaceholder":1145},[39,50772,50773],{"class":41,"line":461},[39,50774,49043],{"class":102},[39,50776,50777],{"class":41,"line":475},[39,50778,49048],{"class":102},[39,50780,50781],{"class":41,"line":665},[39,50782,49053],{"class":102},[39,50784,50785],{"class":41,"line":671},[39,50786,49058],{"class":102},[39,50788,50789,50791,50793,50795,50797,50799,50801,50803,50805,50807,50809,50811,50813,50815,50817],{"class":41,"line":684},[39,50790,49063],{"class":45},[39,50792,50],{"class":49},[39,50794,49068],{"class":45},[39,50796,49071],{"class":56},[39,50798,60],{"class":45},[39,50800,49076],{"class":56},[39,50802,60],{"class":45},[39,50804,49081],{"class":56},[39,50806,49084],{"class":45},[39,50808,49087],{"class":56},[39,50810,60],{"class":45},[39,50812,49092],{"class":56},[39,50814,60],{"class":45},[39,50816,49097],{"class":56},[39,50818,71],{"class":45},[39,50820,50821],{"class":41,"line":2732},[39,50822,49104],{"class":102},[39,50824,50825,50827,50829],{"class":41,"line":2737},[39,50826,49109],{"class":45},[39,50828,50],{"class":49},[39,50830,49114],{"class":45},[39,50832,50833],{"class":41,"line":2751},[39,50834,49119],{"class":102},[39,50836,50837,50839,50841,50843,50845],{"class":41,"line":2756},[39,50838,49124],{"class":45},[39,50840,32556],{"class":56},[39,50842,60],{"class":45},[39,50844,32556],{"class":56},[39,50846,43677],{"class":45},[39,50848,50849],{"class":41,"line":2785},[39,50850,49137],{"class":102},[39,50852,50853],{"class":41,"line":2790},[39,50854,49142],{"class":45},[39,50856,50857],{"class":41,"line":2807},[39,50858,49147],{"class":45},[39,50860,50861],{"class":41,"line":2812},[39,50862,49152],{"class":102},[39,50864,50865],{"class":41,"line":2817},[39,50866,49157],{"class":102},[39,50868,50869],{"class":41,"line":2822},[39,50870,3458],{"emptyLinePlaceholder":1145},[39,50872,50873],{"class":41,"line":2836},[39,50874,49166],{"class":102},[39,50876,50877],{"class":41,"line":2841},[39,50878,49171],{"class":102},[39,50880,50881,50883,50885,50887,50889,50891,50893,50895],{"class":41,"line":3635},[39,50882,35020],{"class":45},[39,50884,50],{"class":49},[39,50886,49180],{"class":45},[39,50888,49183],{"class":56},[39,50890,60],{"class":45},[39,50892,49188],{"class":254},[39,50894,50],{"class":49},[39,50896,49193],{"class":45},[39,50898,50899,50901,50903,50905,50907,50909],{"class":41,"line":3649},[39,50900,35077],{"class":45},[39,50902,50],{"class":49},[39,50904,32589],{"class":45},[39,50906,32592],{"class":254},[39,50908,50],{"class":49},[39,50910,35088],{"class":45},[39,50912,50913],{"class":41,"line":3657},[39,50914,35093],{"class":102},[39,50916,50917,50919,50921,50923],{"class":41,"line":3662},[39,50918,35098],{"class":254},[39,50920,50],{"class":49},[39,50922,57],{"class":56},[39,50924,32521],{"class":45},[39,50926,50927,50929,50931,50933],{"class":41,"line":3668},[39,50928,35109],{"class":254},[39,50930,50],{"class":49},[39,50932,32531],{"class":56},[39,50934,32521],{"class":45},[39,50936,50937,50939,50941,50943],{"class":41,"line":3674},[39,50938,35120],{"class":254},[39,50940,50],{"class":49},[39,50942,260],{"class":56},[39,50944,209],{"class":45},[39,50946,50947,50949],{"class":41,"line":3679},[39,50948,5148],{"class":49},[39,50950,35133],{"class":45},[39,50952,50953],{"class":41,"line":9004},[39,50954,3458],{"emptyLinePlaceholder":1145},[39,50956,50957],{"class":41,"line":9028},[39,50958,35142],{"class":102},[39,50960,50961,50963,50965],{"class":41,"line":9033},[39,50962,33002],{"class":49},[39,50964,35149],{"class":3021},[39,50966,35152],{"class":45},[39,50968,50969],{"class":41,"line":9039},[39,50970,35157],{"class":102},[39,50972,50973,50975,50977,50979,50981,50983,50985],{"class":41,"line":9066},[39,50974,32292],{"class":45},[39,50976,50],{"class":49},[39,50978,32299],{"class":1319},[39,50980,2762],{"class":49},[39,50982,32304],{"class":45},[39,50984,2759],{"class":49},[39,50986,35174],{"class":1319},[39,50988,50989,50991,50993],{"class":41,"line":9071},[39,50990,32344],{"class":45},[39,50992,50],{"class":49},[39,50994,33344],{"class":45},[39,50996,50997],{"class":41,"line":9077},[39,50998,3458],{"emptyLinePlaceholder":1145},[39,51000,51001],{"class":41,"line":9089},[39,51002,35191],{"class":102},[39,51004,51005,51007,51009],{"class":41,"line":9101},[39,51006,35196],{"class":45},[39,51008,50],{"class":49},[39,51010,33397],{"class":56},[39,51012,51013,51015,51017],{"class":41,"line":9113},[39,51014,35205],{"class":45},[39,51016,50],{"class":49},[39,51018,4143],{"class":56},[39,51020,51021],{"class":41,"line":10772},[39,51022,3458],{"emptyLinePlaceholder":1145},[39,51024,51025],{"class":41,"line":10797},[39,51026,35218],{"class":102},[39,51028,51029],{"class":41,"line":10820},[39,51030,35223],{"class":102},[39,51032,51033],{"class":41,"line":10844},[39,51034,35228],{"class":102},[39,51036,51037,51039],{"class":41,"line":10849},[39,51038,35233],{"class":49},[39,51040,33939],{"class":45},[39,51042,51043],{"class":41,"line":10854},[39,51044,35240],{"class":102},[39,51046,51047,51049,51051,51053],{"class":41,"line":10859},[39,51048,4461],{"class":49},[39,51050,35247],{"class":45},[39,51052,27100],{"class":49},[39,51054,35252],{"class":45},[39,51056,51057,51059,51061],{"class":41,"line":10868},[39,51058,35257],{"class":45},[39,51060,50],{"class":49},[39,51062,35262],{"class":45},[39,51064,51065,51067,51069],{"class":41,"line":10873},[39,51066,35267],{"class":45},[39,51068,50],{"class":49},[39,51070,35272],{"class":45},[39,51072,51073],{"class":41,"line":10879},[39,51074,35277],{"class":102},[39,51076,51077],{"class":41,"line":10900},[39,51078,33930],{"class":45},[39,51080,51081],{"class":41,"line":10906},[39,51082,35286],{"class":102},[39,51084,51085,51087,51089],{"class":41,"line":10920},[39,51086,33715],{"class":45},[39,51088,50],{"class":49},[39,51090,35295],{"class":45},[39,51092,51093],{"class":41,"line":10926},[39,51094,35300],{"class":102},[39,51096,51097,51099,51101,51103,51105,51107,51109],{"class":41,"line":10953},[39,51098,33732],{"class":45},[39,51100,50],{"class":49},[39,51102,33737],{"class":45},[39,51104,33740],{"class":254},[39,51106,50],{"class":49},[39,51108,57],{"class":56},[39,51110,209],{"class":45},[39,51112,51113],{"class":41,"line":10962},[39,51114,35321],{"class":102},[39,51116,51117],{"class":41,"line":10968},[39,51118,35326],{"class":102},[39,51120,51121],{"class":41,"line":10976},[39,51122,35331],{"class":102},[39,51124,51125,51127,51129,51131,51133],{"class":41,"line":10981},[39,51126,35336],{"class":45},[39,51128,10533],{"class":49},[39,51130,33842],{"class":45},[39,51132,4007],{"class":49},[39,51134,35345],{"class":45},[39,51136,51137],{"class":41,"line":17660},[39,51138,35350],{"class":102},[39,51140,51141,51143,51145,51147,51149],{"class":41,"line":17666},[39,51142,35355],{"class":45},[39,51144,10533],{"class":49},[39,51146,35360],{"class":45},[39,51148,260],{"class":56},[39,51150,209],{"class":45},[39,51152,51153],{"class":41,"line":17689},[39,51154,3458],{"emptyLinePlaceholder":1145},[39,51156,51157],{"class":41,"line":17695},[39,51158,35373],{"class":102},[39,51160,51161,51163,51165,51167,51169],{"class":41,"line":17718},[39,51162,35378],{"class":45},[39,51164,50],{"class":49},[39,51166,35383],{"class":45},[39,51168,1784],{"class":49},[39,51170,35388],{"class":45},[39,51172,51173],{"class":41,"line":17732},[39,51174,35393],{"class":102},[39,51176,51177,51179,51181,51183],{"class":41,"line":17752},[39,51178,33506],{"class":56},[39,51180,1221],{"class":45},[39,51182,35402],{"class":1319},[39,51184,35405],{"class":45},[39,51186,51187],{"class":41,"line":17758},[39,51188,3458],{"emptyLinePlaceholder":1145},[39,51190,51191],{"class":41,"line":17769},[39,51192,35414],{"class":102},[39,51194,51195,51197,51199,51201,51203],{"class":41,"line":17792},[39,51196,2596],{"class":49},[39,51198,32275],{"class":56},[39,51200,4007],{"class":49},[39,51202,32280],{"class":1319},[39,51204,4797],{"class":45},[39,51206,51207],{"class":41,"line":17814},[39,51208,35431],{"class":102},[39,51210,51211,51213,51215],{"class":41,"line":17819},[39,51212,32344],{"class":45},[39,51214,50],{"class":49},[39,51216,45606],{"class":45},[39,51218,51219],{"class":41,"line":17825},[39,51220,35444],{"class":102},[39,51222,51223],{"class":41,"line":17839},[39,51224,35449],{"class":102},[39,51226,51227,51229,51231],{"class":41,"line":17852},[39,51228,35454],{"class":45},[39,51230,35457],{"class":1319},[39,51232,31552],{"class":45},[39,51234,51235],{"class":41,"line":17857},[39,51236,35464],{"class":102},[39,51238,51239,51241,51243],{"class":41,"line":17871},[39,51240,35077],{"class":45},[39,51242,50],{"class":49},[39,51244,35473],{"class":45},[39,51246,51247],{"class":41,"line":17876},[39,51248,35478],{"class":102},[39,51250,51251],{"class":41,"line":17882},[39,51252,35483],{"class":45},[39,51254,51255],{"class":41,"line":17887},[39,51256,3458],{"emptyLinePlaceholder":1145},[39,51258,51259],{"class":41,"line":17901},[39,51260,35492],{"class":102},[39,51262,51263],{"class":41,"line":17906},[39,51264,35497],{"class":102},[39,51266,51267,51269,51271,51273,51275,51277,51279],{"class":41,"line":17911},[39,51268,32292],{"class":45},[39,51270,50],{"class":49},[39,51272,32299],{"class":1319},[39,51274,2762],{"class":49},[39,51276,32304],{"class":45},[39,51278,2759],{"class":49},[39,51280,35174],{"class":1319},[39,51282,51283,51285,51287],{"class":41,"line":17925},[39,51284,32344],{"class":45},[39,51286,50],{"class":49},[39,51288,33344],{"class":45},[39,51290,51291],{"class":41,"line":17937},[39,51292,35526],{"class":102},[39,51294,51295],{"class":41,"line":17942},[39,51296,35531],{"class":102},[39,51298,51299,51301,51303,51305,51308,51310,51313],{"class":41,"line":17955},[39,51300,35536],{"class":45},[39,51302,50],{"class":49},[39,51304,2088],{"class":45},[39,51306,51307],{"class":1319},"'猫'",[39,51309,60],{"class":45},[39,51311,51312],{"class":1319},"'狗'",[39,51314,34301],{"class":45},[39,51316,51317,51319],{"class":41,"line":17960},[39,51318,35233],{"class":49},[39,51320,33939],{"class":45},[39,51322,51323],{"class":41,"line":17965},[39,51324,35601],{"class":102},[39,51326,51327,51329,51331,51333],{"class":41,"line":17970},[39,51328,4461],{"class":49},[39,51330,35608],{"class":45},[39,51332,27100],{"class":49},[39,51334,35252],{"class":45},[39,51336,51337,51339,51341],{"class":41,"line":17983},[39,51338,33665],{"class":45},[39,51340,50],{"class":49},[39,51342,33670],{"class":45},[39,51344,51345,51347,51349],{"class":41,"line":17988},[39,51346,33680],{"class":45},[39,51348,50],{"class":49},[39,51350,33685],{"class":45},[39,51352,51353],{"class":41,"line":33688},[39,51354,3458],{"emptyLinePlaceholder":1145},[39,51356,51357],{"class":41,"line":33694},[39,51358,35637],{"class":102},[39,51360,51361],{"class":41,"line":33700},[39,51362,33930],{"class":45},[39,51364,51365],{"class":41,"line":33706},[39,51366,35646],{"class":102},[39,51368,51369,51371,51373],{"class":41,"line":33712},[39,51370,33715],{"class":45},[39,51372,50],{"class":49},[39,51374,33720],{"class":45},[39,51376,51377],{"class":41,"line":33723},[39,51378,35659],{"class":102},[39,51380,51381,51383,51385,51387,51389,51391,51393],{"class":41,"line":33729},[39,51382,33732],{"class":45},[39,51384,50],{"class":49},[39,51386,33737],{"class":45},[39,51388,33740],{"class":254},[39,51390,50],{"class":49},[39,51392,57],{"class":56},[39,51394,209],{"class":45},[39,51396,51397],{"class":41,"line":33749},[39,51398,35680],{"class":102},[39,51400,51401,51403,51405],{"class":41,"line":33755},[39,51402,35685],{"class":45},[39,51404,50],{"class":49},[39,51406,35690],{"class":45},[39,51408,51409,51411,51413],{"class":41,"line":33766},[39,51410,35695],{"class":45},[39,51412,50],{"class":49},[39,51414,35700],{"class":45},[39,51416,51417,51419,51421,51423,51425,51427,51429,51431],{"class":41,"line":33772},[39,51418,35705],{"class":56},[39,51420,1221],{"class":45},[39,51422,35710],{"class":1319},[39,51424,35713],{"class":45},[39,51426,35716],{"class":1319},[39,51428,60],{"class":45},[39,51430,35721],{"class":1319},[39,51432,35724],{"class":45},[1133,51434,51435],{},"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":34,"searchDepth":74,"depth":74,"links":51437},[51438,51439,51440,51441],{"id":31646,"depth":99,"text":31647},{"id":38894,"depth":99,"text":38895},{"id":42327,"depth":99,"text":42328},{"id":46336,"depth":99,"text":46337},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31638,"description":1142},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":51448,"title":51449,"body":51450,"description":1142,"extension":1143,"meta":51457,"navigation":1145,"path":51458,"seo":51459,"stem":51460,"__hash__":51461},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":51451,"toc":51455},[51452],[10,51453,51449],{"id":51454},"_3yolo模型学习",{"title":34,"searchDepth":74,"depth":74,"links":51456},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":51449,"description":1142},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":51463,"title":51464,"body":51465,"description":51472,"extension":1143,"meta":51473,"navigation":1145,"path":51475,"seo":51476,"stem":51477,"__hash__":51478},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":51466,"toc":51470},[51467],[19,51468,51469],{},"yolo模型还未补充",{"title":34,"searchDepth":74,"depth":74,"links":51471},[],"深度学习学习",{"category":51474},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":51464,"description":51472},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":51480,"title":51481,"body":51482,"description":1142,"extension":1143,"meta":51507,"navigation":1145,"path":51508,"seo":51509,"stem":51510,"__hash__":51511},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":51483,"toc":51505},[51484,51487,51490,51495,51502],[10,51485,51481],{"id":51486},"_1工具",[19,51488,51489],{},"提示错误插件：有问题会提前报错",[19,51491,51492],{},[269,51493],{"alt":34,"src":51494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,51496,51497],{},[46,51498,51501],{"href":51499,"rel":51500},"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",[24921],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,51503,51504],{},"alt键加上下箭头可以实现语句的移动",{"title":34,"searchDepth":74,"depth":74,"links":51506},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":51481,"description":1142},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":51513,"title":51514,"body":51515,"description":1142,"extension":1143,"meta":54379,"navigation":1145,"path":54380,"seo":54381,"stem":54382,"__hash__":54383},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":51516,"toc":54330},[51517,51520,51524,51528,51533,51536,51541,51545,51552,51557,51564,51569,51576,51581,51585,51590,51593,51597,51602,51606,51611,51614,51617,51620,51623,51626,51629,51632,51635,51640,51645,51650,51654,51657,51660,51664,51669,51672,51680,51685,51702,51710,51715,51720,51725,51730,51735,51738,51743,51748,51752,51761,51766,51771,51775,51780,51783,51787,51792,51800,51805,51810,51813,51818,51823,51828,51831,51834,51837,51842,51847,51850,51855,51858,51863,51866,51869,51872,51877,51880,51883,51898,51903,51908,51913,51916,51919,51922,51936,51939,51944,51949,51952,51955,51958,51961,51964,51967,51970,51974,51978,51983,51987,51990,51995,52000,52003,52008,52011,52015,52020,52023,52026,52029,52032,52035,52038,52041,52044,52047,52051,52056,52061,52066,52069,52072,52076,52081,52084,52088,52091,52094,52099,52102,52105,52109,52113,52116,52121,52126,52129,52158,52163,52168,52173,52178,52182,52187,52191,52196,52199,52203,52207,52212,52216,52221,52226,52230,52235,52238,52240,52243,52248,52252,52257,52261,52265,52270,52275,52280,52285,52289,52294,52299,52304,52307,52310,52315,52318,52323,52328,52333,52338,52342,53149,53153,53496,53501,53504,53507,53510,53513,53516,53519,53522,53525,53527,53530,53532,53535,53539,53544,53547,53550,53553,53557,53562,53567,53587,53590,53594,53599,53604,53621,53625,53654,53658,53680,53682,53721,53729,53735,53739,53742,53745,53750,53755,53758,53761,53764,53769,53774,53777,53780,53783,53786,53789,53792,53795,53798,53801,53804,53807,53809,53812,53815,53818,53821,53824,53827,53830,53833,53837,53842,53845,53850,53853,53856,53859,53862,53865,53868,53871,53873,53876,53879,53882,53885,53888,53891,53895,53898,53907,53910,53915,53918,53923,53926,53929,53932,53935,53938,53941,53944,53948,53952,53955,53958,53963,53968,53973,53977,53982,53987,53990,53993,53996,53999,54002,54007,54010,54015,54017,54022,54025,54029,54034,54037,54040,54045,54049,54052,54057,54060,54063,54092,54097,54100,54103,54106,54109,54112,54116,54119,54205,54209,54212,54217,54222,54229,54232,54235,54238,54241,54244,54249,54254,54257,54260,54263,54266,54269,54272,54275,54278,54281,54283,54286,54290,54295,54300,54305,54308,54313,54318,54321,54324,54327],[10,51518,51514],{"id":51519},"_2基础语法",[14,51521,51523],{"id":51522},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[1188,51525,51527],{"id":51526},"_211-js组成","2.1.1 js组成",[1171,51529,51530],{},[1174,51531,51532],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,51534,51535],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[1171,51537,51538],{"start":74},[1174,51539,51540],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[1188,51542,51544],{"id":51543},"_212-js书写位置","2.1.2 js书写位置",[1171,51546,51547],{},[1174,51548,51549],{},[304,51550,51551],{},"内部 JavaScript",[19,51553,51554],{},[269,51555],{"alt":34,"src":51556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[1171,51558,51559],{"start":74},[1174,51560,51561],{},[304,51562,51563],{},"外部 JavaScript",[19,51565,51566],{},[269,51567],{"alt":34,"src":51568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[1171,51570,51571],{"start":99},[1174,51572,51573],{},[304,51574,51575],{},"内联 JavaScript",[19,51577,51578],{},[269,51579],{"alt":34,"src":51580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[1188,51582,51584],{"id":51583},"_213-javascript注释","2.1.3 JavaScript注释",[19,51586,51587],{},[269,51588],{"alt":34,"src":51589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,51591,51592],{},"alt+shift+a一定要记住！",[1188,51594,51596],{"id":51595},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,51598,51599],{},[269,51600],{"alt":34,"src":51601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[1188,51603,51605],{"id":51604},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[1171,51607,51608],{},[1174,51609,51610],{},"输出语法：",[19,51612,51613],{},"①document.write('要出的内容')",[19,51615,51616],{},"向body内输出内容；",[19,51618,51619],{},"如果输出的内容写的是标签，也会被解析cheng",[19,51621,51622],{},"②alert('要出的内容')",[19,51624,51625],{},"页面弹出警告对话框",[19,51627,51628],{},"③console.log('控制台打印')",[19,51630,51631],{},"控制台输出语法，程序员调试使用",[19,51633,51634],{},"输入log就行，自动生成：",[19,51636,51637],{},[269,51638],{"alt":34,"src":51639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[1171,51641,51642],{"start":74},[1174,51643,51644],{},"输入语法：",[19,51646,51647],{},[269,51648],{"alt":34,"src":51649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[1188,51651,51653],{"id":51652},"_2116-字面量","21.1.6 字面量",[19,51655,51656],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,51658,51659],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,51661,51663],{"id":51662},"_22-变量","2.2 变量",[1171,51665,51666],{},[1174,51667,51668],{},"变量声明",[19,51670,51671],{},"let 变量名",[2205,51673,51674,51677],{},[1174,51675,51676],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[1174,51678,51679],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[1171,51681,51682],{"start":74},[1174,51683,51684],{},"变量赋值",[29,51686,51690],{"className":51687,"code":51688,"language":51689,"meta":34,"style":34},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[36,51691,51692,51697],{"__ignoreMap":34},[39,51693,51694],{"class":41,"line":42},[39,51695,51696],{"class":45},"let age\n",[39,51698,51699],{"class":41,"line":74},[39,51700,51701],{"class":45},"age=18\n",[1171,51703,51704,51707],{"start":99},[1174,51705,51706],{},"连这些（变量的初始化）：let age=18",[1174,51708,51709],{},"更新变量",[19,51711,51712],{},[269,51713],{"alt":34,"src":51714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[1171,51716,51717],{"start":112},[1174,51718,51719],{},"声明多个变量",[19,51721,51722],{},[269,51723],{"alt":34,"src":51724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[1171,51726,51727],{"start":118},[1174,51728,51729],{},"变量命名规则与规范",[19,51731,51732],{},[269,51733],{"alt":34,"src":51734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,51736,51737],{},"遵守小驼峰！",[1171,51739,51740],{"start":413},[1174,51741,51742],{},"变量拓展-let和var的区别",[19,51744,51745],{},[269,51746],{"alt":34,"src":51747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,51749,51751],{"id":51750},"_23-数组","2.3 数组",[29,51753,51755],{"className":51687,"code":51754,"language":51689,"meta":34,"style":34},"let arr = []\n",[36,51756,51757],{"__ignoreMap":34},[39,51758,51759],{"class":41,"line":42},[39,51760,51754],{"class":45},[19,51762,51763],{},[269,51764],{"alt":34,"src":51765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,51767,51768],{},[269,51769],{"alt":34,"src":51770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,51772,51774],{"id":51773},"_24-常量","2.4 常量",[19,51776,51777],{},[269,51778],{"alt":34,"src":51779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,51781,51782],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51784,51786],{"id":51785},"_25-数据类型","2.5 数据类型",[19,51788,51789],{},[269,51790],{"alt":34,"src":51791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[1171,51793,51794,51797],{},[1174,51795,51796],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[1174,51798,51799],{},"算数运算符：",[19,51801,51802],{},[269,51803],{"alt":34,"src":51804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[1171,51806,51807],{"start":99},[1174,51808,51809],{},"数字类型（Number）",[19,51811,51812],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,51814,51815],{},[269,51816],{"alt":34,"src":51817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[1171,51819,51820],{"start":106},[1174,51821,51822],{},"字符串类型（string）",[19,51824,51825],{},[269,51826],{"alt":34,"src":51827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,51829,51830],{},"反引号也是可以使用的",[19,51832,51833],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,51835,51836],{},"例如：document.write(\"我今年\"+age+\"岁\")",[1171,51838,51839],{"start":112},[1174,51840,51841],{},"模板字符串",[19,51843,51844],{},[269,51845],{"alt":34,"src":51846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,51848,51849],{},"类似于python的字符串格式化",[1171,51851,51852],{"start":118},[1174,51853,51854],{},"布尔类型",[19,51856,51857],{},"true 和 false",[1171,51859,51860],{"start":413},[1174,51861,51862],{},"未定义类型（underfined）",[19,51864,51865],{},"表示没有赋值",[19,51867,51868],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,51870,51871],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[1171,51873,51874],{"start":419},[1174,51875,51876],{},"null（空类型）",[19,51878,51879],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,51881,51882],{},"赋值了，但是内容为空",[29,51884,51886],{"className":51687,"code":51885,"language":51689,"meta":34,"style":34},"typeof null\n输出的是'object'，是一个对象数据类型\n",[36,51887,51888,51893],{"__ignoreMap":34},[39,51889,51890],{"class":41,"line":42},[39,51891,51892],{"class":45},"typeof null\n",[39,51894,51895],{"class":41,"line":74},[39,51896,51897],{"class":45},"输出的是'object'，是一个对象数据类型\n",[1171,51899,51900],{"start":425},[1174,51901,51902],{},"控制台检测数据类型",[19,51904,51905],{},[269,51906],{"alt":34,"src":51907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[1171,51909,51910],{"start":443},[1174,51911,51912],{},"类型转换",[19,51914,51915],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51917,51918],{},"转换方式：隐式转换和显示转换",[19,51920,51921],{},"①隐式转换",[2205,51923,51924,51927,51930,51933],{},[1174,51925,51926],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[1174,51928,51929],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[1174,51931,51932],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[1174,51934,51935],{},"任何数据和字符串相加结果都是字符串",[19,51937,51938],{},"②显示转换",[19,51940,51941],{},[269,51942],{"alt":34,"src":51943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51945,51946],{},[269,51947],{"alt":34,"src":51948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51950,51951],{},"在输入的时候要用好隐式转换，简单写起来",[19,51953,51954],{},"let num = +prompt(’请输入数字：‘)",[19,51956,51957],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51959,51960],{},"console.log(parseInt('12.333px'))",[19,51962,51963],{},"输出为：12",[19,51965,51966],{},"console.log(parseInt('a'a'a12.333px'))",[19,51968,51969],{},"输出：NaN",[14,51971,51973],{"id":51972},"_26-运算符","2.6 运算符",[1188,51975,51977],{"id":51976},"_261-赋值运算符","2.6.1 赋值运算符",[19,51979,51980],{},[269,51981],{"alt":34,"src":51982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[1188,51984,51986],{"id":51985},"_262-一元运算符","2.6.2 一元运算符",[19,51988,51989],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51991,51992],{},[269,51993],{"alt":34,"src":51994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51996,51997],{},[269,51998],{"alt":34,"src":51999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52001,52002],{},"两者的区别：",[19,52004,52005],{},[269,52006],{"alt":34,"src":52007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52009,52010],{},"前置先自加；后置后加，代码执行完之后再加",[1188,52012,52014],{"id":52013},"_263-比较运算符","2.6.3 比较运算符",[19,52016,52017],{},[269,52018],{"alt":34,"src":52019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52021,52022],{},"比较运算符也有隐式转换",[19,52024,52025],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52027,52028],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52030,52031],{},"要使用三等，开发的时候",[19,52033,52034],{},"NaN不等于任何人，包括它自己",[19,52036,52037],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52039,52040],{},"7\u002F10=0.7",[19,52042,52043],{},"最后：0.5+0.2=0.7",[19,52045,52046],{},"字符串比较，比较的是字符对应的ASCII码",[1188,52048,52050],{"id":52049},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52052,52053],{},[269,52054],{"alt":34,"src":52055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,52057,52058],{},[269,52059],{"alt":34,"src":52060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,52062,52063],{},[269,52064],{"alt":34,"src":52065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,52067,52068],{},"上述题目选D",[19,52070,52071],{},"与真2假1；或真1假2",[1188,52073,52075],{"id":52074},"_265-运算符优先级","2.6.5 运算符优先级",[19,52077,52078],{},[269,52079],{"alt":34,"src":52080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,52082,52083],{},"先算逻辑与，后算逻辑或",[14,52085,52087],{"id":52086},"_27-语句","2.7 语句",[19,52089,52090],{},"表达式：是可以被求值的代码，会有结果给我们",[19,52092,52093],{},"语句：语句是可以被执行的代码，例如prompt()",[19,52095,52096],{},[269,52097],{"alt":34,"src":52098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,52100,52101],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,52103,52104],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[1188,52106,52108],{"id":52107},"_271-分支语句","2.7.1 分支语句",[23054,52110,52112],{"id":52111},"_2711-if分支语句","2.7.1.1 if分支语句",[19,52114,52115],{},"if语句单行简单的话，可以不写{}，写在一行就行",[1171,52117,52118],{},[1174,52119,52120],{},"单分支语句",[19,52122,52123],{},[269,52124],{"alt":34,"src":52125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,52127,52128],{},"除了0，所有数字都为真",[29,52130,52132],{"className":51687,"code":52131,"language":51689,"meta":34,"style":34},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[36,52133,52134,52139,52144,52149,52153],{"__ignoreMap":34},[39,52135,52136],{"class":41,"line":42},[39,52137,52138],{"class":45},"if（0) {\n",[39,52140,52141],{"class":41,"line":74},[39,52142,52143],{"class":45},"    let a=1\n",[39,52145,52146],{"class":41,"line":99},[39,52147,52148],{"class":45},"    alert(typeof a)\n",[39,52150,52151],{"class":41,"line":106},[39,52152,2630],{"class":45},[39,52154,52155],{"class":41,"line":112},[39,52156,52157],{"class":45},"不输出，括号为假\n",[1171,52159,52160],{"start":74},[1174,52161,52162],{},"双分支语句",[19,52164,52165],{},[269,52166],{"alt":34,"src":52167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[1171,52169,52170],{"start":99},[1174,52171,52172],{},"多分支语句",[19,52174,52175],{},[269,52176],{"alt":34,"src":52177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23054,52179,52181],{"id":52180},"_2712-三元运算符","2.7.1.2 三元运算符",[19,52183,52184],{},[269,52185],{"alt":34,"src":52186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23054,52188,52190],{"id":52189},"_2713-switch语句","2.7.1.3 switch语句",[19,52192,52193],{},[269,52194],{"alt":34,"src":52195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,52197,52198],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[1188,52200,52202],{"id":52201},"_272-循环语句","2.7.2 循环语句",[23054,52204,52206],{"id":52205},"_2721-断点演示","2.7.2.1 断点演示",[19,52208,52209],{},[269,52210],{"alt":34,"src":52211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23054,52213,52215],{"id":52214},"_2722-while循环","2.7.2.2 while循环",[19,52217,52218],{},[269,52219],{"alt":34,"src":52220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,52222,52223],{},[269,52224],{"alt":34,"src":52225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23054,52227,52229],{"id":52228},"_2723-for循环","2.7.2.3 for循环",[19,52231,52232],{},[269,52233],{"alt":34,"src":52234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,52236,52237],{},"for(;;) {",[19,52239,2144],{},[19,52241,52242],{},"表示无限循环",[19,52244,52245],{},[269,52246],{"alt":34,"src":52247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23054,52249,52251],{"id":52250},"_2724-循环的退出","2.7.2.4 循环的退出",[19,52253,52254],{},[269,52255],{"alt":34,"src":52256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52258,52260],{"id":52259},"_28-数组","2.8 数组",[1188,52262,52264],{"id":52263},"_281-基础认识","2.8.1 基础认识",[19,52266,52267],{},[269,52268],{"alt":34,"src":52269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,52271,52272],{},[269,52273],{"alt":34,"src":52274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,52276,52277],{},[269,52278],{"alt":34,"src":52279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,52281,52282],{},[269,52283],{"alt":34,"src":52284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[1188,52286,52288],{"id":52287},"_282-操作数组","2.8.2 操作数组",[19,52290,52291],{},[269,52292],{"alt":34,"src":52293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[1171,52295,52296],{},[1174,52297,52298],{},"添加元素",[19,52300,52301],{},[269,52302],{"alt":34,"src":52303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,52305,52306],{},"console.log(arr.push('green'))",[19,52308,52309],{},"输出结果：为新数组的长度",[19,52311,52312],{},[269,52313],{"alt":34,"src":52314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,52316,52317],{},"push用的非常多，一定要记住",[1171,52319,52320],{},[1174,52321,52322],{},"删除元素",[19,52324,52325],{},[269,52326],{"alt":34,"src":52327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,52329,52330],{},[269,52331],{"alt":34,"src":52332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,52334,52335],{},[269,52336],{"alt":34,"src":52337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[1188,52339,52341],{"id":52340},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[29,52343,52345],{"className":51687,"code":52344,"language":51689,"meta":34,"style":34},"\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",[36,52346,52347,52362,52378,52382,52391,52409,52433,52455,52469,52477,52484,52496,52507,52511,52515,52522,52534,52549,52562,52581,52598,52613,52625,52637,52649,52653,52657,52668,52678,52690,52702,52714,52725,52729,52733,52745,52749,52763,52767,52771,52782,52796,52808,52822,52826,52835,52844,52848,52857,52861,52870,52875,52880,52893,52921,52926,52931,52956,52961,52965,52970,52975,52990,52994,52999,53029,53041,53057,53073,53087,53092,53099,53103,53108,53121,53129,53137,53141],{"__ignoreMap":34},[39,52348,52349,52352,52356,52359],{"class":41,"line":42},[39,52350,52351],{"class":45},"\u003C!",[39,52353,52355],{"class":52354},"s9eBZ","DOCTYPE",[39,52357,52358],{"class":3021}," html",[39,52360,52361],{"class":45},">\n",[39,52363,52364,52366,52368,52371,52373,52376],{"class":41,"line":74},[39,52365,2108],{"class":45},[39,52367,51689],{"class":52354},[39,52369,52370],{"class":3021}," lang",[39,52372,50],{"class":45},[39,52374,52375],{"class":1319},"\"en\"",[39,52377,52361],{"class":45},[39,52379,52380],{"class":41,"line":99},[39,52381,3458],{"emptyLinePlaceholder":1145},[39,52383,52384,52386,52389],{"class":41,"line":106},[39,52385,2108],{"class":45},[39,52387,52388],{"class":52354},"head",[39,52390,52361],{"class":45},[39,52392,52393,52396,52399,52402,52404,52407],{"class":41,"line":112},[39,52394,52395],{"class":45},"    \u003C",[39,52397,52398],{"class":52354},"meta",[39,52400,52401],{"class":3021}," charset",[39,52403,50],{"class":45},[39,52405,52406],{"class":1319},"\"UTF-8\"",[39,52408,52361],{"class":45},[39,52410,52411,52413,52415,52418,52420,52423,52426,52428,52431],{"class":41,"line":118},[39,52412,52395],{"class":45},[39,52414,52398],{"class":52354},[39,52416,52417],{"class":3021}," http-equiv",[39,52419,50],{"class":45},[39,52421,52422],{"class":1319},"\"X-UA-Compatible\"",[39,52424,52425],{"class":3021}," content",[39,52427,50],{"class":45},[39,52429,52430],{"class":1319},"\"IE=edge\"",[39,52432,52361],{"class":45},[39,52434,52435,52437,52439,52441,52443,52446,52448,52450,52453],{"class":41,"line":413},[39,52436,52395],{"class":45},[39,52438,52398],{"class":52354},[39,52440,15976],{"class":3021},[39,52442,50],{"class":45},[39,52444,52445],{"class":1319},"\"viewport\"",[39,52447,52425],{"class":3021},[39,52449,50],{"class":45},[39,52451,52452],{"class":1319},"\"width=device-width, initial-scale=1.0\"",[39,52454,52361],{"class":45},[39,52456,52457,52459,52462,52465,52467],{"class":41,"line":419},[39,52458,52395],{"class":45},[39,52460,52461],{"class":52354},"title",[39,52463,52464],{"class":45},">Document\u003C\u002F",[39,52466,52461],{"class":52354},[39,52468,52361],{"class":45},[39,52470,52471,52473,52475],{"class":41,"line":425},[39,52472,52395],{"class":45},[39,52474,1133],{"class":52354},[39,52476,52361],{"class":45},[39,52478,52479,52482],{"class":41,"line":443},[39,52480,52481],{"class":52354},"        *",[39,52483,16628],{"class":45},[39,52485,52486,52489,52492,52494],{"class":41,"line":449},[39,52487,52488],{"class":56},"            margin",[39,52490,52491],{"class":45},": ",[39,52493,260],{"class":56},[39,52495,2359],{"class":45},[39,52497,52498,52501,52503,52505],{"class":41,"line":455},[39,52499,52500],{"class":56},"            padding",[39,52502,52491],{"class":45},[39,52504,260],{"class":56},[39,52506,2359],{"class":45},[39,52508,52509],{"class":41,"line":461},[39,52510,3587],{"class":45},[39,52512,52513],{"class":41,"line":475},[39,52514,3458],{"emptyLinePlaceholder":1145},[39,52516,52517,52520],{"class":41,"line":665},[39,52518,52519],{"class":3021},"        .box",[39,52521,16628],{"class":45},[39,52523,52524,52527,52529,52532],{"class":41,"line":671},[39,52525,52526],{"class":56},"            display",[39,52528,52491],{"class":45},[39,52530,52531],{"class":56},"flex",[39,52533,2359],{"class":45},[39,52535,52536,52539,52541,52544,52547],{"class":41,"line":684},[39,52537,52538],{"class":56},"            width",[39,52540,52491],{"class":45},[39,52542,52543],{"class":56},"700",[39,52545,52546],{"class":49},"px",[39,52548,2359],{"class":45},[39,52550,52551,52554,52556,52558,52560],{"class":41,"line":2732},[39,52552,52553],{"class":56},"            height",[39,52555,52491],{"class":45},[39,52557,5031],{"class":56},[39,52559,52546],{"class":49},[39,52561,2359],{"class":45},[39,52563,52564,52567,52569,52571,52573,52576,52579],{"class":41,"line":2737},[39,52565,52566],{"class":56},"            border-left",[39,52568,52491],{"class":45},[39,52570,57],{"class":56},[39,52572,52546],{"class":49},[39,52574,52575],{"class":56}," solid",[39,52577,52578],{"class":56}," pink",[39,52580,2359],{"class":45},[39,52582,52583,52586,52588,52590,52592,52594,52596],{"class":41,"line":2751},[39,52584,52585],{"class":56},"            border-bottom",[39,52587,52491],{"class":45},[39,52589,57],{"class":56},[39,52591,52546],{"class":49},[39,52593,52575],{"class":56},[39,52595,52578],{"class":56},[39,52597,2359],{"class":45},[39,52599,52600,52602,52604,52606,52608,52611],{"class":41,"line":2756},[39,52601,52488],{"class":56},[39,52603,52491],{"class":45},[39,52605,1855],{"class":56},[39,52607,52546],{"class":49},[39,52609,52610],{"class":56}," auto",[39,52612,2359],{"class":45},[39,52614,52615,52618,52620,52623],{"class":41,"line":2785},[39,52616,52617],{"class":56},"            justify-content",[39,52619,52491],{"class":45},[39,52621,52622],{"class":56},"space-around",[39,52624,2359],{"class":45},[39,52626,52627,52630,52632,52635],{"class":41,"line":2790},[39,52628,52629],{"class":56},"            align-items",[39,52631,52491],{"class":45},[39,52633,52634],{"class":56},"flex-end",[39,52636,2359],{"class":45},[39,52638,52639,52642,52644,52647],{"class":41,"line":2807},[39,52640,52641],{"class":56},"            text-align",[39,52643,52491],{"class":45},[39,52645,52646],{"class":56},"center",[39,52648,2359],{"class":45},[39,52650,52651],{"class":41,"line":2812},[39,52652,3587],{"class":45},[39,52654,52655],{"class":41,"line":2817},[39,52656,3458],{"emptyLinePlaceholder":1145},[39,52658,52659,52661,52663,52666],{"class":41,"line":2822},[39,52660,52519],{"class":3021},[39,52662,2158],{"class":49},[39,52664,52665],{"class":52354},"div",[39,52667,16628],{"class":45},[39,52669,52670,52672,52674,52676],{"class":41,"line":2836},[39,52671,52526],{"class":56},[39,52673,52491],{"class":45},[39,52675,52531],{"class":56},[39,52677,2359],{"class":45},[39,52679,52680,52682,52684,52686,52688],{"class":41,"line":2841},[39,52681,52538],{"class":56},[39,52683,52491],{"class":45},[39,52685,1855],{"class":56},[39,52687,52546],{"class":49},[39,52689,2359],{"class":45},[39,52691,52692,52695,52697,52700],{"class":41,"line":3635},[39,52693,52694],{"class":56},"            background-color",[39,52696,52491],{"class":45},[39,52698,52699],{"class":56},"pink",[39,52701,2359],{"class":45},[39,52703,52704,52707,52709,52712],{"class":41,"line":3649},[39,52705,52706],{"class":56},"            flex-direction",[39,52708,52491],{"class":45},[39,52710,52711],{"class":56},"column",[39,52713,2359],{"class":45},[39,52715,52716,52718,52720,52723],{"class":41,"line":3657},[39,52717,52617],{"class":56},[39,52719,52491],{"class":45},[39,52721,52722],{"class":56},"space-between",[39,52724,2359],{"class":45},[39,52726,52727],{"class":41,"line":3662},[39,52728,3587],{"class":45},[39,52730,52731],{"class":41,"line":3668},[39,52732,3458],{"emptyLinePlaceholder":1145},[39,52734,52735,52737,52740,52743],{"class":41,"line":3674},[39,52736,52519],{"class":3021},[39,52738,52739],{"class":52354}," div",[39,52741,52742],{"class":52354}," span",[39,52744,16628],{"class":45},[39,52746,52747],{"class":41,"line":3679},[39,52748,3458],{"emptyLinePlaceholder":1145},[39,52750,52751,52754,52756,52759,52761],{"class":41,"line":9004},[39,52752,52753],{"class":56},"            margin-top",[39,52755,52491],{"class":45},[39,52757,52758],{"class":56},"-20",[39,52760,52546],{"class":49},[39,52762,2359],{"class":45},[39,52764,52765],{"class":41,"line":9028},[39,52766,3587],{"class":45},[39,52768,52769],{"class":41,"line":9033},[39,52770,3458],{"emptyLinePlaceholder":1145},[39,52772,52773,52775,52777,52780],{"class":41,"line":9039},[39,52774,52519],{"class":3021},[39,52776,52739],{"class":52354},[39,52778,52779],{"class":52354}," h4",[39,52781,16628],{"class":45},[39,52783,52784,52787,52789,52792,52794],{"class":41,"line":9066},[39,52785,52786],{"class":56},"            margin-bottom",[39,52788,52491],{"class":45},[39,52790,52791],{"class":56},"-35",[39,52793,52546],{"class":49},[39,52795,2359],{"class":45},[39,52797,52798,52800,52802,52804,52806],{"class":41,"line":9071},[39,52799,52538],{"class":56},[39,52801,52491],{"class":45},[39,52803,1560],{"class":56},[39,52805,52546],{"class":49},[39,52807,2359],{"class":45},[39,52809,52810,52813,52815,52818,52820],{"class":41,"line":9077},[39,52811,52812],{"class":56},"            margin-left",[39,52814,52491],{"class":45},[39,52816,52817],{"class":56},"-10",[39,52819,52546],{"class":49},[39,52821,2359],{"class":45},[39,52823,52824],{"class":41,"line":9089},[39,52825,3587],{"class":45},[39,52827,52828,52831,52833],{"class":41,"line":9101},[39,52829,52830],{"class":45},"    \u003C\u002F",[39,52832,1133],{"class":52354},[39,52834,52361],{"class":45},[39,52836,52837,52840,52842],{"class":41,"line":9113},[39,52838,52839],{"class":45},"\u003C\u002F",[39,52841,52388],{"class":52354},[39,52843,52361],{"class":45},[39,52845,52846],{"class":41,"line":10772},[39,52847,3458],{"emptyLinePlaceholder":1145},[39,52849,52850,52852,52855],{"class":41,"line":10797},[39,52851,2108],{"class":45},[39,52853,52854],{"class":52354},"body",[39,52856,52361],{"class":45},[39,52858,52859],{"class":41,"line":10820},[39,52860,3458],{"emptyLinePlaceholder":1145},[39,52862,52863,52865,52868],{"class":41,"line":10844},[39,52864,52395],{"class":45},[39,52866,52867],{"class":52354},"script",[39,52869,52361],{"class":45},[39,52871,52872],{"class":41,"line":10849},[39,52873,52874],{"class":102},"        \u002F\u002F 1. 四次弹框效果\n",[39,52876,52877],{"class":41,"line":10854},[39,52878,52879],{"class":102},"        \u002F\u002F 声明一个新的数组\n",[39,52881,52882,52885,52888,52890],{"class":41,"line":10859},[39,52883,52884],{"class":49},"        let",[39,52886,52887],{"class":45}," arr ",[39,52889,50],{"class":49},[39,52891,52892],{"class":45}," []\n",[39,52894,52895,52897,52899,52902,52904,52906,52908,52910,52912,52915,52917,52919],{"class":41,"line":10868},[39,52896,4461],{"class":49},[39,52898,2716],{"class":45},[39,52900,52901],{"class":49},"let",[39,52903,10494],{"class":45},[39,52905,50],{"class":49},[39,52907,26175],{"class":56},[39,52909,10501],{"class":45},[39,52911,2653],{"class":49},[39,52913,52914],{"class":56}," 4",[39,52916,4272],{"class":45},[39,52918,3350],{"class":49},[39,52920,13498],{"class":45},[39,52922,52923],{"class":41,"line":10873},[39,52924,52925],{"class":102},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[39,52927,52928],{"class":41,"line":10879},[39,52929,52930],{"class":102},"            \u002F\u002F arr.push(num)\n",[39,52932,52933,52936,52939,52941,52944,52946,52949,52951,52954],{"class":41,"line":10900},[39,52934,52935],{"class":45},"            arr.",[39,52937,52938],{"class":3021},"push",[39,52940,1221],{"class":45},[39,52942,52943],{"class":3021},"prompt",[39,52945,1221],{"class":45},[39,52947,52948],{"class":1319},"`请输入第${",[39,52950,1644],{"class":45},[39,52952,52953],{"class":1319},"}季度的数据:`",[39,52955,31552],{"class":45},[39,52957,52958],{"class":41,"line":10906},[39,52959,52960],{"class":102},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[39,52962,52963],{"class":41,"line":10920},[39,52964,3587],{"class":45},[39,52966,52967],{"class":41,"line":10926},[39,52968,52969],{"class":102},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[39,52971,52972],{"class":41,"line":10953},[39,52973,52974],{"class":102},"        \u002F\u002F 盒子开头\n",[39,52976,52977,52980,52983,52985,52988],{"class":41,"line":10962},[39,52978,52979],{"class":45},"        document.",[39,52981,52982],{"class":3021},"write",[39,52984,1221],{"class":45},[39,52986,52987],{"class":1319},"` \u003Cdiv class=\"box\">`",[39,52989,209],{"class":45},[39,52991,52992],{"class":41,"line":10968},[39,52993,3458],{"emptyLinePlaceholder":1145},[39,52995,52996],{"class":41,"line":10976},[39,52997,52998],{"class":102},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[39,53000,53001,53003,53005,53007,53009,53011,53013,53015,53017,53020,53023,53025,53027],{"class":41,"line":10981},[39,53002,4461],{"class":49},[39,53004,2716],{"class":45},[39,53006,52901],{"class":49},[39,53008,10494],{"class":45},[39,53010,50],{"class":49},[39,53012,5151],{"class":56},[39,53014,10501],{"class":45},[39,53016,2108],{"class":49},[39,53018,53019],{"class":45}," arr.",[39,53021,53022],{"class":56},"length",[39,53024,4272],{"class":45},[39,53026,3350],{"class":49},[39,53028,13498],{"class":45},[39,53030,53031,53034,53036,53038],{"class":41,"line":17660},[39,53032,53033],{"class":45},"            document.",[39,53035,52982],{"class":3021},[39,53037,1221],{"class":45},[39,53039,53040],{"class":1319},"`\n",[39,53042,53043,53046,53048,53050,53052,53054],{"class":41,"line":17666},[39,53044,53045],{"class":1319},"              \u003Cdiv style=\"height: ${",[39,53047,4938],{"class":45},[39,53049,2088],{"class":1319},[39,53051,1644],{"class":45},[39,53053,2138],{"class":1319},[39,53055,53056],{"class":1319},"}px;\">\n",[39,53058,53059,53062,53064,53066,53068,53070],{"class":41,"line":17689},[39,53060,53061],{"class":1319},"                \u003Cspan>${",[39,53063,4938],{"class":45},[39,53065,2088],{"class":1319},[39,53067,1644],{"class":45},[39,53069,2138],{"class":1319},[39,53071,53072],{"class":1319},"}\u003C\u002Fspan>\n",[39,53074,53075,53078,53080,53082,53084],{"class":41,"line":17695},[39,53076,53077],{"class":1319},"                \u003Ch4>第${",[39,53079,1644],{"class":45},[39,53081,46621],{"class":49},[39,53083,26175],{"class":56},[39,53085,53086],{"class":1319},"}季度\u003C\u002Fh4>\n",[39,53088,53089],{"class":41,"line":17718},[39,53090,53091],{"class":1319},"              \u003C\u002Fdiv>          \n",[39,53093,53094,53097],{"class":41,"line":17732},[39,53095,53096],{"class":1319},"            `",[39,53098,209],{"class":45},[39,53100,53101],{"class":41,"line":17752},[39,53102,3587],{"class":45},[39,53104,53105],{"class":41,"line":17758},[39,53106,53107],{"class":102},"        \u002F\u002F 盒子结尾\n",[39,53109,53110,53112,53114,53116,53119],{"class":41,"line":17769},[39,53111,52979],{"class":45},[39,53113,52982],{"class":3021},[39,53115,1221],{"class":45},[39,53117,53118],{"class":1319},"` \u003C\u002Fdiv>`",[39,53120,209],{"class":45},[39,53122,53123,53125,53127],{"class":41,"line":17792},[39,53124,52830],{"class":45},[39,53126,52867],{"class":52354},[39,53128,52361],{"class":45},[39,53130,53131,53133,53135],{"class":41,"line":17814},[39,53132,52839],{"class":45},[39,53134,52854],{"class":52354},[39,53136,52361],{"class":45},[39,53138,53139],{"class":41,"line":17819},[39,53140,3458],{"emptyLinePlaceholder":1145},[39,53142,53143,53145,53147],{"class":41,"line":17825},[39,53144,52839],{"class":45},[39,53146,51689],{"class":52354},[39,53148,52361],{"class":45},[1188,53150,53152],{"id":53151},"_284-冒泡排序","2.8.4 冒泡排序",[29,53154,53156],{"className":51687,"code":53155,"language":51689,"meta":34,"style":34},"\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",[36,53157,53158,53168,53182,53186,53194,53209,53229,53241,53249,53253,53261,53269,53301,53334,53371,53376,53395,53400,53413,53428,53444,53448,53453,53457,53467,53476,53484,53488],{"__ignoreMap":34},[39,53159,53160,53162,53164,53166],{"class":41,"line":42},[39,53161,52351],{"class":45},[39,53163,52355],{"class":52354},[39,53165,52358],{"class":3021},[39,53167,52361],{"class":45},[39,53169,53170,53172,53174,53176,53178,53180],{"class":41,"line":74},[39,53171,2108],{"class":45},[39,53173,51689],{"class":52354},[39,53175,52370],{"class":3021},[39,53177,50],{"class":45},[39,53179,52375],{"class":1319},[39,53181,52361],{"class":45},[39,53183,53184],{"class":41,"line":99},[39,53185,3458],{"emptyLinePlaceholder":1145},[39,53187,53188,53190,53192],{"class":41,"line":106},[39,53189,2108],{"class":45},[39,53191,52388],{"class":52354},[39,53193,52361],{"class":45},[39,53195,53196,53199,53201,53203,53205,53207],{"class":41,"line":112},[39,53197,53198],{"class":45},"  \u003C",[39,53200,52398],{"class":52354},[39,53202,52401],{"class":3021},[39,53204,50],{"class":45},[39,53206,52406],{"class":1319},[39,53208,52361],{"class":45},[39,53210,53211,53213,53215,53217,53219,53221,53223,53225,53227],{"class":41,"line":118},[39,53212,53198],{"class":45},[39,53214,52398],{"class":52354},[39,53216,15976],{"class":3021},[39,53218,50],{"class":45},[39,53220,52445],{"class":1319},[39,53222,52425],{"class":3021},[39,53224,50],{"class":45},[39,53226,52452],{"class":1319},[39,53228,52361],{"class":45},[39,53230,53231,53233,53235,53237,53239],{"class":41,"line":413},[39,53232,53198],{"class":45},[39,53234,52461],{"class":52354},[39,53236,52464],{"class":45},[39,53238,52461],{"class":52354},[39,53240,52361],{"class":45},[39,53242,53243,53245,53247],{"class":41,"line":419},[39,53244,52839],{"class":45},[39,53246,52388],{"class":52354},[39,53248,52361],{"class":45},[39,53250,53251],{"class":41,"line":425},[39,53252,3458],{"emptyLinePlaceholder":1145},[39,53254,53255,53257,53259],{"class":41,"line":443},[39,53256,2108],{"class":45},[39,53258,52854],{"class":52354},[39,53260,52361],{"class":45},[39,53262,53263,53265,53267],{"class":41,"line":449},[39,53264,53198],{"class":45},[39,53266,52867],{"class":52354},[39,53268,52361],{"class":45},[39,53270,53271,53274,53276,53278,53281,53283,53285,53287,53289,53291,53293,53295,53297,53299],{"class":41,"line":455},[39,53272,53273],{"class":49},"    let",[39,53275,52887],{"class":45},[39,53277,50],{"class":49},[39,53279,53280],{"class":45}," [",[39,53282,89],{"class":56},[39,53284,13491],{"class":45},[39,53286,84],{"class":56},[39,53288,13491],{"class":45},[39,53290,68],{"class":56},[39,53292,13491],{"class":45},[39,53294,63],{"class":56},[39,53296,13491],{"class":45},[39,53298,57],{"class":56},[39,53300,34301],{"class":45},[39,53302,53303,53305,53307,53309,53311,53313,53315,53317,53319,53321,53323,53326,53328,53330,53332],{"class":41,"line":461},[39,53304,4259],{"class":49},[39,53306,2716],{"class":45},[39,53308,52901],{"class":49},[39,53310,10494],{"class":45},[39,53312,50],{"class":49},[39,53314,5151],{"class":56},[39,53316,10501],{"class":45},[39,53318,2108],{"class":49},[39,53320,53019],{"class":45},[39,53322,53022],{"class":56},[39,53324,53325],{"class":49}," -",[39,53327,26175],{"class":56},[39,53329,4272],{"class":45},[39,53331,3350],{"class":49},[39,53333,13498],{"class":45},[39,53335,53336,53339,53341,53343,53345,53347,53349,53351,53353,53355,53357,53359,53361,53363,53365,53367,53369],{"class":41,"line":475},[39,53337,53338],{"class":49},"      for",[39,53340,2716],{"class":45},[39,53342,52901],{"class":49},[39,53344,10556],{"class":45},[39,53346,50],{"class":49},[39,53348,5151],{"class":56},[39,53350,10563],{"class":45},[39,53352,2108],{"class":49},[39,53354,53019],{"class":45},[39,53356,53022],{"class":56},[39,53358,53325],{"class":49},[39,53360,10494],{"class":45},[39,53362,1732],{"class":49},[39,53364,26175],{"class":56},[39,53366,10570],{"class":45},[39,53368,3350],{"class":49},[39,53370,13498],{"class":45},[39,53372,53373],{"class":41,"line":665},[39,53374,53375],{"class":102},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[39,53377,53378,53380,53383,53385,53388,53390,53392],{"class":41,"line":671},[39,53379,3555],{"class":49},[39,53381,53382],{"class":45}," (arr[j] ",[39,53384,2158],{"class":49},[39,53386,53387],{"class":45}," arr[j ",[39,53389,1682],{"class":49},[39,53391,26175],{"class":56},[39,53393,53394],{"class":45},"]) {\n",[39,53396,53397],{"class":41,"line":684},[39,53398,53399],{"class":102},"          \u002F\u002F 交换两个变量\n",[39,53401,53402,53405,53408,53410],{"class":41,"line":2732},[39,53403,53404],{"class":49},"          let",[39,53406,53407],{"class":45}," tmp ",[39,53409,50],{"class":49},[39,53411,53412],{"class":45}," arr[j]\n",[39,53414,53415,53418,53420,53422,53424,53426],{"class":41,"line":2737},[39,53416,53417],{"class":45},"          arr[j] ",[39,53419,50],{"class":49},[39,53421,53387],{"class":45},[39,53423,1682],{"class":49},[39,53425,26175],{"class":56},[39,53427,34301],{"class":45},[39,53429,53430,53433,53435,53437,53439,53441],{"class":41,"line":2751},[39,53431,53432],{"class":45},"          arr[j ",[39,53434,1682],{"class":49},[39,53436,26175],{"class":56},[39,53438,5501],{"class":45},[39,53440,50],{"class":49},[39,53442,53443],{"class":45}," tmp\n",[39,53445,53446],{"class":41,"line":2756},[39,53447,3587],{"class":45},[39,53449,53450],{"class":41,"line":2785},[39,53451,53452],{"class":45},"      }\n",[39,53454,53455],{"class":41,"line":2790},[39,53456,3245],{"class":45},[39,53458,53459,53462,53464],{"class":41,"line":2807},[39,53460,53461],{"class":45},"    document.",[39,53463,52982],{"class":3021},[39,53465,53466],{"class":45},"(arr)\n",[39,53468,53469,53472,53474],{"class":41,"line":2812},[39,53470,53471],{"class":45},"  \u003C\u002F",[39,53473,52867],{"class":52354},[39,53475,52361],{"class":45},[39,53477,53478,53480,53482],{"class":41,"line":2817},[39,53479,52839],{"class":45},[39,53481,52854],{"class":52354},[39,53483,52361],{"class":45},[39,53485,53486],{"class":41,"line":2822},[39,53487,3458],{"emptyLinePlaceholder":1145},[39,53489,53490,53492,53494],{"class":41,"line":2836},[39,53491,52839],{"class":45},[39,53493,51689],{"class":52354},[39,53495,52361],{"class":45},[19,53497,53498],{},[269,53499],{"alt":34,"src":53500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,53502,53503],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,53505,53506],{},"let arr = [4, 2, 5, 1, 3]",[19,53508,53509],{},"\u002F\u002F 1.升序排列写法",[19,53511,53512],{},"arr.sort(function (a, b) {",[19,53514,53515],{},"return a - b",[19,53517,53518],{},"})",[19,53520,53521],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,53523,53524],{},"\u002F\u002F 降序排列写法",[19,53526,53512],{},[19,53528,53529],{},"return b - a",[19,53531,53518],{},[19,53533,53534],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,53536,53538],{"id":53537},"_29-函数","2.9 函数",[19,53540,53541],{},[269,53542],{"alt":34,"src":53543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,53545,53546],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,53548,53549],{},"函数的声明用function",[19,53551,53552],{},"函数里边可以嵌套函数",[1188,53554,53556],{"id":53555},"_291-函数传参","2.9.1 函数传参",[19,53558,53559],{},[269,53560],{"alt":34,"src":53561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,53563,53564],{},[269,53565],{"alt":34,"src":53566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[2205,53568,53569,53572,53575,53578,53581,53584],{},[1174,53570,53571],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[1174,53573,53574],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[1174,53576,53577],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[1174,53579,53580],{},"开发中尽量保持形参和实参个数一致",[1174,53582,53583],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[1174,53585,53586],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,53588,53589],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[1188,53591,53593],{"id":53592},"_292-函数的返回值","2.9.2 函数的返回值",[19,53595,53596],{},[269,53597],{"alt":34,"src":53598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,53600,53601],{},[269,53602],{"alt":34,"src":53603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[2205,53605,53606,53609,53612,53615,53618],{},[1174,53607,53608],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[1174,53610,53611],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[1174,53613,53614],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[1174,53616,53617],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[1174,53619,53620],{},"断点调试:进入函数内部看执行过程F11",[1188,53622,53624],{"id":53623},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[29,53626,53628],{"className":51687,"code":53627,"language":51689,"meta":34,"style":34},"    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",[36,53629,53630,53635,53640,53644,53649],{"__ignoreMap":34},[39,53631,53632],{"class":41,"line":42},[39,53633,53634],{"class":45},"    function fn(a, b) {\n",[39,53636,53637],{"class":41,"line":74},[39,53638,53639],{"class":45},"      console.log(a + b);\n",[39,53641,53642],{"class":41,"line":99},[39,53643,3245],{"class":45},[39,53645,53646],{"class":41,"line":106},[39,53647,53648],{"class":45},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[39,53650,53651],{"class":41,"line":112},[39,53652,53653],{"class":45},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[1188,53655,53657],{"id":53656},"_294-作用域","2.9.4 作用域",[2205,53659,53660,53666,53671,53674,53677],{},[1174,53661,53662,53663],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[304,53664,53665],{},"作用域",[1174,53667,53668],{},[304,53669,53670],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[1174,53672,53673],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[1174,53675,53676],{},"函数内部可以直接所使用全局变量",[1174,53678,53679],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,53681,15689],{},[29,53683,53685],{"className":51687,"code":53684,"language":51689,"meta":34,"style":34},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[36,53686,53687,53692,53697,53701,53706,53711,53716],{"__ignoreMap":34},[39,53688,53689],{"class":41,"line":42},[39,53690,53691],{"class":45},"    function fun() {\n",[39,53693,53694],{"class":41,"line":74},[39,53695,53696],{"class":45},"      num = 10\n",[39,53698,53699],{"class":41,"line":99},[39,53700,3245],{"class":45},[39,53702,53703],{"class":41,"line":106},[39,53704,53705],{"class":45},"    fun()\n",[39,53707,53708],{"class":41,"line":112},[39,53709,53710],{"class":45},"    console.log(num)\n",[39,53712,53713],{"class":41,"line":118},[39,53714,53715],{"class":45},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[39,53717,53718],{"class":41,"line":413},[39,53719,53720],{"class":45},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[2205,53722,53723,53726],{},[1174,53724,53725],{},"函数内部的形参可以看做是局部变量",[1174,53727,53728],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,53730,53731,53732],{},"变量访问原则： ",[304,53733,53734],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[1188,53736,53738],{"id":53737},"_295-匿名函数","2.9.5 匿名函数",[19,53740,53741],{},"函数可以分为具名函数和匿名函数",[19,53743,53744],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[1171,53746,53747],{},[1174,53748,53749],{},"函数表达式",[19,53751,53752],{},[269,53753],{"alt":34,"src":53754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,53756,53757],{},"里边也可以写参数",[19,53759,53760],{},"具名函数调用位置可以随意调整；",[19,53762,53763],{},"匿名函数函数表达式形式只能在声明后才可以使用",[1171,53765,53766],{"start":74},[1174,53767,53768],{},"立即执行函数",[19,53770,53771],{},[269,53772],{"alt":34,"src":53773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,53775,53776],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,53778,53779],{},"写法：两个小括号，然后在第一个小括号中写function",[19,53781,53782],{},"(function () {})();",[19,53784,53785],{},"不要落下最后的;",[19,53787,53788],{},"立即执行函数必须要加;",[19,53790,53791],{},"分号写前写后都没问题",[19,53793,53794],{},"写前：",[19,53796,53797],{},"(function() {})()",[19,53799,53800],{},";(function () {})();",[19,53802,53803],{},"写后:",[19,53805,53806],{},"(function() {})();",[19,53808,53782],{},[19,53810,53811],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,53813,53814],{},"还有一种写法：",[19,53816,53817],{},"(function(){}());",[19,53819,53820],{},"或者:",[19,53822,53823],{},"!function(){}();",[19,53825,53826],{},"立即执行函数有时候也是可以加名字的：",[19,53828,53829],{},"(function flexible(window,document) {}(window,document));",[19,53831,53832],{},"省一些调用方法",[1188,53834,53836],{"id":53835},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,53838,53839],{},[269,53840],{"alt":34,"src":53841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,53843,53844],{},"这样就不用非得给x,y初始化了",[19,53846,53847],{},[269,53848],{"alt":34,"src":53849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,53851,53852],{},"代码执行时先看左边",[19,53854,53855],{},"例如：console.log(false && 3+5)",[19,53857,53858],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,53860,53861],{},"&&都是真时，就返回最后一个真值",[19,53863,53864],{},"console.log(11 && 22)",[19,53866,53867],{},"输出22",[19,53869,53870],{},"逻辑与：遇真则真",[19,53872,15689],{},[19,53874,53875],{},"let age=1",[19,53877,53878],{},"console.log(11 || age++)",[19,53880,53881],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,53883,53884],{},"console.log(11 || 22)",[19,53886,53887],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,53889,53890],{},"||如果都是假的话，就取最后一个假的值了",[1188,53892,53894],{"id":53893},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,53896,53897],{},"显示转换：",[19,53899,53900,53903,53904],{},[304,53901,53902],{},"记忆","： ",[304,53905,53906],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,53908,53909],{},"空字符串为假，其他字符串全为真",[19,53911,53912],{},[269,53913],{"alt":34,"src":53914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53916,53917],{},"隐式转换：",[19,53919,53920],{},[269,53921],{"alt":34,"src":53922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53924,53925],{},"隐式转换:",[19,53927,53928],{},"null+3=3",[19,53930,53931],{},"undefined+3=NaN",[19,53933,53934],{},"null==undefined 输出true,他两个都当0看",[19,53936,53937],{},"null===undefined 输出false",[19,53939,53940],{},"undefined做任何操作都是NaN",[19,53942,53943],{},"NaN不等于NaN，NaN表示计算错误",[14,53945,53947],{"id":53946},"_210-对象","2.10 对象",[1188,53949,53951],{"id":53950},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53953,53954],{},"对象也是一种数据类型，里边的数据是无序的",[19,53956,53957],{},"对象由属性和方法组成",[19,53959,53960],{},[269,53961],{"alt":34,"src":53962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53964,53965],{},[269,53966],{"alt":34,"src":53967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53969,53970],{},[269,53971],{"alt":34,"src":53972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[1188,53974,53976],{"id":53975},"_2102-对象属性","2.10.2 对象属性",[19,53978,53979],{},[269,53980],{"alt":34,"src":53981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[1171,53983,53984],{},[1174,53985,53986],{},"查询对象",[19,53988,53989],{},"对象名.属性 goods.uname",[19,53991,53992],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53994,53995],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53997,53998],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54000,54001],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[1171,54003,54004],{"start":74},[1174,54005,54006],{},"重新赋值",[19,54008,54009],{},"对象名.属性=新值",[1171,54011,54012],{"start":99},[1174,54013,54014],{},"增加新数据",[19,54016,54009],{},[1171,54018,54019],{"start":106},[1174,54020,54021],{},"删除对象中的属性",[19,54023,54024],{},"delete 对象名.属性",[1188,54026,54028],{"id":54027},"_2103-对象方法","2.10.3 对象方法",[19,54030,54031],{},[269,54032],{"alt":34,"src":54033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54035,54036],{},"后边跟的是匿名函数",[19,54038,54039],{},"对象外面的叫函数；对象内部的叫方法",[19,54041,54042],{},[269,54043],{"alt":34,"src":54044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[1188,54046,54048],{"id":54047},"_2104-遍历对象","2.10.4 遍历对象",[19,54050,54051],{},"理解为加括号的python字典遍历",[19,54053,54054],{},[269,54055],{"alt":34,"src":54056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54058,54059],{},"k是字符串类型",[19,54061,54062],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[29,54064,54066],{"className":51687,"code":54065,"language":51689,"meta":34,"style":34},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[36,54067,54068,54073,54078,54083,54088],{"__ignoreMap":34},[39,54069,54070],{"class":41,"line":42},[39,54071,54072],{"class":45},"   let arr = [1, 2, 3]\n",[39,54074,54075],{"class":41,"line":74},[39,54076,54077],{"class":45},"    for (let k in arr) {\n",[39,54079,54080],{"class":41,"line":99},[39,54081,54082],{"class":45},"      console.log(k)\n",[39,54084,54085],{"class":41,"line":106},[39,54086,54087],{"class":45},"      console.log(arr[k])\n",[39,54089,54090],{"class":41,"line":112},[39,54091,3245],{"class":45},[19,54093,54094],{},[269,54095],{"alt":34,"src":54096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,54098,54099],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,54101,54102],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,54104,54105],{},"for in 得到的k是属性名",[52867,54107,54108],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[19,54110,54111],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[1188,54113,54115],{"id":54114},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,54117,54118],{},"数组中放对象信息",[29,54120,54124],{"className":54121,"code":54122,"language":54123,"meta":34,"style":34},"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",[36,54125,54126,54134,54139,54144,54149,54154,54159,54164,54169,54174,54179,54184,54189,54193,54197],{"__ignoreMap":34},[39,54127,54128,54130,54132],{"class":41,"line":42},[39,54129,2108],{"class":45},[39,54131,52867],{"class":52354},[39,54133,52361],{"class":45},[39,54135,54136],{"class":41,"line":74},[39,54137,54138],{"class":45},"    let students = [\n",[39,54140,54141],{"class":41,"line":99},[39,54142,54143],{"class":45},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[39,54145,54146],{"class":41,"line":106},[39,54147,54148],{"class":45},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[39,54150,54151],{"class":41,"line":112},[39,54152,54153],{"class":45},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[39,54155,54156],{"class":41,"line":118},[39,54157,54158],{"class":45},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[39,54160,54161],{"class":41,"line":413},[39,54162,54163],{"class":45},"    ]\n",[39,54165,54166],{"class":41,"line":419},[39,54167,54168],{"class":45},"    for (let i = 0; i \u003C students.length; i++) {\n",[39,54170,54171],{"class":41,"line":425},[39,54172,54173],{"class":45},"      for (let k in students[i]) {\n",[39,54175,54176],{"class":41,"line":443},[39,54177,54178],{"class":45},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[39,54180,54181],{"class":41,"line":449},[39,54182,54183],{"class":45},"        \u002F\u002F输出每个人的名字：\n",[39,54185,54186],{"class":41,"line":455},[39,54187,54188],{"class":45},"        \u002F\u002Fconsole.log(students[i].name)\n",[39,54190,54191],{"class":41,"line":461},[39,54192,53452],{"class":45},[39,54194,54195],{"class":41,"line":475},[39,54196,3245],{"class":45},[39,54198,54199,54201,54203],{"class":41,"line":665},[39,54200,53471],{"class":45},[39,54202,52867],{"class":52354},[39,54204,52361],{"class":45},[1188,54206,54208],{"id":54207},"_2106-内置对象","2.10.6 内置对象",[19,54210,54211],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[1171,54213,54214],{},[1174,54215,54216],{},"数学对象Math",[19,54218,54219],{},[269,54220],{"alt":34,"src":54221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,54223,54224],{},[46,54225,54228],{"href":54226,"rel":54227},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24921],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,54230,54231],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,54233,54234],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,54236,54237],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,54239,54240],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,54242,54243],{},"null属于对象数据类型",[1171,54245,54246],{"start":74},[1174,54247,54248],{},"生成任意范围随机数",[19,54250,54251],{},[269,54252],{"alt":34,"src":54253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,54255,54256],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,54258,54259],{},"乘以几就取不到几",[19,54261,54262],{},"取数组中的随机元素：",[19,54264,54265],{},"let arr = ['red', 'green', 'blue']",[19,54267,54268],{},"let random = Math.floor(Math.random() * arr.length)",[19,54270,54271],{},"console.log(arr[random])",[19,54273,54274],{},"这个函数得到的是全闭区间",[19,54276,54277],{},"function getRandom(N, M) {",[19,54279,54280],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,54282,2144],{},[19,54284,54285],{},"console.log(getRandom(4, 8))",[1188,54287,54289],{"id":54288},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,54291,54292],{},[269,54293],{"alt":34,"src":54294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,54296,54297],{},[269,54298],{"alt":34,"src":54299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,54301,54302],{},[269,54303],{"alt":34,"src":54304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,54306,54307],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,54309,54310],{},[269,54311],{"alt":34,"src":54312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,54314,54315],{},[269,54316],{"alt":34,"src":54317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,54319,54320],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,54322,54323],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,54325,54326],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1133,54328,54329],{},"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":34,"searchDepth":74,"depth":74,"links":54331},[54332,54340,54341,54342,54343,54344,54351,54355,54361,54370],{"id":51522,"depth":74,"text":51523,"children":54333},[54334,54335,54336,54337,54338,54339],{"id":51526,"depth":99,"text":51527},{"id":51543,"depth":99,"text":51544},{"id":51583,"depth":99,"text":51584},{"id":51595,"depth":99,"text":51596},{"id":51604,"depth":99,"text":51605},{"id":51652,"depth":99,"text":51653},{"id":51662,"depth":74,"text":51663},{"id":51750,"depth":74,"text":51751},{"id":51773,"depth":74,"text":51774},{"id":51785,"depth":74,"text":51786},{"id":51972,"depth":74,"text":51973,"children":54345},[54346,54347,54348,54349,54350],{"id":51976,"depth":99,"text":51977},{"id":51985,"depth":99,"text":51986},{"id":52013,"depth":99,"text":52014},{"id":52049,"depth":99,"text":52050},{"id":52074,"depth":99,"text":52075},{"id":52086,"depth":74,"text":52087,"children":54352},[54353,54354],{"id":52107,"depth":99,"text":52108},{"id":52201,"depth":99,"text":52202},{"id":52259,"depth":74,"text":52260,"children":54356},[54357,54358,54359,54360],{"id":52263,"depth":99,"text":52264},{"id":52287,"depth":99,"text":52288},{"id":52340,"depth":99,"text":52341},{"id":53151,"depth":99,"text":53152},{"id":53537,"depth":74,"text":53538,"children":54362},[54363,54364,54365,54366,54367,54368,54369],{"id":53555,"depth":99,"text":53556},{"id":53592,"depth":99,"text":53593},{"id":53623,"depth":99,"text":53624},{"id":53656,"depth":99,"text":53657},{"id":53737,"depth":99,"text":53738},{"id":53835,"depth":99,"text":53836},{"id":53893,"depth":99,"text":53894},{"id":53946,"depth":74,"text":53947,"children":54371},[54372,54373,54374,54375,54376,54377,54378],{"id":53950,"depth":99,"text":53951},{"id":53975,"depth":99,"text":53976},{"id":54027,"depth":99,"text":54028},{"id":54047,"depth":99,"text":54048},{"id":54114,"depth":99,"text":54115},{"id":54207,"depth":99,"text":54208},{"id":54288,"depth":99,"text":54289},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":51514,"description":1142},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":54385,"title":54386,"body":54387,"description":1142,"extension":1143,"meta":77727,"navigation":1145,"path":77728,"seo":77729,"stem":77730,"__hash__":77731},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":54388,"toc":77667},[54389,54392,54395,54398,54403,54406,54409,54412,54416,54420,54426,54431,54439,54446,54449,54453,54458,54463,54468,54471,54474,54485,54488,54492,54495,54498,54503,54508,54513,54516,54519,54611,54614,54619,54622,54627,54630,54633,54638,54641,54646,54650,54653,54667,54671,54676,54679,54682,54686,54691,54694,54698,54702,54707,54711,54716,54719,54722,54725,54728,54731,54734,54739,54744,54772,54775,54778,54781,54786,54789,54792,54795,54798,54802,54831,54835,54840,54845,54848,54851,54854,54859,54974,54979,54984,55145,55150,55153,55157,55162,55167,55170,55173,55176,55179,55182,55185,55188,55191,55194,55197,55200,55203,55206,55209,55211,55214,55217,55220,55225,55229,55626,55629,55635,55639,55644,56926,56931,56934,56937,56940,56945,58141,58145,58151,58156,58159,58164,58169,58173,58177,58182,58185,58190,58193,58196,58200,59108,59111,59115,59336,59339,59342,59345,59571,59574,59798,59801,59805,59810,59813,59816,60044,60047,60080,60083,60087,60092,60096,60099,60102,60105,60108,60111,60114,60117,60122,61402,61406,61409,62502,62506,62509,62512,62515,62518,62522,62525,62528,62530,62538,64019,64023,64026,64029,64032,64241,64244,64248,64252,64257,64262,64265,64268,64273,64277,64282,64285,64394,64398,64403,64408,64411,64414,64418,64423,64428,64433,64436,64439,64450,64453,64458,64463,64466,64469,64542,64546,64551,64554,64556,64567,64571,64576,65902,65905,65908,65911,65913,65916,65919,65922,65925,65928,65931,65934,65937,65940,65943,65946,65949,65951,65953,65956,65960,67054,67057,67060,67076,67090,67093,67098,67104,67109,67113,67117,67122,67126,67131,67573,67578,67581,67585,67590,67593,67596,67600,67605,67609,67614,67619,67623,67628,67633,67636,67641,67646,67650,67655,67660,67764,67767,67771,67776,68142,68145,68148,68151,68154,68157,68160,68163,68166,69462,69466,69471,69476,69479,69482,69485,69488,69490,69495,69500,69503,69507,69512,69517,69522,69525,69528,69531,69534,69537,69542,69545,69549,69554,69559,69563,69568,69571,69576,69579,69582,69585,69588,69591,69596,69599,69602,69605,69608,69612,69617,69620,69624,69629,69632,69635,69639,69668,69671,69675,69679,69684,69688,69693,69696,69699,69702,69705,69708,69711,69714,69717,69720,69723,69726,69729,69732,69735,69739,69744,69749,69752,69756,69760,69765,69768,69772,69775,69778,69783,69788,69793,69798,69803,69806,69809,69814,69819,69823,69828,69831,69836,69839,69842,69845,69848,69853,69856,69865,69869,69874,69877,69880,69884,69887,69892,69896,69899,69905,69911,69915,69941,69944,71505,71508,72004,72007,72012,72017,72022,72026,72031,72036,72041,72045,72050,72053,72056,72059,72062,72066,72069,72074,72077,72082,72086,72091,72094,72099,72104,72109,72112,72115,72120,72125,72128,72131,72135,72138,72143,72146,72151,72154,72159,72164,72169,72172,72177,72242,72245,72256,72260,72265,72437,72441,72446,72449,72452,72455,72459,72470,72474,72477,72482,72487,72490,72493,72496,72499,72502,72504,72507,72510,72513,72518,72521,72526,72529,72533,72536,72539,72553,72557,72560,72615,72620,72623,72626,72631,72634,72638,72643,72773,72777,72782,72787,72868,72873,72877,72880,72885,72890,72896,72899,72902,72905,72909,72914,72917,72928,72932,72949,75996,76000,76003,76006,76009,76030,76034,76037,76045,76048,76053,76056,76059,76064,76069,76073,76094,76098,76103,76106,76109,76112,76115,76119,76124,76127,76131,76136,76139,76144,76147,76152,76155,76160,77363,77367,77372,77375,77380,77664],[10,54390,54386],{"id":54391},"_3web-apis",[19,54393,54394],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,54396,54397],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,54399,54400],{},[269,54401],{"alt":34,"src":54402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,54404,54405],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,54407,54408],{},"建议数组和对象使用 const 来声明",[19,54410,54411],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,54413,54415],{"id":54414},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[1188,54417,54419],{"id":54418},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,54421,54422,54425],{},[36,54423,54424],{},"document"," = HTML 文件解析后的对象化表示；",[19,54427,54428,54430],{},[36,54429,54424],{}," ≠ HTML 文件本身",[19,54432,54433,54438],{},[304,54434,54435],{},[36,54436,54437],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,54440,54441,54445],{},[304,54442,54443],{},[36,54444,54424],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,54447,54448],{},"document实际上为window.document的简写",[1188,54450,54452],{"id":54451},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,54454,54455],{},[269,54456],{"alt":34,"src":54457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,54459,54460],{},[269,54461],{"alt":34,"src":54462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,54464,54465],{},[269,54466],{"alt":34,"src":54467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,54469,54470],{},"console.dir()",[19,54472,54473],{},"dir用来打印对象",[2205,54475,54476,54479,54482],{},[1174,54477,54478],{},"任何一个标签，都是一个对象",[1174,54480,54481],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[1174,54483,54484],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,54486,54487],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[1188,54489,54491],{"id":54490},"_312-获取dom对象","3.1.2 获取DoM对象",[19,54493,54494],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,54496,54497],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,54499,54500],{},[304,54501,54502],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[1171,54504,54505],{},[1174,54506,54507],{},"利用CSS选择器来获取标签元素",[19,54509,54510],{},[269,54511],{"alt":34,"src":54512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,54514,54515],{},"里边的选择器必须必须加引号！！！",[19,54517,54518],{},"只选择第一个元素",[29,54520,54522],{"className":54121,"code":54521,"language":54123,"meta":34,"style":34},"\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",[36,54523,54524,54532,54553,54572,54580,54585,54590,54595,54603],{"__ignoreMap":34},[39,54525,54526,54528,54530],{"class":41,"line":42},[39,54527,2108],{"class":45},[39,54529,52854],{"class":52354},[39,54531,52361],{"class":45},[39,54533,54534,54536,54538,54541,54543,54546,54549,54551],{"class":41,"line":74},[39,54535,53198],{"class":45},[39,54537,52665],{"class":52354},[39,54539,54540],{"class":3021}," class",[39,54542,50],{"class":45},[39,54544,54545],{"class":1319},"\"box\"",[39,54547,54548],{"class":45},">123\u003C\u002F",[39,54550,52665],{"class":52354},[39,54552,52361],{"class":45},[39,54554,54555,54557,54559,54561,54563,54565,54568,54570],{"class":41,"line":99},[39,54556,53198],{"class":45},[39,54558,52665],{"class":52354},[39,54560,54540],{"class":3021},[39,54562,50],{"class":45},[39,54564,54545],{"class":1319},[39,54566,54567],{"class":45},">456\u003C\u002F",[39,54569,52665],{"class":52354},[39,54571,52361],{"class":45},[39,54573,54574,54576,54578],{"class":41,"line":106},[39,54575,53198],{"class":45},[39,54577,52867],{"class":52354},[39,54579,52361],{"class":45},[39,54581,54582],{"class":41,"line":112},[39,54583,54584],{"class":45},"    \u002F\u002F 1.获取匹配的第一个元素\n",[39,54586,54587],{"class":41,"line":118},[39,54588,54589],{"class":45},"    const box = document.querySelector('div')\n",[39,54591,54592],{"class":41,"line":413},[39,54593,54594],{"class":45},"    console.dir(box)\n",[39,54596,54597,54599,54601],{"class":41,"line":419},[39,54598,53471],{"class":45},[39,54600,52867],{"class":52354},[39,54602,52361],{"class":45},[39,54604,54605,54607,54609],{"class":41,"line":425},[39,54606,52839],{"class":45},[39,54608,52854],{"class":52354},[39,54610,52361],{"class":45},[19,54612,54613],{},"只选123，不选456",[19,54615,54616],{},[269,54617],{"alt":34,"src":54618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,54620,54621],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,54623,54624],{},[269,54625],{"alt":34,"src":54626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,54628,54629],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,54631,54632],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[1171,54634,54635],{"start":74},[1174,54636,54637],{},"其他方法来获取标签元素",[19,54639,54640],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,54642,54643],{},[269,54644],{"alt":34,"src":54645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[1188,54647,54649],{"id":54648},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,54651,54652],{},"设置修改DOM元素内容有两种方式：",[2205,54654,54655,54658,54661,54664],{},[1174,54656,54657],{},"元素.innerText=''",[1174,54659,54660],{},"元素.innerHTML=''",[1174,54662,54663],{},"不写字符串输出数字也是可以的",[1174,54665,54666],{},"元素.innerHtml=1",[23054,54668,54670],{"id":54669},"_3131-innertext","3.1.3.1 innerText",[19,54672,54673],{},[269,54674],{"alt":34,"src":54675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,54677,54678],{},"思路：实现了修改盒子中的内容！",[19,54680,54681],{},"它只显示纯文本，不解析标签",[23054,54683,54685],{"id":54684},"_3132-innerhtml","3.1.3.2 innerHTML",[19,54687,54688],{},[269,54689],{"alt":34,"src":54690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,54692,54693],{},"相比于innerText，他的强大之处在于可以解析标签",[1188,54695,54697],{"id":54696},"_314-操作元素属性","3.1.4 操作元素属性",[23054,54699,54701],{"id":54700},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,54703,54704],{},[269,54705],{"alt":34,"src":54706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23054,54708,54710],{"id":54709},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,54712,54713],{},[269,54714],{"alt":34,"src":54715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,54717,54718],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,54720,54721],{},"div.style.backgroundColor = 'hotpink'",[19,54723,54724],{},"如果按照css的写法，-表示减，就会出错",[19,54726,54727],{},"body元素不需要再获取，直接用就行！！！！！！",[19,54729,54730],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,54732,54733],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,54735,54736],{},[269,54737],{"alt":34,"src":54738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,54740,54741],{},[269,54742],{"alt":34,"src":54743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[1171,54745,54746,54749,54752,54755,54758,54761],{},[1174,54747,54748],{},"className这个方式就是修改很多样式的时候来使用的！",[1174,54750,54751],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[1174,54753,54754],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[1174,54756,54757],{},"className为属性名，如果还用class的话就导致与关键字冲突",[1174,54759,54760],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[1174,54762,54763,54764,54769],{},"解析标签的时候就变为了",[52665,54765],{"className":54766},[54767,54768],"nav","box",[54770,54771],"br",{},[19,54773,54774],{},"例子：",[52665,54776],{"className":54777},[54767],[52867,54779,54780],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,54782,54783],{},[269,54784],{"alt":34,"src":54785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,54787,54788],{},"追加和删除类名用classList",[19,54790,54791],{},"常用于类似于开关的操作",[19,54793,54794],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,54796,54797],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23054,54799,54801],{"id":54800},"_3143-牢记点","3.1.4.3 牢记点",[1171,54803,54804,54807,54810,54813,54816,54819,54822,54825,54828],{},[1174,54805,54806],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[1174,54808,54809],{},"使用style属性操作css时不要忘记引号",[1174,54811,54812],{},"使用className或者classList时也不要忘记引号",[1174,54814,54815],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[1174,54817,54818],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[1174,54820,54821],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[1174,54823,54824],{},"若： let arr=['1','2',3] arr[0]=1",[1174,54826,54827],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[1174,54829,54830],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[1188,54832,54834],{"id":54833},"_315-操作表单元素","3.1.5 操作表单元素",[1171,54836,54837],{},[1174,54838,54839],{},"天生的属性",[19,54841,54842],{},[269,54843],{"alt":34,"src":54844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,54846,54847],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,54849,54850],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,54852,54853],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,54855,54856],{},[269,54857],{"alt":34,"src":54858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[29,54860,54862],{"className":51687,"code":54861,"language":51689,"meta":34,"style":34},"在复选框中如果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",[36,54863,54864,54869,54901,54906,54911,54916,54921,54925,54930,54935,54952,54964,54969],{"__ignoreMap":34},[39,54865,54866],{"class":41,"line":42},[39,54867,54868],{"class":45},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[39,54870,54871,54873,54876,54879,54881,54884,54886,54888,54890,54892,54894,54896,54899],{"class":41,"line":74},[39,54872,2108],{"class":45},[39,54874,54875],{"class":52354},"input",[39,54877,54878],{"class":3021}," type",[39,54880,50],{"class":45},[39,54882,54883],{"class":1319},"\"checkbox\"",[39,54885,15976],{"class":3021},[39,54887,50],{"class":45},[39,54889,8708],{"class":1319},[39,54891,16015],{"class":3021},[39,54893,50],{"class":45},[39,54895,8708],{"class":1319},[39,54897,54898],{"class":3021}," checked",[39,54900,52361],{"class":45},[39,54902,54903],{"class":41,"line":99},[39,54904,54905],{"class":45},"不选的话：\n",[39,54907,54908],{"class":41,"line":106},[39,54909,54910],{"class":45},"const input = document.querySelector('input')\n",[39,54912,54913],{"class":41,"line":112},[39,54914,54915],{"class":45},"input.checked=false\n",[39,54917,54918],{"class":41,"line":118},[39,54919,54920],{"class":45},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[39,54922,54923],{"class":41,"line":413},[39,54924,3458],{"emptyLinePlaceholder":1145},[39,54926,54927],{"class":41,"line":419},[39,54928,54929],{"class":45},"禁用按钮：\n",[39,54931,54932],{"class":41,"line":425},[39,54933,54934],{"class":45},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[39,54936,54937,54939,54942,54945,54948,54950],{"class":41,"line":443},[39,54938,2108],{"class":45},[39,54940,54941],{"class":52354},"button",[39,54943,54944],{"class":3021}," disabled",[39,54946,54947],{"class":45},">点击\u003C\u002F",[39,54949,54941],{"class":52354},[39,54951,52361],{"class":45},[39,54953,54954,54956,54958,54960,54962],{"class":41,"line":449},[39,54955,2108],{"class":45},[39,54957,54941],{"class":52354},[39,54959,54947],{"class":45},[39,54961,54941],{"class":52354},[39,54963,52361],{"class":45},[39,54965,54966],{"class":41,"line":455},[39,54967,54968],{"class":45},"const bt = document.querySelector('button')\n",[39,54970,54971],{"class":41,"line":461},[39,54972,54973],{"class":45},"bt.disabled = false\n",[1171,54975,54976],{"start":74},[1174,54977,54978],{},"自定义属性",[19,54980,54981],{},[269,54982],{"alt":34,"src":54983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[29,54985,54987],{"className":54121,"code":54986,"language":54123,"meta":34,"style":34},"\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",[36,54988,54989,54997,55025,55044,55063,55082,55101,55109,55114,55119,55124,55129,55137],{"__ignoreMap":34},[39,54990,54991,54993,54995],{"class":41,"line":42},[39,54992,2108],{"class":45},[39,54994,52854],{"class":52354},[39,54996,52361],{"class":45},[39,54998,54999,55001,55003,55006,55008,55010,55013,55015,55018,55021,55023],{"class":41,"line":74},[39,55000,53198],{"class":45},[39,55002,52665],{"class":52354},[39,55004,55005],{"class":3021}," data-id",[39,55007,50],{"class":45},[39,55009,4736],{"class":1319},[39,55011,55012],{"class":3021}," data-spm",[39,55014,50],{"class":45},[39,55016,55017],{"class":1319},"\"我不知道\"",[39,55019,55020],{"class":45},">1\u003C\u002F",[39,55022,52665],{"class":52354},[39,55024,52361],{"class":45},[39,55026,55027,55029,55031,55033,55035,55037,55040,55042],{"class":41,"line":99},[39,55028,53198],{"class":45},[39,55030,52665],{"class":52354},[39,55032,55005],{"class":3021},[39,55034,50],{"class":45},[39,55036,4759],{"class":1319},[39,55038,55039],{"class":45},">2\u003C\u002F",[39,55041,52665],{"class":52354},[39,55043,52361],{"class":45},[39,55045,55046,55048,55050,55052,55054,55056,55059,55061],{"class":41,"line":106},[39,55047,53198],{"class":45},[39,55049,52665],{"class":52354},[39,55051,55005],{"class":3021},[39,55053,50],{"class":45},[39,55055,4772],{"class":1319},[39,55057,55058],{"class":45},">3\u003C\u002F",[39,55060,52665],{"class":52354},[39,55062,52361],{"class":45},[39,55064,55065,55067,55069,55071,55073,55075,55078,55080],{"class":41,"line":112},[39,55066,53198],{"class":45},[39,55068,52665],{"class":52354},[39,55070,55005],{"class":3021},[39,55072,50],{"class":45},[39,55074,4785],{"class":1319},[39,55076,55077],{"class":45},">4\u003C\u002F",[39,55079,52665],{"class":52354},[39,55081,52361],{"class":45},[39,55083,55084,55086,55088,55090,55092,55094,55097,55099],{"class":41,"line":118},[39,55085,53198],{"class":45},[39,55087,52665],{"class":52354},[39,55089,55005],{"class":3021},[39,55091,50],{"class":45},[39,55093,4806],{"class":1319},[39,55095,55096],{"class":45},">5\u003C\u002F",[39,55098,52665],{"class":52354},[39,55100,52361],{"class":45},[39,55102,55103,55105,55107],{"class":41,"line":413},[39,55104,53198],{"class":45},[39,55106,52867],{"class":52354},[39,55108,52361],{"class":45},[39,55110,55111],{"class":41,"line":419},[39,55112,55113],{"class":45},"    const one = document.querySelector('div')\n",[39,55115,55116],{"class":41,"line":425},[39,55117,55118],{"class":45},"    console.log(one.dataset)\n",[39,55120,55121],{"class":41,"line":443},[39,55122,55123],{"class":45},"    console.log(one.dataset.id)\n",[39,55125,55126],{"class":41,"line":449},[39,55127,55128],{"class":45},"    console.log(one.dataset.spm)\n",[39,55130,55131,55133,55135],{"class":41,"line":455},[39,55132,53471],{"class":45},[39,55134,52867],{"class":52354},[39,55136,52361],{"class":45},[39,55138,55139,55141,55143],{"class":41,"line":461},[39,55140,52839],{"class":45},[39,55142,52854],{"class":52354},[39,55144,52361],{"class":45},[19,55146,55147],{},[269,55148],{"alt":34,"src":55149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,55151,55152],{},"document.querySelector选择的是第一个对象（元素）",[1188,55154,55156],{"id":55155},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,55158,55159],{},[269,55160],{"alt":34,"src":55161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,55163,55164],{},[269,55165],{"alt":34,"src":55166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,55168,55169],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52867,55171,55172],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,55174,55175],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52867,55177,55178],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[19,55180,55181],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,55183,55184],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,55186,55187],{},"单位为毫秒！！！",[19,55189,55190],{},"可以搭配匿名函数来用！！！",[19,55192,55193],{},"setInterval(function () {",[19,55195,55196],{},"alert('两秒执行一次')",[19,55198,55199],{},"}, 2000)",[19,55201,55202],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,55204,55205],{},"function fn() {",[19,55207,55208],{},"document.write(1)",[19,55210,2144],{},[19,55212,55213],{},"setInterval(fn, 1000)",[19,55215,55216],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,55218,55219],{},"setInterval('fn()', 1000)",[19,55221,55222],{},[269,55223],{"alt":34,"src":55224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23054,55226,55228],{"id":55227},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[29,55230,55232],{"className":51687,"code":55231,"language":51689,"meta":34,"style":34},"\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",[36,55233,55234,55244,55258,55262,55270,55284,55304,55316,55324,55328,55336,55373,55378,55383,55388,55396,55404,55426,55434,55439,55461,55466,55471,55482,55487,55507,55515,55530,55545,55556,55561,55571,55581,55585,55594,55598,55606,55614,55618],{"__ignoreMap":34},[39,55235,55236,55238,55240,55242],{"class":41,"line":42},[39,55237,52351],{"class":45},[39,55239,52355],{"class":52354},[39,55241,52358],{"class":3021},[39,55243,52361],{"class":45},[39,55245,55246,55248,55250,55252,55254,55256],{"class":41,"line":74},[39,55247,2108],{"class":45},[39,55249,51689],{"class":52354},[39,55251,52370],{"class":3021},[39,55253,50],{"class":45},[39,55255,52375],{"class":1319},[39,55257,52361],{"class":45},[39,55259,55260],{"class":41,"line":99},[39,55261,3458],{"emptyLinePlaceholder":1145},[39,55263,55264,55266,55268],{"class":41,"line":106},[39,55265,2108],{"class":45},[39,55267,52388],{"class":52354},[39,55269,52361],{"class":45},[39,55271,55272,55274,55276,55278,55280,55282],{"class":41,"line":112},[39,55273,53198],{"class":45},[39,55275,52398],{"class":52354},[39,55277,52401],{"class":3021},[39,55279,50],{"class":45},[39,55281,52406],{"class":1319},[39,55283,52361],{"class":45},[39,55285,55286,55288,55290,55292,55294,55296,55298,55300,55302],{"class":41,"line":118},[39,55287,53198],{"class":45},[39,55289,52398],{"class":52354},[39,55291,15976],{"class":3021},[39,55293,50],{"class":45},[39,55295,52445],{"class":1319},[39,55297,52425],{"class":3021},[39,55299,50],{"class":45},[39,55301,52452],{"class":1319},[39,55303,52361],{"class":45},[39,55305,55306,55308,55310,55312,55314],{"class":41,"line":413},[39,55307,53198],{"class":45},[39,55309,52461],{"class":52354},[39,55311,52464],{"class":45},[39,55313,52461],{"class":52354},[39,55315,52361],{"class":45},[39,55317,55318,55320,55322],{"class":41,"line":419},[39,55319,52839],{"class":45},[39,55321,52388],{"class":52354},[39,55323,52361],{"class":45},[39,55325,55326],{"class":41,"line":425},[39,55327,3458],{"emptyLinePlaceholder":1145},[39,55329,55330,55332,55334],{"class":41,"line":443},[39,55331,2108],{"class":45},[39,55333,52854],{"class":52354},[39,55335,52361],{"class":45},[39,55337,55338,55340,55343,55345,55347,55349,55351,55353,55355,55358,55360,55363,55366,55368,55371],{"class":41,"line":449},[39,55339,53198],{"class":45},[39,55341,55342],{"class":52354},"textarea",[39,55344,15976],{"class":3021},[39,55346,50],{"class":45},[39,55348,8708],{"class":1319},[39,55350,16015],{"class":3021},[39,55352,50],{"class":45},[39,55354,8708],{"class":1319},[39,55356,55357],{"class":3021}," cols",[39,55359,50],{"class":45},[39,55361,55362],{"class":1319},"\"30\"",[39,55364,55365],{"class":3021}," rows",[39,55367,50],{"class":45},[39,55369,55370],{"class":1319},"\"10\"",[39,55372,52361],{"class":45},[39,55374,55375],{"class":41,"line":455},[39,55376,55377],{"class":45},"        用户注册协议\n",[39,55379,55380],{"class":41,"line":461},[39,55381,55382],{"class":45},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[39,55384,55385],{"class":41,"line":475},[39,55386,55387],{"class":45},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[39,55389,55390,55392,55394],{"class":41,"line":665},[39,55391,52830],{"class":45},[39,55393,55342],{"class":52354},[39,55395,52361],{"class":45},[39,55397,55398,55400,55402],{"class":41,"line":671},[39,55399,53198],{"class":45},[39,55401,54770],{"class":52354},[39,55403,52361],{"class":45},[39,55405,55406,55408,55410,55412,55414,55417,55419,55422,55424],{"class":41,"line":684},[39,55407,53198],{"class":45},[39,55409,54941],{"class":52354},[39,55411,54540],{"class":3021},[39,55413,50],{"class":45},[39,55415,55416],{"class":1319},"\"btn\"",[39,55418,54944],{"class":3021},[39,55420,55421],{"class":45},">我已经阅读用户协议(5)\u003C\u002F",[39,55423,54941],{"class":52354},[39,55425,52361],{"class":45},[39,55427,55428,55430,55432],{"class":41,"line":2732},[39,55429,53198],{"class":45},[39,55431,52867],{"class":52354},[39,55433,52361],{"class":45},[39,55435,55436],{"class":41,"line":2737},[39,55437,55438],{"class":102},"    \u002F\u002F 1. 获取元素\n",[39,55440,55441,55443,55446,55448,55451,55454,55456,55459],{"class":41,"line":2751},[39,55442,12277],{"class":49},[39,55444,55445],{"class":56}," btn",[39,55447,14620],{"class":49},[39,55449,55450],{"class":45}," document.",[39,55452,55453],{"class":3021},"querySelector",[39,55455,1221],{"class":45},[39,55457,55458],{"class":1319},"'.btn'",[39,55460,209],{"class":45},[39,55462,55463],{"class":41,"line":2756},[39,55464,55465],{"class":102},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[39,55467,55468],{"class":41,"line":2785},[39,55469,55470],{"class":102},"    \u002F\u002F 2. 倒计时\n",[39,55472,55473,55475,55477,55479],{"class":41,"line":2790},[39,55474,53273],{"class":49},[39,55476,10494],{"class":45},[39,55478,50],{"class":49},[39,55480,55481],{"class":56}," 5\n",[39,55483,55484],{"class":41,"line":2807},[39,55485,55486],{"class":102},"    \u002F\u002F 2.1 开启定时器\n",[39,55488,55489,55491,55494,55496,55499,55501,55504],{"class":41,"line":2812},[39,55490,53273],{"class":49},[39,55492,55493],{"class":45}," n ",[39,55495,50],{"class":49},[39,55497,55498],{"class":3021}," setInterval",[39,55500,1221],{"class":45},[39,55502,55503],{"class":49},"function",[39,55505,55506],{"class":45}," () {\n",[39,55508,55509,55512],{"class":41,"line":2817},[39,55510,55511],{"class":45},"      i",[39,55513,55514],{"class":49},"--\n",[39,55516,55517,55520,55522,55525,55527],{"class":41,"line":2822},[39,55518,55519],{"class":45},"      btn.innerHTML ",[39,55521,50],{"class":49},[39,55523,55524],{"class":1319}," `我已经阅读用户协议(${",[39,55526,1644],{"class":45},[39,55528,55529],{"class":1319},"})`\n",[39,55531,55532,55535,55538,55541,55543],{"class":41,"line":2836},[39,55533,55534],{"class":49},"      if",[39,55536,55537],{"class":45}," (i ",[39,55539,55540],{"class":49},"===",[39,55542,5151],{"class":56},[39,55544,13498],{"class":45},[39,55546,55547,55550,55553],{"class":41,"line":2841},[39,55548,55549],{"class":3021},"        clearInterval",[39,55551,55552],{"class":45},"(n)  ",[39,55554,55555],{"class":102},"\u002F\u002F 关闭定时器\n",[39,55557,55558],{"class":41,"line":3635},[39,55559,55560],{"class":102},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[39,55562,55563,55566,55568],{"class":41,"line":3649},[39,55564,55565],{"class":45},"        btn.disabled ",[39,55567,50],{"class":49},[39,55569,55570],{"class":56}," false\n",[39,55572,55573,55576,55578],{"class":41,"line":3657},[39,55574,55575],{"class":45},"        btn.innerHTML ",[39,55577,50],{"class":49},[39,55579,55580],{"class":1319}," '同意'\n",[39,55582,55583],{"class":41,"line":3662},[39,55584,53452],{"class":45},[39,55586,55587,55590,55592],{"class":41,"line":3668},[39,55588,55589],{"class":45},"    }, ",[39,55591,7466],{"class":56},[39,55593,209],{"class":45},[39,55595,55596],{"class":41,"line":3674},[39,55597,3458],{"emptyLinePlaceholder":1145},[39,55599,55600,55602,55604],{"class":41,"line":3679},[39,55601,53471],{"class":45},[39,55603,52867],{"class":52354},[39,55605,52361],{"class":45},[39,55607,55608,55610,55612],{"class":41,"line":9004},[39,55609,52839],{"class":45},[39,55611,52854],{"class":52354},[39,55613,52361],{"class":45},[39,55615,55616],{"class":41,"line":9028},[39,55617,3458],{"emptyLinePlaceholder":1145},[39,55619,55620,55622,55624],{"class":41,"line":9033},[39,55621,52839],{"class":45},[39,55623,51689],{"class":52354},[39,55625,52361],{"class":45},[19,55627,55628],{},"不要一直想着用死循环,避免死循环",[19,55630,55631,55634],{},[36,55632,55633],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23054,55636,55638],{"id":55637},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[1171,55640,55641],{},[1174,55642,55643],{},"法1",[29,55645,55647],{"className":51687,"code":55646,"language":51689,"meta":34,"style":34},"\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",[36,55648,55649,55659,55673,55677,55685,55699,55719,55731,55739,55745,55756,55767,55771,55775,55782,55794,55798,55802,55809,55821,55835,55848,55862,55866,55870,55877,55888,55899,55910,55922,55934,55946,55950,55954,55962,55972,55985,55997,56010,56014,56018,56025,56035,56047,56059,56070,56081,56091,56103,56115,56119,56123,56132,56144,56156,56184,56197,56201,56205,56212,56223,56227,56235,56243,56247,56255,56269,56284,56308,56316,56331,56344,56352,56373,56385,56397,56409,56421,56433,56445,56457,56466,56474,56482,56490,56502,56525,56544,56563,56582,56601,56620,56639,56659,56663,56683,56702,56722,56743,56754,56771,56781,56791,56801,56806,56811,56816,56821,56846,56859,56863,56886,56890,56898,56906,56914,56918],{"__ignoreMap":34},[39,55650,55651,55653,55655,55657],{"class":41,"line":42},[39,55652,52351],{"class":45},[39,55654,52355],{"class":52354},[39,55656,52358],{"class":3021},[39,55658,52361],{"class":45},[39,55660,55661,55663,55665,55667,55669,55671],{"class":41,"line":74},[39,55662,2108],{"class":45},[39,55664,51689],{"class":52354},[39,55666,52370],{"class":3021},[39,55668,50],{"class":45},[39,55670,52375],{"class":1319},[39,55672,52361],{"class":45},[39,55674,55675],{"class":41,"line":99},[39,55676,3458],{"emptyLinePlaceholder":1145},[39,55678,55679,55681,55683],{"class":41,"line":106},[39,55680,2108],{"class":45},[39,55682,52388],{"class":52354},[39,55684,52361],{"class":45},[39,55686,55687,55689,55691,55693,55695,55697],{"class":41,"line":112},[39,55688,53198],{"class":45},[39,55690,52398],{"class":52354},[39,55692,52401],{"class":3021},[39,55694,50],{"class":45},[39,55696,52406],{"class":1319},[39,55698,52361],{"class":45},[39,55700,55701,55703,55705,55707,55709,55711,55713,55715,55717],{"class":41,"line":118},[39,55702,53198],{"class":45},[39,55704,52398],{"class":52354},[39,55706,15976],{"class":3021},[39,55708,50],{"class":45},[39,55710,52445],{"class":1319},[39,55712,52425],{"class":3021},[39,55714,50],{"class":45},[39,55716,52452],{"class":1319},[39,55718,52361],{"class":45},[39,55720,55721,55723,55725,55727,55729],{"class":41,"line":413},[39,55722,53198],{"class":45},[39,55724,52461],{"class":52354},[39,55726,52464],{"class":45},[39,55728,52461],{"class":52354},[39,55730,52361],{"class":45},[39,55732,55733,55735,55737],{"class":41,"line":419},[39,55734,53198],{"class":45},[39,55736,1133],{"class":52354},[39,55738,52361],{"class":45},[39,55740,55741,55743],{"class":41,"line":425},[39,55742,7459],{"class":52354},[39,55744,16628],{"class":45},[39,55746,55747,55750,55752,55754],{"class":41,"line":443},[39,55748,55749],{"class":56},"      padding",[39,55751,52491],{"class":45},[39,55753,260],{"class":56},[39,55755,2359],{"class":45},[39,55757,55758,55761,55763,55765],{"class":41,"line":449},[39,55759,55760],{"class":56},"      margin",[39,55762,52491],{"class":45},[39,55764,260],{"class":56},[39,55766,2359],{"class":45},[39,55768,55769],{"class":41,"line":455},[39,55770,3245],{"class":45},[39,55772,55773],{"class":41,"line":461},[39,55774,3458],{"emptyLinePlaceholder":1145},[39,55776,55777,55780],{"class":41,"line":475},[39,55778,55779],{"class":52354},"    li",[39,55781,16628],{"class":45},[39,55783,55784,55787,55789,55792],{"class":41,"line":665},[39,55785,55786],{"class":56},"      list-style",[39,55788,52491],{"class":45},[39,55790,55791],{"class":56},"none",[39,55793,2359],{"class":45},[39,55795,55796],{"class":41,"line":671},[39,55797,3245],{"class":45},[39,55799,55800],{"class":41,"line":684},[39,55801,3458],{"emptyLinePlaceholder":1145},[39,55803,55804,55807],{"class":41,"line":2732},[39,55805,55806],{"class":3021},"    .box",[39,55808,16628],{"class":45},[39,55810,55811,55814,55816,55819],{"class":41,"line":2737},[39,55812,55813],{"class":56},"      position",[39,55815,52491],{"class":45},[39,55817,55818],{"class":56},"relative",[39,55820,2359],{"class":45},[39,55822,55823,55826,55828,55831,55833],{"class":41,"line":2751},[39,55824,55825],{"class":56},"      width",[39,55827,52491],{"class":45},[39,55829,55830],{"class":56},"976",[39,55832,52546],{"class":49},[39,55834,2359],{"class":45},[39,55836,55837,55840,55842,55844,55846],{"class":41,"line":2756},[39,55838,55839],{"class":56},"      height",[39,55841,52491],{"class":45},[39,55843,2604],{"class":56},[39,55845,52546],{"class":49},[39,55847,2359],{"class":45},[39,55849,55850,55852,55854,55856,55858,55860],{"class":41,"line":2785},[39,55851,55760],{"class":56},[39,55853,52491],{"class":45},[39,55855,1519],{"class":56},[39,55857,52546],{"class":49},[39,55859,52610],{"class":56},[39,55861,2359],{"class":45},[39,55863,55864],{"class":41,"line":2790},[39,55865,3245],{"class":45},[39,55867,55868],{"class":41,"line":2807},[39,55869,3458],{"emptyLinePlaceholder":1145},[39,55871,55872,55875],{"class":41,"line":2812},[39,55873,55874],{"class":3021},"    .slider-footer",[39,55876,16628],{"class":45},[39,55878,55879,55881,55883,55886],{"class":41,"line":2817},[39,55880,55813],{"class":56},[39,55882,52491],{"class":45},[39,55884,55885],{"class":56},"absolute",[39,55887,2359],{"class":45},[39,55889,55890,55893,55895,55897],{"class":41,"line":2822},[39,55891,55892],{"class":56},"      left",[39,55894,52491],{"class":45},[39,55896,260],{"class":56},[39,55898,2359],{"class":45},[39,55900,55901,55904,55906,55908],{"class":41,"line":2836},[39,55902,55903],{"class":56},"      bottom",[39,55905,52491],{"class":45},[39,55907,260],{"class":56},[39,55909,2359],{"class":45},[39,55911,55912,55914,55916,55918,55920],{"class":41,"line":2841},[39,55913,55825],{"class":56},[39,55915,52491],{"class":45},[39,55917,1519],{"class":56},[39,55919,1534],{"class":49},[39,55921,2359],{"class":45},[39,55923,55924,55926,55928,55930,55932],{"class":41,"line":3635},[39,55925,55839],{"class":56},[39,55927,52491],{"class":45},[39,55929,1775],{"class":56},[39,55931,1534],{"class":49},[39,55933,2359],{"class":45},[39,55935,55936,55939,55941,55944],{"class":41,"line":3649},[39,55937,55938],{"class":56},"      background-color",[39,55940,52491],{"class":45},[39,55942,55943],{"class":56},"skyblue",[39,55945,2359],{"class":45},[39,55947,55948],{"class":41,"line":3657},[39,55949,3245],{"class":45},[39,55951,55952],{"class":41,"line":3662},[39,55953,3458],{"emptyLinePlaceholder":1145},[39,55955,55956,55958,55960],{"class":41,"line":3668},[39,55957,55874],{"class":3021},[39,55959,7881],{"class":52354},[39,55961,16628],{"class":45},[39,55963,55964,55966,55968,55970],{"class":41,"line":3674},[39,55965,55813],{"class":56},[39,55967,52491],{"class":45},[39,55969,55885],{"class":56},[39,55971,2359],{"class":45},[39,55973,55974,55977,55979,55981,55983],{"class":41,"line":3679},[39,55975,55976],{"class":56},"      font-size",[39,55978,52491],{"class":45},[39,55980,2099],{"class":56},[39,55982,52546],{"class":49},[39,55984,2359],{"class":45},[39,55986,55987,55989,55991,55993,55995],{"class":41,"line":9004},[39,55988,55892],{"class":56},[39,55990,52491],{"class":45},[39,55992,1898],{"class":56},[39,55994,52546],{"class":49},[39,55996,2359],{"class":45},[39,55998,55999,56002,56004,56006,56008],{"class":41,"line":9028},[39,56000,56001],{"class":56},"      top",[39,56003,52491],{"class":45},[39,56005,89],{"class":56},[39,56007,52546],{"class":49},[39,56009,2359],{"class":45},[39,56011,56012],{"class":41,"line":9033},[39,56013,3245],{"class":45},[39,56015,56016],{"class":41,"line":9039},[39,56017,3458],{"emptyLinePlaceholder":1145},[39,56019,56020,56023],{"class":41,"line":9066},[39,56021,56022],{"class":52354},"    ul",[39,56024,16628],{"class":45},[39,56026,56027,56029,56031,56033],{"class":41,"line":9071},[39,56028,55813],{"class":56},[39,56030,52491],{"class":45},[39,56032,55885],{"class":56},[39,56034,2359],{"class":45},[39,56036,56037,56039,56041,56043,56045],{"class":41,"line":9077},[39,56038,56001],{"class":56},[39,56040,52491],{"class":45},[39,56042,1979],{"class":56},[39,56044,52546],{"class":49},[39,56046,2359],{"class":45},[39,56048,56049,56051,56053,56055,56057],{"class":41,"line":9089},[39,56050,55892],{"class":56},[39,56052,52491],{"class":45},[39,56054,1898],{"class":56},[39,56056,52546],{"class":49},[39,56058,2359],{"class":45},[39,56060,56061,56064,56066,56068],{"class":41,"line":9101},[39,56062,56063],{"class":56},"      display",[39,56065,52491],{"class":45},[39,56067,52531],{"class":56},[39,56069,2359],{"class":45},[39,56071,56072,56075,56077,56079],{"class":41,"line":9113},[39,56073,56074],{"class":56},"      justify-content",[39,56076,52491],{"class":45},[39,56078,52722],{"class":56},[39,56080,2359],{"class":45},[39,56082,56083,56085,56087,56089],{"class":41,"line":10772},[39,56084,55813],{"class":56},[39,56086,52491],{"class":45},[39,56088,55885],{"class":56},[39,56090,2359],{"class":45},[39,56092,56093,56095,56097,56099,56101],{"class":41,"line":10797},[39,56094,55825],{"class":56},[39,56096,52491],{"class":45},[39,56098,5050],{"class":56},[39,56100,52546],{"class":49},[39,56102,2359],{"class":45},[39,56104,56105,56107,56109,56111,56113],{"class":41,"line":10820},[39,56106,55839],{"class":56},[39,56108,52491],{"class":45},[39,56110,1898],{"class":56},[39,56112,52546],{"class":49},[39,56114,2359],{"class":45},[39,56116,56117],{"class":41,"line":10844},[39,56118,3245],{"class":45},[39,56120,56121],{"class":41,"line":10849},[39,56122,3458],{"emptyLinePlaceholder":1145},[39,56124,56125,56127,56130],{"class":41,"line":10854},[39,56126,56022],{"class":52354},[39,56128,56129],{"class":52354}," li",[39,56131,16628],{"class":45},[39,56133,56134,56136,56138,56140,56142],{"class":41,"line":10859},[39,56135,55825],{"class":56},[39,56137,52491],{"class":45},[39,56139,1898],{"class":56},[39,56141,52546],{"class":49},[39,56143,2359],{"class":45},[39,56145,56146,56148,56150,56152,56154],{"class":41,"line":10868},[39,56147,55839],{"class":56},[39,56149,52491],{"class":45},[39,56151,1898],{"class":56},[39,56153,52546],{"class":49},[39,56155,2359],{"class":45},[39,56157,56158,56160,56162,56165,56167,56169,56171,56173,56175,56177,56179,56182],{"class":41,"line":10873},[39,56159,55938],{"class":56},[39,56161,52491],{"class":45},[39,56163,56164],{"class":56},"rgba",[39,56166,1221],{"class":45},[39,56168,260],{"class":56},[39,56170,13491],{"class":45},[39,56172,260],{"class":56},[39,56174,13491],{"class":45},[39,56176,260],{"class":56},[39,56178,13491],{"class":45},[39,56180,56181],{"class":56},".4",[39,56183,3777],{"class":45},[39,56185,56186,56189,56191,56193,56195],{"class":41,"line":10879},[39,56187,56188],{"class":56},"      border-radius",[39,56190,52491],{"class":45},[39,56192,146],{"class":56},[39,56194,52546],{"class":49},[39,56196,2359],{"class":45},[39,56198,56199],{"class":41,"line":10900},[39,56200,3245],{"class":45},[39,56202,56203],{"class":41,"line":10906},[39,56204,3458],{"emptyLinePlaceholder":1145},[39,56206,56207,56210],{"class":41,"line":10920},[39,56208,56209],{"class":3021},"    .activate",[39,56211,16628],{"class":45},[39,56213,56214,56216,56218,56221],{"class":41,"line":10926},[39,56215,55938],{"class":56},[39,56217,52491],{"class":45},[39,56219,56220],{"class":56},"#f7f7f7",[39,56222,2359],{"class":45},[39,56224,56225],{"class":41,"line":10953},[39,56226,3245],{"class":45},[39,56228,56229,56231,56233],{"class":41,"line":10962},[39,56230,53471],{"class":45},[39,56232,1133],{"class":52354},[39,56234,52361],{"class":45},[39,56236,56237,56239,56241],{"class":41,"line":10968},[39,56238,52839],{"class":45},[39,56240,52388],{"class":52354},[39,56242,52361],{"class":45},[39,56244,56245],{"class":41,"line":10976},[39,56246,3458],{"emptyLinePlaceholder":1145},[39,56248,56249,56251,56253],{"class":41,"line":10981},[39,56250,2108],{"class":45},[39,56252,52854],{"class":52354},[39,56254,52361],{"class":45},[39,56256,56257,56259,56261,56263,56265,56267],{"class":41,"line":17660},[39,56258,53198],{"class":45},[39,56260,52665],{"class":52354},[39,56262,54540],{"class":3021},[39,56264,50],{"class":45},[39,56266,54545],{"class":1319},[39,56268,52361],{"class":45},[39,56270,56271,56273,56275,56277,56279,56282],{"class":41,"line":17666},[39,56272,52395],{"class":45},[39,56274,52665],{"class":52354},[39,56276,54540],{"class":3021},[39,56278,50],{"class":45},[39,56280,56281],{"class":1319},"\"slider-wrapper\"",[39,56283,52361],{"class":45},[39,56285,56286,56289,56291,56294,56296,56299,56302,56304,56306],{"class":41,"line":17689},[39,56287,56288],{"class":45},"      \u003C",[39,56290,269],{"class":52354},[39,56292,56293],{"class":3021}," src",[39,56295,50],{"class":45},[39,56297,56298],{"class":1319},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[39,56300,56301],{"class":3021}," alt",[39,56303,50],{"class":45},[39,56305,8708],{"class":1319},[39,56307,52361],{"class":45},[39,56309,56310,56312,56314],{"class":41,"line":17695},[39,56311,52830],{"class":45},[39,56313,52665],{"class":52354},[39,56315,52361],{"class":45},[39,56317,56318,56320,56322,56324,56326,56329],{"class":41,"line":17718},[39,56319,52395],{"class":45},[39,56321,52665],{"class":52354},[39,56323,54540],{"class":3021},[39,56325,50],{"class":45},[39,56327,56328],{"class":1319},"\"slider-footer\"",[39,56330,52361],{"class":45},[39,56332,56333,56335,56337,56340,56342],{"class":41,"line":17732},[39,56334,56288],{"class":45},[39,56336,19],{"class":52354},[39,56338,56339],{"class":45},">对人类来说会不会太超前了?\u003C\u002F",[39,56341,19],{"class":52354},[39,56343,52361],{"class":45},[39,56345,56346,56348,56350],{"class":41,"line":17752},[39,56347,56288],{"class":45},[39,56349,2205],{"class":52354},[39,56351,52361],{"class":45},[39,56353,56354,56357,56359,56361,56363,56366,56369,56371],{"class":41,"line":17758},[39,56355,56356],{"class":45},"        \u003C",[39,56358,1174],{"class":52354},[39,56360,54540],{"class":3021},[39,56362,50],{"class":45},[39,56364,56365],{"class":1319},"\"activate\"",[39,56367,56368],{"class":45},">\u003C\u002F",[39,56370,1174],{"class":52354},[39,56372,52361],{"class":45},[39,56374,56375,56377,56379,56381,56383],{"class":41,"line":17769},[39,56376,56356],{"class":45},[39,56378,1174],{"class":52354},[39,56380,56368],{"class":45},[39,56382,1174],{"class":52354},[39,56384,52361],{"class":45},[39,56386,56387,56389,56391,56393,56395],{"class":41,"line":17792},[39,56388,56356],{"class":45},[39,56390,1174],{"class":52354},[39,56392,56368],{"class":45},[39,56394,1174],{"class":52354},[39,56396,52361],{"class":45},[39,56398,56399,56401,56403,56405,56407],{"class":41,"line":17814},[39,56400,56356],{"class":45},[39,56402,1174],{"class":52354},[39,56404,56368],{"class":45},[39,56406,1174],{"class":52354},[39,56408,52361],{"class":45},[39,56410,56411,56413,56415,56417,56419],{"class":41,"line":17819},[39,56412,56356],{"class":45},[39,56414,1174],{"class":52354},[39,56416,56368],{"class":45},[39,56418,1174],{"class":52354},[39,56420,52361],{"class":45},[39,56422,56423,56425,56427,56429,56431],{"class":41,"line":17825},[39,56424,56356],{"class":45},[39,56426,1174],{"class":52354},[39,56428,56368],{"class":45},[39,56430,1174],{"class":52354},[39,56432,52361],{"class":45},[39,56434,56435,56437,56439,56441,56443],{"class":41,"line":17839},[39,56436,56356],{"class":45},[39,56438,1174],{"class":52354},[39,56440,56368],{"class":45},[39,56442,1174],{"class":52354},[39,56444,52361],{"class":45},[39,56446,56447,56449,56451,56453,56455],{"class":41,"line":17852},[39,56448,56356],{"class":45},[39,56450,1174],{"class":52354},[39,56452,56368],{"class":45},[39,56454,1174],{"class":52354},[39,56456,52361],{"class":45},[39,56458,56459,56462,56464],{"class":41,"line":17857},[39,56460,56461],{"class":45},"      \u003C\u002F",[39,56463,2205],{"class":52354},[39,56465,52361],{"class":45},[39,56467,56468,56470,56472],{"class":41,"line":17871},[39,56469,52830],{"class":45},[39,56471,52665],{"class":52354},[39,56473,52361],{"class":45},[39,56475,56476,56478,56480],{"class":41,"line":17876},[39,56477,53471],{"class":45},[39,56479,52665],{"class":52354},[39,56481,52361],{"class":45},[39,56483,56484,56486,56488],{"class":41,"line":17882},[39,56485,53198],{"class":45},[39,56487,52867],{"class":52354},[39,56489,52361],{"class":45},[39,56491,56492,56494,56497,56499],{"class":41,"line":17887},[39,56493,12277],{"class":49},[39,56495,56496],{"class":56}," arrImage",[39,56498,14620],{"class":49},[39,56500,56501],{"class":45}," [\n",[39,56503,56504,56507,56510,56513,56516,56519,56522],{"class":41,"line":17901},[39,56505,56506],{"class":45},"      { url: ",[39,56508,56509],{"class":1319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[39,56511,56512],{"class":45},", title: ",[39,56514,56515],{"class":1319},"'对人类来说会不会太超前了?'",[39,56517,56518],{"class":45},", color: ",[39,56520,56521],{"class":1319},"'rgba(100,67,68)'",[39,56523,56524],{"class":45}," },\n",[39,56526,56527,56529,56532,56534,56537,56539,56542],{"class":41,"line":17906},[39,56528,56506],{"class":45},[39,56530,56531],{"class":1319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[39,56533,56512],{"class":45},[39,56535,56536],{"class":1319},"'开启剑与雪的黑暗传说!'",[39,56538,56518],{"class":45},[39,56540,56541],{"class":1319},"'rgba(43,35,26)'",[39,56543,56524],{"class":45},[39,56545,56546,56548,56551,56553,56556,56558,56561],{"class":41,"line":17911},[39,56547,56506],{"class":45},[39,56549,56550],{"class":1319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[39,56552,56512],{"class":45},[39,56554,56555],{"class":1319},"'真正的jo厨出现了!'",[39,56557,56518],{"class":45},[39,56559,56560],{"class":1319},"'rgba(36,31,33)'",[39,56562,56524],{"class":45},[39,56564,56565,56567,56570,56572,56575,56577,56580],{"class":41,"line":17925},[39,56566,56506],{"class":45},[39,56568,56569],{"class":1319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[39,56571,56512],{"class":45},[39,56573,56574],{"class":1319},"'李玉刚:让世界通过b站看到东方大国文化'",[39,56576,56518],{"class":45},[39,56578,56579],{"class":1319},"'rgba(139,98,66)'",[39,56581,56524],{"class":45},[39,56583,56584,56586,56589,56591,56594,56596,56599],{"class":41,"line":17937},[39,56585,56506],{"class":45},[39,56587,56588],{"class":1319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[39,56590,56512],{"class":45},[39,56592,56593],{"class":1319},"'快来分享你的寒假日常吧'",[39,56595,56518],{"class":45},[39,56597,56598],{"class":1319},"'rgba(67,90,92)'",[39,56600,56524],{"class":45},[39,56602,56603,56605,56608,56610,56613,56615,56618],{"class":41,"line":17942},[39,56604,56506],{"class":45},[39,56606,56607],{"class":1319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[39,56609,56512],{"class":45},[39,56611,56612],{"class":1319},"'哔哩哔哩小年YEAR'",[39,56614,56518],{"class":45},[39,56616,56617],{"class":1319},"'rgba(166,131,143)'",[39,56619,56524],{"class":45},[39,56621,56622,56624,56627,56629,56632,56634,56637],{"class":41,"line":17955},[39,56623,56506],{"class":45},[39,56625,56626],{"class":1319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[39,56628,56512],{"class":45},[39,56630,56631],{"class":1319},"'一站式解决你的电脑配置问题'",[39,56633,56518],{"class":45},[39,56635,56636],{"class":1319},"'rgba(53,29,25)'",[39,56638,56524],{"class":45},[39,56640,56641,56643,56646,56648,56651,56653,56656],{"class":41,"line":17960},[39,56642,56506],{"class":45},[39,56644,56645],{"class":1319},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[39,56647,56512],{"class":45},[39,56649,56650],{"class":1319},"'谁不想和小猫咪贴贴呢?'",[39,56652,56518],{"class":45},[39,56654,56655],{"class":1319},"'rgba(99,72,114)'",[39,56657,56658],{"class":45}," }\n",[39,56660,56661],{"class":41,"line":17965},[39,56662,54163],{"class":45},[39,56664,56665,56667,56670,56672,56674,56676,56678,56681],{"class":41,"line":17970},[39,56666,12277],{"class":49},[39,56668,56669],{"class":56}," img",[39,56671,14620],{"class":49},[39,56673,55450],{"class":45},[39,56675,55453],{"class":3021},[39,56677,1221],{"class":45},[39,56679,56680],{"class":1319},"'.slider-wrapper img'",[39,56682,209],{"class":45},[39,56684,56685,56687,56689,56691,56693,56695,56697,56700],{"class":41,"line":17983},[39,56686,12277],{"class":49},[39,56688,7881],{"class":56},[39,56690,14620],{"class":49},[39,56692,55450],{"class":45},[39,56694,55453],{"class":3021},[39,56696,1221],{"class":45},[39,56698,56699],{"class":1319},"'.slider-footer p'",[39,56701,209],{"class":45},[39,56703,56704,56706,56709,56711,56713,56715,56717,56720],{"class":41,"line":17988},[39,56705,12277],{"class":49},[39,56707,56708],{"class":56}," color",[39,56710,14620],{"class":49},[39,56712,55450],{"class":45},[39,56714,55453],{"class":3021},[39,56716,1221],{"class":45},[39,56718,56719],{"class":1319},"'.slider-footer'",[39,56721,209],{"class":45},[39,56723,56724,56726,56729,56731,56733,56736,56738,56741],{"class":41,"line":33688},[39,56725,12277],{"class":49},[39,56727,56728],{"class":56}," lis",[39,56730,14620],{"class":49},[39,56732,55450],{"class":45},[39,56734,56735],{"class":3021},"querySelectorAll",[39,56737,1221],{"class":45},[39,56739,56740],{"class":1319},"'.slider-footer ul li'",[39,56742,209],{"class":45},[39,56744,56745,56747,56749,56751],{"class":41,"line":33694},[39,56746,53273],{"class":49},[39,56748,10494],{"class":45},[39,56750,50],{"class":49},[39,56752,56753],{"class":56}," 1\n",[39,56755,56756,56758,56761,56763,56765,56767,56769],{"class":41,"line":33700},[39,56757,53273],{"class":49},[39,56759,56760],{"class":45}," timer ",[39,56762,50],{"class":49},[39,56764,55498],{"class":3021},[39,56766,1221],{"class":45},[39,56768,55503],{"class":49},[39,56770,55506],{"class":45},[39,56772,56773,56776,56778],{"class":41,"line":33706},[39,56774,56775],{"class":45},"      img.src ",[39,56777,50],{"class":49},[39,56779,56780],{"class":45}," arrImage[i].url\n",[39,56782,56783,56786,56788],{"class":41,"line":33712},[39,56784,56785],{"class":45},"      p.innerHTML ",[39,56787,50],{"class":49},[39,56789,56790],{"class":45}," arrImage[i].title\n",[39,56792,56793,56796,56798],{"class":41,"line":33723},[39,56794,56795],{"class":45},"      color.style.backgroundColor ",[39,56797,50],{"class":49},[39,56799,56800],{"class":45}," arrImage[i].color\n",[39,56802,56803],{"class":41,"line":33729},[39,56804,56805],{"class":102},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[39,56807,56808],{"class":41,"line":33749},[39,56809,56810],{"class":102},"      \u002F\u002F li.classList.add('activate')\n",[39,56812,56813],{"class":41,"line":33755},[39,56814,56815],{"class":102},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[39,56817,56818],{"class":41,"line":33766},[39,56819,56820],{"class":102},"      \u002F\u002F lis[i].classList.remove('activate')\n",[39,56822,56823,56826,56828,56830,56833,56836,56839,56841,56844],{"class":41,"line":33772},[39,56824,56825],{"class":45},"      document.",[39,56827,55453],{"class":3021},[39,56829,1221],{"class":45},[39,56831,56832],{"class":1319},"'.activate'",[39,56834,56835],{"class":45},")?.classList.",[39,56837,56838],{"class":3021},"toggle",[39,56840,1221],{"class":45},[39,56842,56843],{"class":1319},"'activate'",[39,56845,209],{"class":45},[39,56847,56848,56851,56853,56855,56857],{"class":41,"line":33778},[39,56849,56850],{"class":45},"      lis[i].classList.",[39,56852,6390],{"class":3021},[39,56854,1221],{"class":45},[39,56856,56843],{"class":1319},[39,56858,209],{"class":45},[39,56860,56861],{"class":41,"line":33784},[39,56862,3458],{"emptyLinePlaceholder":1145},[39,56864,56865,56868,56870,56872,56874,56876,56878,56880,56883],{"class":41,"line":33790},[39,56866,56867],{"class":45},"      i ",[39,56869,50],{"class":49},[39,56871,55537],{"class":45},[39,56873,1682],{"class":49},[39,56875,26175],{"class":56},[39,56877,14770],{"class":45},[39,56879,1534],{"class":49},[39,56881,56882],{"class":45}," arrImage.",[39,56884,56885],{"class":56},"length\n",[39,56887,56888],{"class":41,"line":33796},[39,56889,3458],{"emptyLinePlaceholder":1145},[39,56891,56892,56894,56896],{"class":41,"line":33802},[39,56893,55589],{"class":45},[39,56895,7466],{"class":56},[39,56897,209],{"class":45},[39,56899,56900,56902,56904],{"class":41,"line":33808},[39,56901,53471],{"class":45},[39,56903,52867],{"class":52354},[39,56905,52361],{"class":45},[39,56907,56908,56910,56912],{"class":41,"line":33828},[39,56909,52839],{"class":45},[39,56911,52854],{"class":52354},[39,56913,52361],{"class":45},[39,56915,56916],{"class":41,"line":33834},[39,56917,3458],{"emptyLinePlaceholder":1145},[39,56919,56920,56922,56924],{"class":41,"line":33850},[39,56921,52839],{"class":45},[39,56923,51689],{"class":52354},[39,56925,52361],{"class":45},[19,56927,56928],{},[269,56929],{"alt":34,"src":56930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56932,56933],{},"?.就是短路保护,确保输出正常进行",[19,56935,56936],{},"不要忘记取余%,有时候可以用",[19,56938,56939],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[1171,56941,56942],{"start":74},[1174,56943,56944],{},"法2",[29,56946,56948],{"className":51687,"code":56947,"language":51689,"meta":34,"style":34},"\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",[36,56949,56950,56960,56974,56978,56986,57000,57020,57032,57040,57046,57056,57066,57070,57074,57080,57090,57094,57098,57104,57114,57126,57138,57152,57156,57160,57166,57176,57186,57196,57208,57220,57230,57234,57238,57246,57256,57268,57280,57292,57296,57300,57306,57316,57328,57340,57350,57360,57370,57382,57394,57398,57402,57410,57422,57434,57460,57472,57476,57480,57486,57496,57500,57508,57516,57520,57528,57542,57556,57576,57584,57598,57610,57618,57636,57648,57660,57672,57684,57696,57708,57720,57728,57736,57744,57752,57763,57779,57795,57811,57827,57843,57859,57875,57891,57895,57900,57918,57936,57946,57951,57956,57967,57973,57988,57997,58001,58006,58015,58020,58029,58034,58039,58044,58067,58097,58101,58109,58113,58121,58129,58133],{"__ignoreMap":34},[39,56951,56952,56954,56956,56958],{"class":41,"line":42},[39,56953,52351],{"class":45},[39,56955,52355],{"class":52354},[39,56957,52358],{"class":3021},[39,56959,52361],{"class":45},[39,56961,56962,56964,56966,56968,56970,56972],{"class":41,"line":74},[39,56963,2108],{"class":45},[39,56965,51689],{"class":52354},[39,56967,52370],{"class":3021},[39,56969,50],{"class":45},[39,56971,52375],{"class":1319},[39,56973,52361],{"class":45},[39,56975,56976],{"class":41,"line":99},[39,56977,3458],{"emptyLinePlaceholder":1145},[39,56979,56980,56982,56984],{"class":41,"line":106},[39,56981,2108],{"class":45},[39,56983,52388],{"class":52354},[39,56985,52361],{"class":45},[39,56987,56988,56990,56992,56994,56996,56998],{"class":41,"line":112},[39,56989,53198],{"class":45},[39,56991,52398],{"class":52354},[39,56993,52401],{"class":3021},[39,56995,50],{"class":45},[39,56997,52406],{"class":1319},[39,56999,52361],{"class":45},[39,57001,57002,57004,57006,57008,57010,57012,57014,57016,57018],{"class":41,"line":118},[39,57003,53198],{"class":45},[39,57005,52398],{"class":52354},[39,57007,15976],{"class":3021},[39,57009,50],{"class":45},[39,57011,52445],{"class":1319},[39,57013,52425],{"class":3021},[39,57015,50],{"class":45},[39,57017,52452],{"class":1319},[39,57019,52361],{"class":45},[39,57021,57022,57024,57026,57028,57030],{"class":41,"line":413},[39,57023,53198],{"class":45},[39,57025,52461],{"class":52354},[39,57027,52464],{"class":45},[39,57029,52461],{"class":52354},[39,57031,52361],{"class":45},[39,57033,57034,57036,57038],{"class":41,"line":419},[39,57035,53198],{"class":45},[39,57037,1133],{"class":52354},[39,57039,52361],{"class":45},[39,57041,57042,57044],{"class":41,"line":425},[39,57043,7459],{"class":52354},[39,57045,16628],{"class":45},[39,57047,57048,57050,57052,57054],{"class":41,"line":443},[39,57049,55749],{"class":56},[39,57051,52491],{"class":45},[39,57053,260],{"class":56},[39,57055,2359],{"class":45},[39,57057,57058,57060,57062,57064],{"class":41,"line":449},[39,57059,55760],{"class":56},[39,57061,52491],{"class":45},[39,57063,260],{"class":56},[39,57065,2359],{"class":45},[39,57067,57068],{"class":41,"line":455},[39,57069,3245],{"class":45},[39,57071,57072],{"class":41,"line":461},[39,57073,3458],{"emptyLinePlaceholder":1145},[39,57075,57076,57078],{"class":41,"line":475},[39,57077,55779],{"class":52354},[39,57079,16628],{"class":45},[39,57081,57082,57084,57086,57088],{"class":41,"line":665},[39,57083,55786],{"class":56},[39,57085,52491],{"class":45},[39,57087,55791],{"class":56},[39,57089,2359],{"class":45},[39,57091,57092],{"class":41,"line":671},[39,57093,3245],{"class":45},[39,57095,57096],{"class":41,"line":684},[39,57097,3458],{"emptyLinePlaceholder":1145},[39,57099,57100,57102],{"class":41,"line":2732},[39,57101,55806],{"class":3021},[39,57103,16628],{"class":45},[39,57105,57106,57108,57110,57112],{"class":41,"line":2737},[39,57107,55813],{"class":56},[39,57109,52491],{"class":45},[39,57111,55818],{"class":56},[39,57113,2359],{"class":45},[39,57115,57116,57118,57120,57122,57124],{"class":41,"line":2751},[39,57117,55825],{"class":56},[39,57119,52491],{"class":45},[39,57121,55830],{"class":56},[39,57123,52546],{"class":49},[39,57125,2359],{"class":45},[39,57127,57128,57130,57132,57134,57136],{"class":41,"line":2756},[39,57129,55839],{"class":56},[39,57131,52491],{"class":45},[39,57133,2604],{"class":56},[39,57135,52546],{"class":49},[39,57137,2359],{"class":45},[39,57139,57140,57142,57144,57146,57148,57150],{"class":41,"line":2785},[39,57141,55760],{"class":56},[39,57143,52491],{"class":45},[39,57145,1519],{"class":56},[39,57147,52546],{"class":49},[39,57149,52610],{"class":56},[39,57151,2359],{"class":45},[39,57153,57154],{"class":41,"line":2790},[39,57155,3245],{"class":45},[39,57157,57158],{"class":41,"line":2807},[39,57159,3458],{"emptyLinePlaceholder":1145},[39,57161,57162,57164],{"class":41,"line":2812},[39,57163,55874],{"class":3021},[39,57165,16628],{"class":45},[39,57167,57168,57170,57172,57174],{"class":41,"line":2817},[39,57169,55813],{"class":56},[39,57171,52491],{"class":45},[39,57173,55885],{"class":56},[39,57175,2359],{"class":45},[39,57177,57178,57180,57182,57184],{"class":41,"line":2822},[39,57179,55892],{"class":56},[39,57181,52491],{"class":45},[39,57183,260],{"class":56},[39,57185,2359],{"class":45},[39,57187,57188,57190,57192,57194],{"class":41,"line":2836},[39,57189,55903],{"class":56},[39,57191,52491],{"class":45},[39,57193,260],{"class":56},[39,57195,2359],{"class":45},[39,57197,57198,57200,57202,57204,57206],{"class":41,"line":2841},[39,57199,55825],{"class":56},[39,57201,52491],{"class":45},[39,57203,1519],{"class":56},[39,57205,1534],{"class":49},[39,57207,2359],{"class":45},[39,57209,57210,57212,57214,57216,57218],{"class":41,"line":3635},[39,57211,55839],{"class":56},[39,57213,52491],{"class":45},[39,57215,1775],{"class":56},[39,57217,1534],{"class":49},[39,57219,2359],{"class":45},[39,57221,57222,57224,57226,57228],{"class":41,"line":3649},[39,57223,55938],{"class":56},[39,57225,52491],{"class":45},[39,57227,55943],{"class":56},[39,57229,2359],{"class":45},[39,57231,57232],{"class":41,"line":3657},[39,57233,3245],{"class":45},[39,57235,57236],{"class":41,"line":3662},[39,57237,3458],{"emptyLinePlaceholder":1145},[39,57239,57240,57242,57244],{"class":41,"line":3668},[39,57241,55874],{"class":3021},[39,57243,7881],{"class":52354},[39,57245,16628],{"class":45},[39,57247,57248,57250,57252,57254],{"class":41,"line":3674},[39,57249,55813],{"class":56},[39,57251,52491],{"class":45},[39,57253,55885],{"class":56},[39,57255,2359],{"class":45},[39,57257,57258,57260,57262,57264,57266],{"class":41,"line":3679},[39,57259,55976],{"class":56},[39,57261,52491],{"class":45},[39,57263,2099],{"class":56},[39,57265,52546],{"class":49},[39,57267,2359],{"class":45},[39,57269,57270,57272,57274,57276,57278],{"class":41,"line":9004},[39,57271,55892],{"class":56},[39,57273,52491],{"class":45},[39,57275,1898],{"class":56},[39,57277,52546],{"class":49},[39,57279,2359],{"class":45},[39,57281,57282,57284,57286,57288,57290],{"class":41,"line":9028},[39,57283,56001],{"class":56},[39,57285,52491],{"class":45},[39,57287,89],{"class":56},[39,57289,52546],{"class":49},[39,57291,2359],{"class":45},[39,57293,57294],{"class":41,"line":9033},[39,57295,3245],{"class":45},[39,57297,57298],{"class":41,"line":9039},[39,57299,3458],{"emptyLinePlaceholder":1145},[39,57301,57302,57304],{"class":41,"line":9066},[39,57303,56022],{"class":52354},[39,57305,16628],{"class":45},[39,57307,57308,57310,57312,57314],{"class":41,"line":9071},[39,57309,55813],{"class":56},[39,57311,52491],{"class":45},[39,57313,55885],{"class":56},[39,57315,2359],{"class":45},[39,57317,57318,57320,57322,57324,57326],{"class":41,"line":9077},[39,57319,56001],{"class":56},[39,57321,52491],{"class":45},[39,57323,1979],{"class":56},[39,57325,52546],{"class":49},[39,57327,2359],{"class":45},[39,57329,57330,57332,57334,57336,57338],{"class":41,"line":9089},[39,57331,55892],{"class":56},[39,57333,52491],{"class":45},[39,57335,1898],{"class":56},[39,57337,52546],{"class":49},[39,57339,2359],{"class":45},[39,57341,57342,57344,57346,57348],{"class":41,"line":9101},[39,57343,56063],{"class":56},[39,57345,52491],{"class":45},[39,57347,52531],{"class":56},[39,57349,2359],{"class":45},[39,57351,57352,57354,57356,57358],{"class":41,"line":9113},[39,57353,56074],{"class":56},[39,57355,52491],{"class":45},[39,57357,52722],{"class":56},[39,57359,2359],{"class":45},[39,57361,57362,57364,57366,57368],{"class":41,"line":10772},[39,57363,55813],{"class":56},[39,57365,52491],{"class":45},[39,57367,55885],{"class":56},[39,57369,2359],{"class":45},[39,57371,57372,57374,57376,57378,57380],{"class":41,"line":10797},[39,57373,55825],{"class":56},[39,57375,52491],{"class":45},[39,57377,5050],{"class":56},[39,57379,52546],{"class":49},[39,57381,2359],{"class":45},[39,57383,57384,57386,57388,57390,57392],{"class":41,"line":10820},[39,57385,55839],{"class":56},[39,57387,52491],{"class":45},[39,57389,1898],{"class":56},[39,57391,52546],{"class":49},[39,57393,2359],{"class":45},[39,57395,57396],{"class":41,"line":10844},[39,57397,3245],{"class":45},[39,57399,57400],{"class":41,"line":10849},[39,57401,3458],{"emptyLinePlaceholder":1145},[39,57403,57404,57406,57408],{"class":41,"line":10854},[39,57405,56022],{"class":52354},[39,57407,56129],{"class":52354},[39,57409,16628],{"class":45},[39,57411,57412,57414,57416,57418,57420],{"class":41,"line":10859},[39,57413,55825],{"class":56},[39,57415,52491],{"class":45},[39,57417,1898],{"class":56},[39,57419,52546],{"class":49},[39,57421,2359],{"class":45},[39,57423,57424,57426,57428,57430,57432],{"class":41,"line":10868},[39,57425,55839],{"class":56},[39,57427,52491],{"class":45},[39,57429,1898],{"class":56},[39,57431,52546],{"class":49},[39,57433,2359],{"class":45},[39,57435,57436,57438,57440,57442,57444,57446,57448,57450,57452,57454,57456,57458],{"class":41,"line":10873},[39,57437,55938],{"class":56},[39,57439,52491],{"class":45},[39,57441,56164],{"class":56},[39,57443,1221],{"class":45},[39,57445,260],{"class":56},[39,57447,13491],{"class":45},[39,57449,260],{"class":56},[39,57451,13491],{"class":45},[39,57453,260],{"class":56},[39,57455,13491],{"class":45},[39,57457,56181],{"class":56},[39,57459,3777],{"class":45},[39,57461,57462,57464,57466,57468,57470],{"class":41,"line":10879},[39,57463,56188],{"class":56},[39,57465,52491],{"class":45},[39,57467,146],{"class":56},[39,57469,52546],{"class":49},[39,57471,2359],{"class":45},[39,57473,57474],{"class":41,"line":10900},[39,57475,3245],{"class":45},[39,57477,57478],{"class":41,"line":10906},[39,57479,3458],{"emptyLinePlaceholder":1145},[39,57481,57482,57484],{"class":41,"line":10920},[39,57483,56209],{"class":3021},[39,57485,16628],{"class":45},[39,57487,57488,57490,57492,57494],{"class":41,"line":10926},[39,57489,55938],{"class":56},[39,57491,52491],{"class":45},[39,57493,56220],{"class":56},[39,57495,2359],{"class":45},[39,57497,57498],{"class":41,"line":10953},[39,57499,3245],{"class":45},[39,57501,57502,57504,57506],{"class":41,"line":10962},[39,57503,53471],{"class":45},[39,57505,1133],{"class":52354},[39,57507,52361],{"class":45},[39,57509,57510,57512,57514],{"class":41,"line":10968},[39,57511,52839],{"class":45},[39,57513,52388],{"class":52354},[39,57515,52361],{"class":45},[39,57517,57518],{"class":41,"line":10976},[39,57519,3458],{"emptyLinePlaceholder":1145},[39,57521,57522,57524,57526],{"class":41,"line":10981},[39,57523,2108],{"class":45},[39,57525,52854],{"class":52354},[39,57527,52361],{"class":45},[39,57529,57530,57532,57534,57536,57538,57540],{"class":41,"line":17660},[39,57531,53198],{"class":45},[39,57533,52665],{"class":52354},[39,57535,54540],{"class":3021},[39,57537,50],{"class":45},[39,57539,54545],{"class":1319},[39,57541,52361],{"class":45},[39,57543,57544,57546,57548,57550,57552,57554],{"class":41,"line":17666},[39,57545,52395],{"class":45},[39,57547,52665],{"class":52354},[39,57549,54540],{"class":3021},[39,57551,50],{"class":45},[39,57553,56281],{"class":1319},[39,57555,52361],{"class":45},[39,57557,57558,57560,57562,57564,57566,57568,57570,57572,57574],{"class":41,"line":17689},[39,57559,56288],{"class":45},[39,57561,269],{"class":52354},[39,57563,56293],{"class":3021},[39,57565,50],{"class":45},[39,57567,56298],{"class":1319},[39,57569,56301],{"class":3021},[39,57571,50],{"class":45},[39,57573,8708],{"class":1319},[39,57575,52361],{"class":45},[39,57577,57578,57580,57582],{"class":41,"line":17695},[39,57579,52830],{"class":45},[39,57581,52665],{"class":52354},[39,57583,52361],{"class":45},[39,57585,57586,57588,57590,57592,57594,57596],{"class":41,"line":17718},[39,57587,52395],{"class":45},[39,57589,52665],{"class":52354},[39,57591,54540],{"class":3021},[39,57593,50],{"class":45},[39,57595,56328],{"class":1319},[39,57597,52361],{"class":45},[39,57599,57600,57602,57604,57606,57608],{"class":41,"line":17732},[39,57601,56288],{"class":45},[39,57603,19],{"class":52354},[39,57605,56339],{"class":45},[39,57607,19],{"class":52354},[39,57609,52361],{"class":45},[39,57611,57612,57614,57616],{"class":41,"line":17752},[39,57613,56288],{"class":45},[39,57615,2205],{"class":52354},[39,57617,52361],{"class":45},[39,57619,57620,57622,57624,57626,57628,57630,57632,57634],{"class":41,"line":17758},[39,57621,56356],{"class":45},[39,57623,1174],{"class":52354},[39,57625,54540],{"class":3021},[39,57627,50],{"class":45},[39,57629,56365],{"class":1319},[39,57631,56368],{"class":45},[39,57633,1174],{"class":52354},[39,57635,52361],{"class":45},[39,57637,57638,57640,57642,57644,57646],{"class":41,"line":17769},[39,57639,56356],{"class":45},[39,57641,1174],{"class":52354},[39,57643,56368],{"class":45},[39,57645,1174],{"class":52354},[39,57647,52361],{"class":45},[39,57649,57650,57652,57654,57656,57658],{"class":41,"line":17792},[39,57651,56356],{"class":45},[39,57653,1174],{"class":52354},[39,57655,56368],{"class":45},[39,57657,1174],{"class":52354},[39,57659,52361],{"class":45},[39,57661,57662,57664,57666,57668,57670],{"class":41,"line":17814},[39,57663,56356],{"class":45},[39,57665,1174],{"class":52354},[39,57667,56368],{"class":45},[39,57669,1174],{"class":52354},[39,57671,52361],{"class":45},[39,57673,57674,57676,57678,57680,57682],{"class":41,"line":17819},[39,57675,56356],{"class":45},[39,57677,1174],{"class":52354},[39,57679,56368],{"class":45},[39,57681,1174],{"class":52354},[39,57683,52361],{"class":45},[39,57685,57686,57688,57690,57692,57694],{"class":41,"line":17825},[39,57687,56356],{"class":45},[39,57689,1174],{"class":52354},[39,57691,56368],{"class":45},[39,57693,1174],{"class":52354},[39,57695,52361],{"class":45},[39,57697,57698,57700,57702,57704,57706],{"class":41,"line":17839},[39,57699,56356],{"class":45},[39,57701,1174],{"class":52354},[39,57703,56368],{"class":45},[39,57705,1174],{"class":52354},[39,57707,52361],{"class":45},[39,57709,57710,57712,57714,57716,57718],{"class":41,"line":17852},[39,57711,56356],{"class":45},[39,57713,1174],{"class":52354},[39,57715,56368],{"class":45},[39,57717,1174],{"class":52354},[39,57719,52361],{"class":45},[39,57721,57722,57724,57726],{"class":41,"line":17857},[39,57723,56461],{"class":45},[39,57725,2205],{"class":52354},[39,57727,52361],{"class":45},[39,57729,57730,57732,57734],{"class":41,"line":17871},[39,57731,52830],{"class":45},[39,57733,52665],{"class":52354},[39,57735,52361],{"class":45},[39,57737,57738,57740,57742],{"class":41,"line":17876},[39,57739,53471],{"class":45},[39,57741,52665],{"class":52354},[39,57743,52361],{"class":45},[39,57745,57746,57748,57750],{"class":41,"line":17882},[39,57747,53198],{"class":45},[39,57749,52867],{"class":52354},[39,57751,52361],{"class":45},[39,57753,57754,57756,57759,57761],{"class":41,"line":17887},[39,57755,12277],{"class":49},[39,57757,57758],{"class":56}," sliderData",[39,57760,14620],{"class":49},[39,57762,56501],{"class":45},[39,57764,57765,57767,57769,57771,57773,57775,57777],{"class":41,"line":17901},[39,57766,56506],{"class":45},[39,57768,56509],{"class":1319},[39,57770,56512],{"class":45},[39,57772,56515],{"class":1319},[39,57774,56518],{"class":45},[39,57776,56521],{"class":1319},[39,57778,56524],{"class":45},[39,57780,57781,57783,57785,57787,57789,57791,57793],{"class":41,"line":17906},[39,57782,56506],{"class":45},[39,57784,56531],{"class":1319},[39,57786,56512],{"class":45},[39,57788,56536],{"class":1319},[39,57790,56518],{"class":45},[39,57792,56541],{"class":1319},[39,57794,56524],{"class":45},[39,57796,57797,57799,57801,57803,57805,57807,57809],{"class":41,"line":17911},[39,57798,56506],{"class":45},[39,57800,56550],{"class":1319},[39,57802,56512],{"class":45},[39,57804,56555],{"class":1319},[39,57806,56518],{"class":45},[39,57808,56560],{"class":1319},[39,57810,56524],{"class":45},[39,57812,57813,57815,57817,57819,57821,57823,57825],{"class":41,"line":17925},[39,57814,56506],{"class":45},[39,57816,56569],{"class":1319},[39,57818,56512],{"class":45},[39,57820,56574],{"class":1319},[39,57822,56518],{"class":45},[39,57824,56579],{"class":1319},[39,57826,56524],{"class":45},[39,57828,57829,57831,57833,57835,57837,57839,57841],{"class":41,"line":17937},[39,57830,56506],{"class":45},[39,57832,56588],{"class":1319},[39,57834,56512],{"class":45},[39,57836,56593],{"class":1319},[39,57838,56518],{"class":45},[39,57840,56598],{"class":1319},[39,57842,56524],{"class":45},[39,57844,57845,57847,57849,57851,57853,57855,57857],{"class":41,"line":17942},[39,57846,56506],{"class":45},[39,57848,56607],{"class":1319},[39,57850,56512],{"class":45},[39,57852,56612],{"class":1319},[39,57854,56518],{"class":45},[39,57856,56617],{"class":1319},[39,57858,56524],{"class":45},[39,57860,57861,57863,57865,57867,57869,57871,57873],{"class":41,"line":17955},[39,57862,56506],{"class":45},[39,57864,56626],{"class":1319},[39,57866,56512],{"class":45},[39,57868,56631],{"class":1319},[39,57870,56518],{"class":45},[39,57872,56636],{"class":1319},[39,57874,56524],{"class":45},[39,57876,57877,57879,57881,57883,57885,57887,57889],{"class":41,"line":17960},[39,57878,56506],{"class":45},[39,57880,56645],{"class":1319},[39,57882,56512],{"class":45},[39,57884,56650],{"class":1319},[39,57886,56518],{"class":45},[39,57888,56655],{"class":1319},[39,57890,56658],{"class":45},[39,57892,57893],{"class":41,"line":17965},[39,57894,54163],{"class":45},[39,57896,57897],{"class":41,"line":17970},[39,57898,57899],{"class":102},"    \u002F\u002F 1.获取元素\n",[39,57901,57902,57904,57906,57908,57910,57912,57914,57916],{"class":41,"line":17983},[39,57903,12277],{"class":49},[39,57905,56669],{"class":56},[39,57907,14620],{"class":49},[39,57909,55450],{"class":45},[39,57911,55453],{"class":3021},[39,57913,1221],{"class":45},[39,57915,56680],{"class":1319},[39,57917,209],{"class":45},[39,57919,57920,57922,57924,57926,57928,57930,57932,57934],{"class":41,"line":17988},[39,57921,12277],{"class":49},[39,57923,7881],{"class":56},[39,57925,14620],{"class":49},[39,57927,55450],{"class":45},[39,57929,55453],{"class":3021},[39,57931,1221],{"class":45},[39,57933,56699],{"class":1319},[39,57935,209],{"class":45},[39,57937,57938,57940,57942,57944],{"class":41,"line":33688},[39,57939,53273],{"class":49},[39,57941,10494],{"class":45},[39,57943,50],{"class":49},[39,57945,48388],{"class":56},[39,57947,57948],{"class":41,"line":33694},[39,57949,57950],{"class":102},"    \u002F\u002F 2.开启定时器\n",[39,57952,57953],{"class":41,"line":33700},[39,57954,57955],{"class":102},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[39,57957,57958,57961,57963,57965],{"class":41,"line":33706},[39,57959,57960],{"class":3021},"    setInterval",[39,57962,1221],{"class":45},[39,57964,55503],{"class":49},[39,57966,55506],{"class":45},[39,57968,57969,57971],{"class":41,"line":33712},[39,57970,55511],{"class":45},[39,57972,3760],{"class":49},[39,57974,57975,57977,57979,57981,57984,57986],{"class":41,"line":33723},[39,57976,55534],{"class":49},[39,57978,55537],{"class":45},[39,57980,2768],{"class":49},[39,57982,57983],{"class":45}," sliderData.",[39,57985,53022],{"class":56},[39,57987,13498],{"class":45},[39,57989,57990,57993,57995],{"class":41,"line":33729},[39,57991,57992],{"class":45},"        i ",[39,57994,50],{"class":49},[39,57996,48388],{"class":56},[39,57998,57999],{"class":41,"line":33749},[39,58000,53452],{"class":45},[39,58002,58003],{"class":41,"line":33755},[39,58004,58005],{"class":102},"      \u002F\u002F 更换图片路径\n",[39,58007,58008,58010,58012],{"class":41,"line":33766},[39,58009,56775],{"class":45},[39,58011,50],{"class":49},[39,58013,58014],{"class":45}," sliderData[i].url\n",[39,58016,58017],{"class":41,"line":33772},[39,58018,58019],{"class":102},"      \u002F\u002F 把文字写到p里面\n",[39,58021,58022,58024,58026],{"class":41,"line":33778},[39,58023,56785],{"class":45},[39,58025,50],{"class":49},[39,58027,58028],{"class":45}," sliderData[i].title\n",[39,58030,58031],{"class":41,"line":33784},[39,58032,58033],{"class":102},"      \u002F\u002F 小圆点\n",[39,58035,58036],{"class":41,"line":33790},[39,58037,58038],{"class":102},"      \u002F\u002F 先删除以前的active\n",[39,58040,58041],{"class":41,"line":33796},[39,58042,58043],{"class":102},"      \u002F\u002F 只让当前li添加active\n",[39,58045,58046,58048,58050,58052,58055,58058,58061,58063,58065],{"class":41,"line":33802},[39,58047,56825],{"class":45},[39,58049,55453],{"class":3021},[39,58051,1221],{"class":45},[39,58053,58054],{"class":1319},"'.slider-footer .activate'",[39,58056,58057],{"class":45},").classList.",[39,58059,58060],{"class":3021},"remove",[39,58062,1221],{"class":45},[39,58064,56843],{"class":1319},[39,58066,209],{"class":45},[39,58068,58069,58071,58073,58075,58078,58080,58082,58084,58087,58089,58091,58093,58095],{"class":41,"line":33808},[39,58070,56825],{"class":45},[39,58072,55453],{"class":3021},[39,58074,1221],{"class":45},[39,58076,58077],{"class":1319},"`.slider-footer ul li:nth-child(${",[39,58079,1644],{"class":45},[39,58081,46621],{"class":49},[39,58083,26175],{"class":56},[39,58085,58086],{"class":1319},"})`",[39,58088,58057],{"class":45},[39,58090,6390],{"class":3021},[39,58092,1221],{"class":45},[39,58094,56843],{"class":1319},[39,58096,209],{"class":45},[39,58098,58099],{"class":41,"line":33828},[39,58100,3458],{"emptyLinePlaceholder":1145},[39,58102,58103,58105,58107],{"class":41,"line":33834},[39,58104,55589],{"class":45},[39,58106,7466],{"class":56},[39,58108,209],{"class":45},[39,58110,58111],{"class":41,"line":33850},[39,58112,3458],{"emptyLinePlaceholder":1145},[39,58114,58115,58117,58119],{"class":41,"line":33856},[39,58116,53471],{"class":45},[39,58118,52867],{"class":52354},[39,58120,52361],{"class":45},[39,58122,58123,58125,58127],{"class":41,"line":33870},[39,58124,52839],{"class":45},[39,58126,52854],{"class":52354},[39,58128,52361],{"class":45},[39,58130,58131],{"class":41,"line":33876},[39,58132,3458],{"emptyLinePlaceholder":1145},[39,58134,58135,58137,58139],{"class":41,"line":33891},[39,58136,52839],{"class":45},[39,58138,51689],{"class":52354},[39,58140,52361],{"class":45},[1188,58142,58144],{"id":58143},"_317-重要知识点","3.1.7 重要知识点",[19,58146,58147,58148],{},"浏览器在渲染文本时， ",[304,58149,58150],{},"没有空格或换行符就没有“断行点”",[19,58152,58153],{},[269,58154],{"alt":34,"src":58155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,58157,58158],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,58160,58161],{},[269,58162],{"alt":34,"src":58163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,58165,58166],{},[269,58167],{"alt":34,"src":58168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58170,58172],{"id":58171},"_32-dom事件基础","3.2 DOM事件基础",[1188,58174,58176],{"id":58175},"_321-事件监听","3.2.1 事件监听",[19,58178,58179],{},[269,58180],{"alt":34,"src":58181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,58183,58184],{},"事件监听有响应的发生",[19,58186,58187],{},[269,58188],{"alt":34,"src":58189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,58191,58192],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,58194,58195],{},"对于有名函数,要执行的函数名后边不要加()",[1188,58197,58199],{"id":58198},"_322-随机点名案例","3.2.2 随机点名案例",[29,58201,58203],{"className":51687,"code":58202,"language":51689,"meta":34,"style":34},"\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",[36,58204,58205,58215,58229,58233,58241,58255,58275,58287,58295,58301,58311,58321,58325,58329,58336,58347,58351,58355,58361,58373,58387,58397,58409,58422,58426,58430,58437,58441,58454,58466,58478,58482,58486,58490,58497,58507,58511,58515,58524,58536,58548,58563,58567,58575,58583,58587,58595,58608,58622,58635,58655,58663,58678,58698,58718,58726,58730,58738,58743,58779,58799,58804,58823,58828,58839,58844,58855,58860,58879,58894,58899,58925,58935,58944,58949,58965,58970,58975,58980,58995,58999,59003,59008,59027,59044,59052,59057,59072,59076,59080,59088,59096,59100],{"__ignoreMap":34},[39,58206,58207,58209,58211,58213],{"class":41,"line":42},[39,58208,52351],{"class":45},[39,58210,52355],{"class":52354},[39,58212,52358],{"class":3021},[39,58214,52361],{"class":45},[39,58216,58217,58219,58221,58223,58225,58227],{"class":41,"line":74},[39,58218,2108],{"class":45},[39,58220,51689],{"class":52354},[39,58222,52370],{"class":3021},[39,58224,50],{"class":45},[39,58226,52375],{"class":1319},[39,58228,52361],{"class":45},[39,58230,58231],{"class":41,"line":99},[39,58232,3458],{"emptyLinePlaceholder":1145},[39,58234,58235,58237,58239],{"class":41,"line":106},[39,58236,2108],{"class":45},[39,58238,52388],{"class":52354},[39,58240,52361],{"class":45},[39,58242,58243,58245,58247,58249,58251,58253],{"class":41,"line":112},[39,58244,53198],{"class":45},[39,58246,52398],{"class":52354},[39,58248,52401],{"class":3021},[39,58250,50],{"class":45},[39,58252,52406],{"class":1319},[39,58254,52361],{"class":45},[39,58256,58257,58259,58261,58263,58265,58267,58269,58271,58273],{"class":41,"line":118},[39,58258,53198],{"class":45},[39,58260,52398],{"class":52354},[39,58262,15976],{"class":3021},[39,58264,50],{"class":45},[39,58266,52445],{"class":1319},[39,58268,52425],{"class":3021},[39,58270,50],{"class":45},[39,58272,52452],{"class":1319},[39,58274,52361],{"class":45},[39,58276,58277,58279,58281,58283,58285],{"class":41,"line":413},[39,58278,53198],{"class":45},[39,58280,52461],{"class":52354},[39,58282,52464],{"class":45},[39,58284,52461],{"class":52354},[39,58286,52361],{"class":45},[39,58288,58289,58291,58293],{"class":41,"line":419},[39,58290,53198],{"class":45},[39,58292,1133],{"class":52354},[39,58294,52361],{"class":45},[39,58296,58297,58299],{"class":41,"line":425},[39,58298,7459],{"class":52354},[39,58300,16628],{"class":45},[39,58302,58303,58305,58307,58309],{"class":41,"line":443},[39,58304,55760],{"class":56},[39,58306,52491],{"class":45},[39,58308,260],{"class":56},[39,58310,2359],{"class":45},[39,58312,58313,58315,58317,58319],{"class":41,"line":449},[39,58314,55749],{"class":56},[39,58316,52491],{"class":45},[39,58318,260],{"class":56},[39,58320,2359],{"class":45},[39,58322,58323],{"class":41,"line":455},[39,58324,3245],{"class":45},[39,58326,58327],{"class":41,"line":461},[39,58328,3458],{"emptyLinePlaceholder":1145},[39,58330,58331,58334],{"class":41,"line":475},[39,58332,58333],{"class":52354},"    h2",[39,58335,16628],{"class":45},[39,58337,58338,58341,58343,58345],{"class":41,"line":665},[39,58339,58340],{"class":56},"      text-align",[39,58342,52491],{"class":45},[39,58344,52646],{"class":56},[39,58346,2359],{"class":45},[39,58348,58349],{"class":41,"line":671},[39,58350,3245],{"class":45},[39,58352,58353],{"class":41,"line":684},[39,58354,3458],{"emptyLinePlaceholder":1145},[39,58356,58357,58359],{"class":41,"line":2732},[39,58358,55806],{"class":3021},[39,58360,16628],{"class":45},[39,58362,58363,58365,58367,58369,58371],{"class":41,"line":2737},[39,58364,55825],{"class":56},[39,58366,52491],{"class":45},[39,58368,2604],{"class":56},[39,58370,52546],{"class":49},[39,58372,2359],{"class":45},[39,58374,58375,58377,58379,58381,58383,58385],{"class":41,"line":2751},[39,58376,55760],{"class":56},[39,58378,52491],{"class":45},[39,58380,1855],{"class":56},[39,58382,52546],{"class":49},[39,58384,52610],{"class":56},[39,58386,2359],{"class":45},[39,58388,58389,58391,58393,58395],{"class":41,"line":2756},[39,58390,56063],{"class":56},[39,58392,52491],{"class":45},[39,58394,52531],{"class":56},[39,58396,2359],{"class":45},[39,58398,58399,58401,58403,58405,58407],{"class":41,"line":2785},[39,58400,55976],{"class":56},[39,58402,52491],{"class":45},[39,58404,2023],{"class":56},[39,58406,52546],{"class":49},[39,58408,2359],{"class":45},[39,58410,58411,58414,58416,58418,58420],{"class":41,"line":2790},[39,58412,58413],{"class":56},"      line-height",[39,58415,52491],{"class":45},[39,58417,1604],{"class":56},[39,58419,52546],{"class":49},[39,58421,2359],{"class":45},[39,58423,58424],{"class":41,"line":2807},[39,58425,3245],{"class":45},[39,58427,58428],{"class":41,"line":2812},[39,58429,3458],{"emptyLinePlaceholder":1145},[39,58431,58432,58435],{"class":41,"line":2817},[39,58433,58434],{"class":3021},"    .qs",[39,58436,16628],{"class":45},[39,58438,58439],{"class":41,"line":2822},[39,58440,3458],{"emptyLinePlaceholder":1145},[39,58442,58443,58445,58447,58450,58452],{"class":41,"line":2836},[39,58444,55825],{"class":56},[39,58446,52491],{"class":45},[39,58448,58449],{"class":56},"450",[39,58451,52546],{"class":49},[39,58453,2359],{"class":45},[39,58455,58456,58458,58460,58462,58464],{"class":41,"line":2841},[39,58457,55839],{"class":56},[39,58459,52491],{"class":45},[39,58461,1604],{"class":56},[39,58463,52546],{"class":49},[39,58465,2359],{"class":45},[39,58467,58468,58471,58473,58476],{"class":41,"line":3635},[39,58469,58470],{"class":56},"      color",[39,58472,52491],{"class":45},[39,58474,58475],{"class":56},"red",[39,58477,2359],{"class":45},[39,58479,58480],{"class":41,"line":3649},[39,58481,3458],{"emptyLinePlaceholder":1145},[39,58483,58484],{"class":41,"line":3657},[39,58485,3245],{"class":45},[39,58487,58488],{"class":41,"line":3662},[39,58489,3458],{"emptyLinePlaceholder":1145},[39,58491,58492,58495],{"class":41,"line":3668},[39,58493,58494],{"class":3021},"    .btns",[39,58496,16628],{"class":45},[39,58498,58499,58501,58503,58505],{"class":41,"line":3674},[39,58500,58340],{"class":56},[39,58502,52491],{"class":45},[39,58504,52646],{"class":56},[39,58506,2359],{"class":45},[39,58508,58509],{"class":41,"line":3679},[39,58510,3245],{"class":45},[39,58512,58513],{"class":41,"line":9004},[39,58514,3458],{"emptyLinePlaceholder":1145},[39,58516,58517,58519,58522],{"class":41,"line":9028},[39,58518,58494],{"class":3021},[39,58520,58521],{"class":52354}," button",[39,58523,16628],{"class":45},[39,58525,58526,58528,58530,58532,58534],{"class":41,"line":9033},[39,58527,55825],{"class":56},[39,58529,52491],{"class":45},[39,58531,2015],{"class":56},[39,58533,52546],{"class":49},[39,58535,2359],{"class":45},[39,58537,58538,58540,58542,58544,58546],{"class":41,"line":9039},[39,58539,55839],{"class":56},[39,58541,52491],{"class":45},[39,58543,1483],{"class":56},[39,58545,52546],{"class":49},[39,58547,2359],{"class":45},[39,58549,58550,58552,58554,58556,58559,58561],{"class":41,"line":9066},[39,58551,55760],{"class":56},[39,58553,52491],{"class":45},[39,58555,260],{"class":56},[39,58557,58558],{"class":56}," 50",[39,58560,52546],{"class":49},[39,58562,2359],{"class":45},[39,58564,58565],{"class":41,"line":9071},[39,58566,3245],{"class":45},[39,58568,58569,58571,58573],{"class":41,"line":9077},[39,58570,53471],{"class":45},[39,58572,1133],{"class":52354},[39,58574,52361],{"class":45},[39,58576,58577,58579,58581],{"class":41,"line":9089},[39,58578,52839],{"class":45},[39,58580,52388],{"class":52354},[39,58582,52361],{"class":45},[39,58584,58585],{"class":41,"line":9101},[39,58586,3458],{"emptyLinePlaceholder":1145},[39,58588,58589,58591,58593],{"class":41,"line":9113},[39,58590,2108],{"class":45},[39,58592,52854],{"class":52354},[39,58594,52361],{"class":45},[39,58596,58597,58599,58601,58604,58606],{"class":41,"line":10772},[39,58598,53198],{"class":45},[39,58600,14],{"class":52354},[39,58602,58603],{"class":45},">随机点名\u003C\u002F",[39,58605,14],{"class":52354},[39,58607,52361],{"class":45},[39,58609,58610,58612,58614,58616,58618,58620],{"class":41,"line":10797},[39,58611,53198],{"class":45},[39,58613,52665],{"class":52354},[39,58615,54540],{"class":3021},[39,58617,50],{"class":45},[39,58619,54545],{"class":1319},[39,58621,52361],{"class":45},[39,58623,58624,58626,58628,58631,58633],{"class":41,"line":10820},[39,58625,52395],{"class":45},[39,58627,39],{"class":52354},[39,58629,58630],{"class":45},">名字是：\u003C\u002F",[39,58632,39],{"class":52354},[39,58634,52361],{"class":45},[39,58636,58637,58639,58641,58643,58645,58648,58651,58653],{"class":41,"line":10844},[39,58638,52395],{"class":45},[39,58640,52665],{"class":52354},[39,58642,54540],{"class":3021},[39,58644,50],{"class":45},[39,58646,58647],{"class":1319},"\"qs\"",[39,58649,58650],{"class":45},">这里显示姓名\u003C\u002F",[39,58652,52665],{"class":52354},[39,58654,52361],{"class":45},[39,58656,58657,58659,58661],{"class":41,"line":10849},[39,58658,53471],{"class":45},[39,58660,52665],{"class":52354},[39,58662,52361],{"class":45},[39,58664,58665,58667,58669,58671,58673,58676],{"class":41,"line":10854},[39,58666,53198],{"class":45},[39,58668,52665],{"class":52354},[39,58670,54540],{"class":3021},[39,58672,50],{"class":45},[39,58674,58675],{"class":1319},"\"btns\"",[39,58677,52361],{"class":45},[39,58679,58680,58682,58684,58686,58688,58691,58694,58696],{"class":41,"line":10859},[39,58681,52395],{"class":45},[39,58683,54941],{"class":52354},[39,58685,54540],{"class":3021},[39,58687,50],{"class":45},[39,58689,58690],{"class":1319},"\"start\"",[39,58692,58693],{"class":45},">开始\u003C\u002F",[39,58695,54941],{"class":52354},[39,58697,52361],{"class":45},[39,58699,58700,58702,58704,58706,58708,58711,58714,58716],{"class":41,"line":10868},[39,58701,52395],{"class":45},[39,58703,54941],{"class":52354},[39,58705,54540],{"class":3021},[39,58707,50],{"class":45},[39,58709,58710],{"class":1319},"\"end\"",[39,58712,58713],{"class":45},">结束\u003C\u002F",[39,58715,54941],{"class":52354},[39,58717,52361],{"class":45},[39,58719,58720,58722,58724],{"class":41,"line":10873},[39,58721,53471],{"class":45},[39,58723,52665],{"class":52354},[39,58725,52361],{"class":45},[39,58727,58728],{"class":41,"line":10879},[39,58729,3458],{"emptyLinePlaceholder":1145},[39,58731,58732,58734,58736],{"class":41,"line":10900},[39,58733,53198],{"class":45},[39,58735,52867],{"class":52354},[39,58737,52361],{"class":45},[39,58739,58740],{"class":41,"line":10906},[39,58741,58742],{"class":102},"    \u002F\u002F 数据数组\n",[39,58744,58745,58747,58750,58752,58754,58757,58759,58762,58764,58767,58769,58772,58774,58777],{"class":41,"line":10920},[39,58746,12277],{"class":49},[39,58748,58749],{"class":56}," arr",[39,58751,14620],{"class":49},[39,58753,53280],{"class":45},[39,58755,58756],{"class":1319},"'马超'",[39,58758,13491],{"class":45},[39,58760,58761],{"class":1319},"'黄忠'",[39,58763,13491],{"class":45},[39,58765,58766],{"class":1319},"'赵云'",[39,58768,13491],{"class":45},[39,58770,58771],{"class":1319},"'关羽'",[39,58773,13491],{"class":45},[39,58775,58776],{"class":1319},"'张飞'",[39,58778,34301],{"class":45},[39,58780,58781,58783,58786,58788,58790,58792,58794,58797],{"class":41,"line":10926},[39,58782,12277],{"class":49},[39,58784,58785],{"class":56}," qs",[39,58787,14620],{"class":49},[39,58789,55450],{"class":45},[39,58791,55453],{"class":3021},[39,58793,1221],{"class":45},[39,58795,58796],{"class":1319},"'.qs'",[39,58798,209],{"class":45},[39,58800,58801],{"class":41,"line":10953},[39,58802,58803],{"class":102},"    \u002F\u002F 1.业务1.开始按钮模块\n",[39,58805,58806,58808,58810,58812,58814,58816,58818,58821],{"class":41,"line":10962},[39,58807,12277],{"class":49},[39,58809,5242],{"class":56},[39,58811,14620],{"class":49},[39,58813,55450],{"class":45},[39,58815,55453],{"class":3021},[39,58817,1221],{"class":45},[39,58819,58820],{"class":1319},"'.start'",[39,58822,209],{"class":45},[39,58824,58825],{"class":41,"line":10968},[39,58826,58827],{"class":102},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[39,58829,58830,58832,58835,58837],{"class":41,"line":10976},[39,58831,53273],{"class":49},[39,58833,58834],{"class":45}," timerId ",[39,58836,50],{"class":49},[39,58838,48388],{"class":56},[39,58840,58841],{"class":41,"line":10981},[39,58842,58843],{"class":102},"    \u002F\u002F 随机号要全局变量\n",[39,58845,58846,58848,58851,58853],{"class":41,"line":17660},[39,58847,53273],{"class":49},[39,58849,58850],{"class":45}," random ",[39,58852,50],{"class":49},[39,58854,48388],{"class":56},[39,58856,58857],{"class":41,"line":17666},[39,58858,58859],{"class":102},"    \u002F\u002F 1.1 添加点击事件\n",[39,58861,58862,58865,58868,58870,58873,58875,58877],{"class":41,"line":17689},[39,58863,58864],{"class":45},"    start.",[39,58866,58867],{"class":3021},"addEventListener",[39,58869,1221],{"class":45},[39,58871,58872],{"class":1319},"'click'",[39,58874,13491],{"class":45},[39,58876,55503],{"class":49},[39,58878,55506],{"class":45},[39,58880,58881,58884,58886,58888,58890,58892],{"class":41,"line":17695},[39,58882,58883],{"class":45},"      timerId ",[39,58885,50],{"class":49},[39,58887,55498],{"class":3021},[39,58889,1221],{"class":45},[39,58891,55503],{"class":49},[39,58893,55506],{"class":45},[39,58895,58896],{"class":41,"line":17718},[39,58897,58898],{"class":102},"        \u002F\u002F 随机数\n",[39,58900,58901,58904,58906,58909,58912,58915,58917,58919,58921,58923],{"class":41,"line":17732},[39,58902,58903],{"class":45},"        random ",[39,58905,50],{"class":49},[39,58907,58908],{"class":3021}," parseInt",[39,58910,58911],{"class":45},"(Math.",[39,58913,58914],{"class":3021},"random",[39,58916,14106],{"class":45},[39,58918,1657],{"class":49},[39,58920,53019],{"class":45},[39,58922,53022],{"class":56},[39,58924,209],{"class":45},[39,58926,58927,58930,58932],{"class":41,"line":17752},[39,58928,58929],{"class":45},"        qs.innerHTML ",[39,58931,50],{"class":49},[39,58933,58934],{"class":45}," arr[random]\n",[39,58936,58937,58940,58942],{"class":41,"line":17758},[39,58938,58939],{"class":45},"      }, ",[39,58941,1483],{"class":56},[39,58943,209],{"class":45},[39,58945,58946],{"class":41,"line":17769},[39,58947,58948],{"class":102},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[39,58950,58951,58953,58956,58958,58961,58963],{"class":41,"line":17792},[39,58952,55534],{"class":49},[39,58954,58955],{"class":45}," (arr.",[39,58957,53022],{"class":56},[39,58959,58960],{"class":49}," ===",[39,58962,26175],{"class":56},[39,58964,13498],{"class":45},[39,58966,58967],{"class":41,"line":17814},[39,58968,58969],{"class":102},"        \u002F\u002F start.disabled = true\n",[39,58971,58972],{"class":41,"line":17819},[39,58973,58974],{"class":102},"        \u002F\u002F end.disabled = true\n",[39,58976,58977],{"class":41,"line":17825},[39,58978,58979],{"class":102},"        \u002F\u002F 可以合起来写\n",[39,58981,58982,58985,58987,58990,58992],{"class":41,"line":17839},[39,58983,58984],{"class":45},"        start.disabled ",[39,58986,50],{"class":49},[39,58988,58989],{"class":45}," end.disabled ",[39,58991,50],{"class":49},[39,58993,58994],{"class":56}," true\n",[39,58996,58997],{"class":41,"line":17852},[39,58998,53452],{"class":45},[39,59000,59001],{"class":41,"line":17857},[39,59002,34516],{"class":45},[39,59004,59005],{"class":41,"line":17871},[39,59006,59007],{"class":102},"    \u002F\u002F 1.2 关闭按钮模块\n",[39,59009,59010,59012,59014,59016,59018,59020,59022,59025],{"class":41,"line":17876},[39,59011,12277],{"class":49},[39,59013,5258],{"class":56},[39,59015,14620],{"class":49},[39,59017,55450],{"class":45},[39,59019,55453],{"class":3021},[39,59021,1221],{"class":45},[39,59023,59024],{"class":1319},"'.end'",[39,59026,209],{"class":45},[39,59028,59029,59032,59034,59036,59038,59040,59042],{"class":41,"line":17882},[39,59030,59031],{"class":45},"    end.",[39,59033,58867],{"class":3021},[39,59035,1221],{"class":45},[39,59037,58872],{"class":1319},[39,59039,13491],{"class":45},[39,59041,55503],{"class":49},[39,59043,55506],{"class":45},[39,59045,59046,59049],{"class":41,"line":17887},[39,59047,59048],{"class":3021},"      clearInterval",[39,59050,59051],{"class":45},"(timerId)\n",[39,59053,59054],{"class":41,"line":17901},[39,59055,59056],{"class":102},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[39,59058,59059,59062,59065,59068,59070],{"class":41,"line":17906},[39,59060,59061],{"class":45},"      arr.",[39,59063,59064],{"class":3021},"splice",[39,59066,59067],{"class":45},"(random, ",[39,59069,57],{"class":56},[39,59071,209],{"class":45},[39,59073,59074],{"class":41,"line":17911},[39,59075,34516],{"class":45},[39,59077,59078],{"class":41,"line":17925},[39,59079,3458],{"emptyLinePlaceholder":1145},[39,59081,59082,59084,59086],{"class":41,"line":17937},[39,59083,53471],{"class":45},[39,59085,52867],{"class":52354},[39,59087,52361],{"class":45},[39,59089,59090,59092,59094],{"class":41,"line":17942},[39,59091,52839],{"class":45},[39,59093,52854],{"class":52354},[39,59095,52361],{"class":45},[39,59097,59098],{"class":41,"line":17955},[39,59099,3458],{"emptyLinePlaceholder":1145},[39,59101,59102,59104,59106],{"class":41,"line":17960},[39,59103,52839],{"class":45},[39,59105,51689],{"class":52354},[39,59107,52361],{"class":45},[19,59109,59110],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[1188,59112,59114],{"id":59113},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[29,59116,59118],{"className":51687,"code":59117,"language":51689,"meta":34,"style":34},"\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",[36,59119,59120,59130,59144,59148,59156,59170,59190,59202,59210,59214,59222,59234,59242,59261,59278,59294,59304,59308,59316,59324,59328],{"__ignoreMap":34},[39,59121,59122,59124,59126,59128],{"class":41,"line":42},[39,59123,52351],{"class":45},[39,59125,52355],{"class":52354},[39,59127,52358],{"class":3021},[39,59129,52361],{"class":45},[39,59131,59132,59134,59136,59138,59140,59142],{"class":41,"line":74},[39,59133,2108],{"class":45},[39,59135,51689],{"class":52354},[39,59137,52370],{"class":3021},[39,59139,50],{"class":45},[39,59141,52375],{"class":1319},[39,59143,52361],{"class":45},[39,59145,59146],{"class":41,"line":99},[39,59147,3458],{"emptyLinePlaceholder":1145},[39,59149,59150,59152,59154],{"class":41,"line":106},[39,59151,2108],{"class":45},[39,59153,52388],{"class":52354},[39,59155,52361],{"class":45},[39,59157,59158,59160,59162,59164,59166,59168],{"class":41,"line":112},[39,59159,53198],{"class":45},[39,59161,52398],{"class":52354},[39,59163,52401],{"class":3021},[39,59165,50],{"class":45},[39,59167,52406],{"class":1319},[39,59169,52361],{"class":45},[39,59171,59172,59174,59176,59178,59180,59182,59184,59186,59188],{"class":41,"line":118},[39,59173,53198],{"class":45},[39,59175,52398],{"class":52354},[39,59177,15976],{"class":3021},[39,59179,50],{"class":45},[39,59181,52445],{"class":1319},[39,59183,52425],{"class":3021},[39,59185,50],{"class":45},[39,59187,52452],{"class":1319},[39,59189,52361],{"class":45},[39,59191,59192,59194,59196,59198,59200],{"class":41,"line":413},[39,59193,53198],{"class":45},[39,59195,52461],{"class":52354},[39,59197,52464],{"class":45},[39,59199,52461],{"class":52354},[39,59201,52361],{"class":45},[39,59203,59204,59206,59208],{"class":41,"line":419},[39,59205,52839],{"class":45},[39,59207,52388],{"class":52354},[39,59209,52361],{"class":45},[39,59211,59212],{"class":41,"line":425},[39,59213,3458],{"emptyLinePlaceholder":1145},[39,59215,59216,59218,59220],{"class":41,"line":443},[39,59217,2108],{"class":45},[39,59219,52854],{"class":52354},[39,59221,52361],{"class":45},[39,59223,59224,59226,59228,59230,59232],{"class":41,"line":449},[39,59225,53198],{"class":45},[39,59227,54941],{"class":52354},[39,59229,54947],{"class":45},[39,59231,54941],{"class":52354},[39,59233,52361],{"class":45},[39,59235,59236,59238,59240],{"class":41,"line":455},[39,59237,53198],{"class":45},[39,59239,52867],{"class":52354},[39,59241,52361],{"class":45},[39,59243,59244,59246,59248,59250,59252,59254,59256,59259],{"class":41,"line":461},[39,59245,12277],{"class":49},[39,59247,55445],{"class":56},[39,59249,14620],{"class":49},[39,59251,55450],{"class":45},[39,59253,55453],{"class":3021},[39,59255,1221],{"class":45},[39,59257,59258],{"class":1319},"'button'",[39,59260,209],{"class":45},[39,59262,59263,59266,59268,59270,59272,59274,59276],{"class":41,"line":475},[39,59264,59265],{"class":45},"    btn.",[39,59267,58867],{"class":3021},[39,59269,1221],{"class":45},[39,59271,58872],{"class":1319},[39,59273,13491],{"class":45},[39,59275,55503],{"class":49},[39,59277,55506],{"class":45},[39,59279,59280,59283,59285,59287,59290,59292],{"class":41,"line":665},[39,59281,59282],{"class":49},"      const",[39,59284,3298],{"class":56},[39,59286,14620],{"class":49},[39,59288,59289],{"class":45}," Math.",[39,59291,58914],{"class":3021},[39,59293,3034],{"class":45},[39,59295,59296,59299,59302],{"class":41,"line":671},[39,59297,59298],{"class":45},"      console.",[39,59300,59301],{"class":3021},"log",[39,59303,1233],{"class":45},[39,59305,59306],{"class":41,"line":684},[39,59307,34516],{"class":45},[39,59309,59310,59312,59314],{"class":41,"line":2732},[39,59311,53471],{"class":45},[39,59313,52867],{"class":52354},[39,59315,52361],{"class":45},[39,59317,59318,59320,59322],{"class":41,"line":2737},[39,59319,52839],{"class":45},[39,59321,52854],{"class":52354},[39,59323,52361],{"class":45},[39,59325,59326],{"class":41,"line":2751},[39,59327,3458],{"emptyLinePlaceholder":1145},[39,59329,59330,59332,59334],{"class":41,"line":2756},[39,59331,52839],{"class":45},[39,59333,51689],{"class":52354},[39,59335,52361],{"class":45},[19,59337,59338],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,59340,59341],{},"常量不可以重新赋值",[19,59343,59344],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[29,59346,59348],{"className":51687,"code":59347,"language":51689,"meta":34,"style":34},"\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",[36,59349,59350,59360,59374,59378,59386,59400,59420,59432,59440,59444,59452,59464,59472,59483,59501,59517,59531,59539,59543,59551,59559,59563],{"__ignoreMap":34},[39,59351,59352,59354,59356,59358],{"class":41,"line":42},[39,59353,52351],{"class":45},[39,59355,52355],{"class":52354},[39,59357,52358],{"class":3021},[39,59359,52361],{"class":45},[39,59361,59362,59364,59366,59368,59370,59372],{"class":41,"line":74},[39,59363,2108],{"class":45},[39,59365,51689],{"class":52354},[39,59367,52370],{"class":3021},[39,59369,50],{"class":45},[39,59371,52375],{"class":1319},[39,59373,52361],{"class":45},[39,59375,59376],{"class":41,"line":99},[39,59377,3458],{"emptyLinePlaceholder":1145},[39,59379,59380,59382,59384],{"class":41,"line":106},[39,59381,2108],{"class":45},[39,59383,52388],{"class":52354},[39,59385,52361],{"class":45},[39,59387,59388,59390,59392,59394,59396,59398],{"class":41,"line":112},[39,59389,53198],{"class":45},[39,59391,52398],{"class":52354},[39,59393,52401],{"class":3021},[39,59395,50],{"class":45},[39,59397,52406],{"class":1319},[39,59399,52361],{"class":45},[39,59401,59402,59404,59406,59408,59410,59412,59414,59416,59418],{"class":41,"line":118},[39,59403,53198],{"class":45},[39,59405,52398],{"class":52354},[39,59407,15976],{"class":3021},[39,59409,50],{"class":45},[39,59411,52445],{"class":1319},[39,59413,52425],{"class":3021},[39,59415,50],{"class":45},[39,59417,52452],{"class":1319},[39,59419,52361],{"class":45},[39,59421,59422,59424,59426,59428,59430],{"class":41,"line":413},[39,59423,53198],{"class":45},[39,59425,52461],{"class":52354},[39,59427,52464],{"class":45},[39,59429,52461],{"class":52354},[39,59431,52361],{"class":45},[39,59433,59434,59436,59438],{"class":41,"line":419},[39,59435,52839],{"class":45},[39,59437,52388],{"class":52354},[39,59439,52361],{"class":45},[39,59441,59442],{"class":41,"line":425},[39,59443,3458],{"emptyLinePlaceholder":1145},[39,59445,59446,59448,59450],{"class":41,"line":443},[39,59447,2108],{"class":45},[39,59449,52854],{"class":52354},[39,59451,52361],{"class":45},[39,59453,59454,59456,59458,59460,59462],{"class":41,"line":449},[39,59455,53198],{"class":45},[39,59457,54941],{"class":52354},[39,59459,54947],{"class":45},[39,59461,54941],{"class":52354},[39,59463,52361],{"class":45},[39,59465,59466,59468,59470],{"class":41,"line":455},[39,59467,53198],{"class":45},[39,59469,52867],{"class":52354},[39,59471,52361],{"class":45},[39,59473,59474,59476,59478,59480],{"class":41,"line":461},[39,59475,12277],{"class":49},[39,59477,3298],{"class":56},[39,59479,14620],{"class":49},[39,59481,59482],{"class":56}," 10\n",[39,59484,59485,59487,59489,59491,59493,59495,59497,59499],{"class":41,"line":475},[39,59486,12277],{"class":49},[39,59488,55445],{"class":56},[39,59490,14620],{"class":49},[39,59492,55450],{"class":45},[39,59494,55453],{"class":3021},[39,59496,1221],{"class":45},[39,59498,59258],{"class":1319},[39,59500,209],{"class":45},[39,59502,59503,59505,59507,59509,59511,59513,59515],{"class":41,"line":665},[39,59504,59265],{"class":45},[39,59506,58867],{"class":3021},[39,59508,1221],{"class":45},[39,59510,58872],{"class":1319},[39,59512,13491],{"class":45},[39,59514,55503],{"class":49},[39,59516,55506],{"class":45},[39,59518,59519,59521,59523,59525,59527,59529],{"class":41,"line":671},[39,59520,59282],{"class":49},[39,59522,3298],{"class":56},[39,59524,14620],{"class":49},[39,59526,59289],{"class":45},[39,59528,58914],{"class":3021},[39,59530,3034],{"class":45},[39,59532,59533,59535,59537],{"class":41,"line":684},[39,59534,59298],{"class":45},[39,59536,59301],{"class":3021},[39,59538,1233],{"class":45},[39,59540,59541],{"class":41,"line":2732},[39,59542,34516],{"class":45},[39,59544,59545,59547,59549],{"class":41,"line":2737},[39,59546,53471],{"class":45},[39,59548,52867],{"class":52354},[39,59550,52361],{"class":45},[39,59552,59553,59555,59557],{"class":41,"line":2751},[39,59554,52839],{"class":45},[39,59556,52854],{"class":52354},[39,59558,52361],{"class":45},[39,59560,59561],{"class":41,"line":2756},[39,59562,3458],{"emptyLinePlaceholder":1145},[39,59564,59565,59567,59569],{"class":41,"line":2785},[39,59566,52839],{"class":45},[39,59568,51689],{"class":52354},[39,59570,52361],{"class":45},[19,59572,59573],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[29,59575,59577],{"className":51687,"code":59576,"language":51689,"meta":34,"style":34},"\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",[36,59578,59579,59589,59603,59607,59615,59629,59649,59661,59669,59673,59681,59693,59701,59711,59729,59745,59758,59766,59770,59778,59786,59790],{"__ignoreMap":34},[39,59580,59581,59583,59585,59587],{"class":41,"line":42},[39,59582,52351],{"class":45},[39,59584,52355],{"class":52354},[39,59586,52358],{"class":3021},[39,59588,52361],{"class":45},[39,59590,59591,59593,59595,59597,59599,59601],{"class":41,"line":74},[39,59592,2108],{"class":45},[39,59594,51689],{"class":52354},[39,59596,52370],{"class":3021},[39,59598,50],{"class":45},[39,59600,52375],{"class":1319},[39,59602,52361],{"class":45},[39,59604,59605],{"class":41,"line":99},[39,59606,3458],{"emptyLinePlaceholder":1145},[39,59608,59609,59611,59613],{"class":41,"line":106},[39,59610,2108],{"class":45},[39,59612,52388],{"class":52354},[39,59614,52361],{"class":45},[39,59616,59617,59619,59621,59623,59625,59627],{"class":41,"line":112},[39,59618,53198],{"class":45},[39,59620,52398],{"class":52354},[39,59622,52401],{"class":3021},[39,59624,50],{"class":45},[39,59626,52406],{"class":1319},[39,59628,52361],{"class":45},[39,59630,59631,59633,59635,59637,59639,59641,59643,59645,59647],{"class":41,"line":118},[39,59632,53198],{"class":45},[39,59634,52398],{"class":52354},[39,59636,15976],{"class":3021},[39,59638,50],{"class":45},[39,59640,52445],{"class":1319},[39,59642,52425],{"class":3021},[39,59644,50],{"class":45},[39,59646,52452],{"class":1319},[39,59648,52361],{"class":45},[39,59650,59651,59653,59655,59657,59659],{"class":41,"line":413},[39,59652,53198],{"class":45},[39,59654,52461],{"class":52354},[39,59656,52464],{"class":45},[39,59658,52461],{"class":52354},[39,59660,52361],{"class":45},[39,59662,59663,59665,59667],{"class":41,"line":419},[39,59664,52839],{"class":45},[39,59666,52388],{"class":52354},[39,59668,52361],{"class":45},[39,59670,59671],{"class":41,"line":425},[39,59672,3458],{"emptyLinePlaceholder":1145},[39,59674,59675,59677,59679],{"class":41,"line":443},[39,59676,2108],{"class":45},[39,59678,52854],{"class":52354},[39,59680,52361],{"class":45},[39,59682,59683,59685,59687,59689,59691],{"class":41,"line":449},[39,59684,53198],{"class":45},[39,59686,54941],{"class":52354},[39,59688,54947],{"class":45},[39,59690,54941],{"class":52354},[39,59692,52361],{"class":45},[39,59694,59695,59697,59699],{"class":41,"line":455},[39,59696,53198],{"class":45},[39,59698,52867],{"class":52354},[39,59700,52361],{"class":45},[39,59702,59703,59705,59707,59709],{"class":41,"line":461},[39,59704,12277],{"class":49},[39,59706,3298],{"class":56},[39,59708,14620],{"class":49},[39,59710,59482],{"class":56},[39,59712,59713,59715,59717,59719,59721,59723,59725,59727],{"class":41,"line":475},[39,59714,12277],{"class":49},[39,59716,55445],{"class":56},[39,59718,14620],{"class":49},[39,59720,55450],{"class":45},[39,59722,55453],{"class":3021},[39,59724,1221],{"class":45},[39,59726,59258],{"class":1319},[39,59728,209],{"class":45},[39,59730,59731,59733,59735,59737,59739,59741,59743],{"class":41,"line":665},[39,59732,59265],{"class":45},[39,59734,58867],{"class":3021},[39,59736,1221],{"class":45},[39,59738,58872],{"class":1319},[39,59740,13491],{"class":45},[39,59742,55503],{"class":49},[39,59744,55506],{"class":45},[39,59746,59747,59750,59752,59754,59756],{"class":41,"line":671},[39,59748,59749],{"class":45},"      num ",[39,59751,50],{"class":49},[39,59753,59289],{"class":45},[39,59755,58914],{"class":3021},[39,59757,3034],{"class":45},[39,59759,59760,59762,59764],{"class":41,"line":684},[39,59761,59298],{"class":45},[39,59763,59301],{"class":3021},[39,59765,1233],{"class":45},[39,59767,59768],{"class":41,"line":2732},[39,59769,34516],{"class":45},[39,59771,59772,59774,59776],{"class":41,"line":2737},[39,59773,53471],{"class":45},[39,59775,52867],{"class":52354},[39,59777,52361],{"class":45},[39,59779,59780,59782,59784],{"class":41,"line":2751},[39,59781,52839],{"class":45},[39,59783,52854],{"class":52354},[39,59785,52361],{"class":45},[39,59787,59788],{"class":41,"line":2756},[39,59789,3458],{"emptyLinePlaceholder":1145},[39,59791,59792,59794,59796],{"class":41,"line":2785},[39,59793,52839],{"class":45},[39,59795,51689],{"class":52354},[39,59797,52361],{"class":45},[19,59799,59800],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[1188,59802,59804],{"id":59803},"_324-事件监听版本","3.2.4 事件监听版本",[19,59806,59807],{},[269,59808],{"alt":34,"src":59809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,59811,59812],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,59814,59815],{},"这种方式会覆盖前边的事件监听:",[29,59817,59819],{"className":51687,"code":59818,"language":51689,"meta":34,"style":34},"\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",[36,59820,59821,59831,59845,59849,59857,59871,59891,59903,59911,59915,59923,59935,59943,59961,59975,59986,59990,60002,60012,60016,60024,60032,60036],{"__ignoreMap":34},[39,59822,59823,59825,59827,59829],{"class":41,"line":42},[39,59824,52351],{"class":45},[39,59826,52355],{"class":52354},[39,59828,52358],{"class":3021},[39,59830,52361],{"class":45},[39,59832,59833,59835,59837,59839,59841,59843],{"class":41,"line":74},[39,59834,2108],{"class":45},[39,59836,51689],{"class":52354},[39,59838,52370],{"class":3021},[39,59840,50],{"class":45},[39,59842,52375],{"class":1319},[39,59844,52361],{"class":45},[39,59846,59847],{"class":41,"line":99},[39,59848,3458],{"emptyLinePlaceholder":1145},[39,59850,59851,59853,59855],{"class":41,"line":106},[39,59852,2108],{"class":45},[39,59854,52388],{"class":52354},[39,59856,52361],{"class":45},[39,59858,59859,59861,59863,59865,59867,59869],{"class":41,"line":112},[39,59860,53198],{"class":45},[39,59862,52398],{"class":52354},[39,59864,52401],{"class":3021},[39,59866,50],{"class":45},[39,59868,52406],{"class":1319},[39,59870,52361],{"class":45},[39,59872,59873,59875,59877,59879,59881,59883,59885,59887,59889],{"class":41,"line":118},[39,59874,53198],{"class":45},[39,59876,52398],{"class":52354},[39,59878,15976],{"class":3021},[39,59880,50],{"class":45},[39,59882,52445],{"class":1319},[39,59884,52425],{"class":3021},[39,59886,50],{"class":45},[39,59888,52452],{"class":1319},[39,59890,52361],{"class":45},[39,59892,59893,59895,59897,59899,59901],{"class":41,"line":413},[39,59894,53198],{"class":45},[39,59896,52461],{"class":52354},[39,59898,52464],{"class":45},[39,59900,52461],{"class":52354},[39,59902,52361],{"class":45},[39,59904,59905,59907,59909],{"class":41,"line":419},[39,59906,52839],{"class":45},[39,59908,52388],{"class":52354},[39,59910,52361],{"class":45},[39,59912,59913],{"class":41,"line":425},[39,59914,3458],{"emptyLinePlaceholder":1145},[39,59916,59917,59919,59921],{"class":41,"line":443},[39,59918,2108],{"class":45},[39,59920,52854],{"class":52354},[39,59922,52361],{"class":45},[39,59924,59925,59927,59929,59931,59933],{"class":41,"line":449},[39,59926,53198],{"class":45},[39,59928,54941],{"class":52354},[39,59930,54947],{"class":45},[39,59932,54941],{"class":52354},[39,59934,52361],{"class":45},[39,59936,59937,59939,59941],{"class":41,"line":455},[39,59938,53198],{"class":45},[39,59940,52867],{"class":52354},[39,59942,52361],{"class":45},[39,59944,59945,59947,59949,59951,59953,59955,59957,59959],{"class":41,"line":461},[39,59946,12277],{"class":49},[39,59948,55445],{"class":56},[39,59950,14620],{"class":49},[39,59952,55450],{"class":45},[39,59954,55453],{"class":3021},[39,59956,1221],{"class":45},[39,59958,59258],{"class":1319},[39,59960,209],{"class":45},[39,59962,59963,59965,59968,59970,59973],{"class":41,"line":475},[39,59964,59265],{"class":45},[39,59966,59967],{"class":3021},"onclick",[39,59969,14620],{"class":49},[39,59971,59972],{"class":49}," function",[39,59974,55506],{"class":45},[39,59976,59977,59980,59982,59984],{"class":41,"line":665},[39,59978,59979],{"class":3021},"      alert",[39,59981,1221],{"class":45},[39,59983,151],{"class":56},[39,59985,209],{"class":45},[39,59987,59988],{"class":41,"line":671},[39,59989,3245],{"class":45},[39,59991,59992,59994,59996,59998,60000],{"class":41,"line":684},[39,59993,59265],{"class":45},[39,59995,59967],{"class":3021},[39,59997,14620],{"class":49},[39,59999,59972],{"class":49},[39,60001,55506],{"class":45},[39,60003,60004,60006,60008,60010],{"class":41,"line":2732},[39,60005,59979],{"class":3021},[39,60007,1221],{"class":45},[39,60009,1948],{"class":56},[39,60011,209],{"class":45},[39,60013,60014],{"class":41,"line":2737},[39,60015,3245],{"class":45},[39,60017,60018,60020,60022],{"class":41,"line":2751},[39,60019,53471],{"class":45},[39,60021,52867],{"class":52354},[39,60023,52361],{"class":45},[39,60025,60026,60028,60030],{"class":41,"line":2756},[39,60027,52839],{"class":45},[39,60029,52854],{"class":52354},[39,60031,52361],{"class":45},[39,60033,60034],{"class":41,"line":2785},[39,60035,3458],{"emptyLinePlaceholder":1145},[39,60037,60038,60040,60042],{"class":41,"line":2790},[39,60039,52839],{"class":45},[39,60041,51689],{"class":52354},[39,60043,52361],{"class":45},[19,60045,60046],{},"只要点击就输出结果为22,前边11被覆盖了",[29,60048,60050],{"className":51687,"code":60049,"language":51689,"meta":34,"style":34},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[36,60051,60052,60057,60062,60066,60071,60076],{"__ignoreMap":34},[39,60053,60054],{"class":41,"line":42},[39,60055,60056],{"class":45},"  btn.addEventListener('click', function () {\n",[39,60058,60059],{"class":41,"line":74},[39,60060,60061],{"class":45},"      alert(11)\n",[39,60063,60064],{"class":41,"line":99},[39,60065,34516],{"class":45},[39,60067,60068],{"class":41,"line":106},[39,60069,60070],{"class":45},"    btn.addEventListener('click', function () {\n",[39,60072,60073],{"class":41,"line":112},[39,60074,60075],{"class":45},"      alert(22)\n",[39,60077,60078],{"class":41,"line":118},[39,60079,34516],{"class":45},[19,60081,60082],{},"点击第一次输出11,第二次点击为22",[1188,60084,60086],{"id":60085},"_325-事件类型","3.2.5 事件类型",[19,60088,60089],{},[269,60090],{"alt":34,"src":60091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23054,60093,60095],{"id":60094},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,60097,60098],{},"补充知识:",[19,60100,60101],{},"轮播图自动播放模块,可以使用",[19,60103,60104],{},"let timerId = setInterval(function () {",[19,60106,60107],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,60109,60110],{},"用js方法模拟进行点击事件,click必须加()",[19,60112,60113],{},"next.click()",[19,60115,60116],{},"}, 1000)",[19,60118,60119],{},[269,60120],{"alt":34,"src":60121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[29,60123,60125],{"className":54121,"code":60124,"language":54123,"meta":34,"style":34},"\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",[36,60126,60127,60131,60141,60155,60159,60167,60182,60202,60222,60235,60243,60248,60253,60257,60261,60266,60271,60276,60281,60285,60289,60294,60299,60304,60308,60312,60317,60321,60326,60331,60335,60339,60344,60349,60354,60359,60364,60368,60372,60377,60382,60387,60392,60397,60401,60405,60410,60415,60420,60425,60430,60435,60440,60445,60450,60455,60459,60463,60468,60473,60477,60481,60486,60491,60495,60500,60505,60509,60513,60518,60522,60527,60532,60536,60541,60545,60549,60554,60559,60564,60569,60574,60579,60584,60588,60592,60596,60601,60606,60611,60616,60620,60628,60636,60640,60648,60663,60677,60698,60706,60720,60733,60748,60767,60779,60791,60803,60815,60827,60839,60851,60859,60874,60898,60922,60930,60938,60946,60954,60959,60964,60969,60974,60979,60984,60989,60994,60999,61004,61008,61013,61018,61023,61028,61033,61038,61043,61048,61053,61057,61062,61067,61072,61077,61082,61087,61092,61097,61102,61107,61112,61117,61121,61125,61130,61135,61140,61144,61149,61154,61159,61164,61169,61173,61178,61182,61186,61190,61194,61198,61202,61207,61212,61217,61222,61227,61232,61237,61242,61247,61251,61255,61260,61265,61270,61275,61280,61284,61289,61294,61299,61304,61309,61314,61318,61322,61327,61331,61336,61340,61345,61350,61355,61360,61365,61370,61374,61382,61390,61394],{"__ignoreMap":34},[39,60128,60129],{"class":41,"line":42},[39,60130,3458],{"emptyLinePlaceholder":1145},[39,60132,60133,60135,60137,60139],{"class":41,"line":74},[39,60134,52351],{"class":45},[39,60136,52355],{"class":49},[39,60138,52358],{"class":56},[39,60140,52361],{"class":45},[39,60142,60143,60145,60147,60149,60151,60153],{"class":41,"line":99},[39,60144,2108],{"class":45},[39,60146,51689],{"class":52354},[39,60148,52370],{"class":3021},[39,60150,50],{"class":45},[39,60152,52375],{"class":1319},[39,60154,52361],{"class":45},[39,60156,60157],{"class":41,"line":106},[39,60158,3458],{"emptyLinePlaceholder":1145},[39,60160,60161,60163,60165],{"class":41,"line":112},[39,60162,2108],{"class":45},[39,60164,52388],{"class":52354},[39,60166,52361],{"class":45},[39,60168,60169,60171,60173,60175,60177,60179],{"class":41,"line":118},[39,60170,53198],{"class":45},[39,60172,52398],{"class":52354},[39,60174,52401],{"class":3021},[39,60176,50],{"class":45},[39,60178,52406],{"class":1319},[39,60180,60181],{"class":45}," \u002F>\n",[39,60183,60184,60186,60188,60190,60192,60194,60196,60198,60200],{"class":41,"line":413},[39,60185,53198],{"class":45},[39,60187,52398],{"class":52354},[39,60189,52417],{"class":3021},[39,60191,50],{"class":45},[39,60193,52422],{"class":1319},[39,60195,52425],{"class":3021},[39,60197,50],{"class":45},[39,60199,52430],{"class":1319},[39,60201,60181],{"class":45},[39,60203,60204,60206,60208,60210,60212,60214,60216,60218,60220],{"class":41,"line":419},[39,60205,53198],{"class":45},[39,60207,52398],{"class":52354},[39,60209,15976],{"class":3021},[39,60211,50],{"class":45},[39,60213,52445],{"class":1319},[39,60215,52425],{"class":3021},[39,60217,50],{"class":45},[39,60219,52452],{"class":1319},[39,60221,60181],{"class":45},[39,60223,60224,60226,60228,60231,60233],{"class":41,"line":425},[39,60225,53198],{"class":45},[39,60227,52461],{"class":52354},[39,60229,60230],{"class":45},">轮播图点击切换\u003C\u002F",[39,60232,52461],{"class":52354},[39,60234,52361],{"class":45},[39,60236,60237,60239,60241],{"class":41,"line":443},[39,60238,53198],{"class":45},[39,60240,1133],{"class":52354},[39,60242,52361],{"class":45},[39,60244,60245],{"class":41,"line":449},[39,60246,60247],{"class":45},"    * {\n",[39,60249,60250],{"class":41,"line":455},[39,60251,60252],{"class":45},"      box-sizing: border-box;\n",[39,60254,60255],{"class":41,"line":461},[39,60256,3245],{"class":45},[39,60258,60259],{"class":41,"line":475},[39,60260,3458],{"emptyLinePlaceholder":1145},[39,60262,60263],{"class":41,"line":665},[39,60264,60265],{"class":45},"    .slider {\n",[39,60267,60268],{"class":41,"line":671},[39,60269,60270],{"class":45},"      width: 560px;\n",[39,60272,60273],{"class":41,"line":684},[39,60274,60275],{"class":45},"      height: 400px;\n",[39,60277,60278],{"class":41,"line":2732},[39,60279,60280],{"class":45},"      overflow: hidden;\n",[39,60282,60283],{"class":41,"line":2737},[39,60284,3245],{"class":45},[39,60286,60287],{"class":41,"line":2751},[39,60288,3458],{"emptyLinePlaceholder":1145},[39,60290,60291],{"class":41,"line":2756},[39,60292,60293],{"class":45},"    .slider-wrapper {\n",[39,60295,60296],{"class":41,"line":2785},[39,60297,60298],{"class":45},"      width: 100%;\n",[39,60300,60301],{"class":41,"line":2790},[39,60302,60303],{"class":45},"      height: 320px;\n",[39,60305,60306],{"class":41,"line":2807},[39,60307,3245],{"class":45},[39,60309,60310],{"class":41,"line":2812},[39,60311,3458],{"emptyLinePlaceholder":1145},[39,60313,60314],{"class":41,"line":2817},[39,60315,60316],{"class":45},"    .slider-wrapper img {\n",[39,60318,60319],{"class":41,"line":2822},[39,60320,60298],{"class":45},[39,60322,60323],{"class":41,"line":2836},[39,60324,60325],{"class":45},"      height: 100%;\n",[39,60327,60328],{"class":41,"line":2841},[39,60329,60330],{"class":45},"      display: block;\n",[39,60332,60333],{"class":41,"line":3635},[39,60334,3245],{"class":45},[39,60336,60337],{"class":41,"line":3649},[39,60338,3458],{"emptyLinePlaceholder":1145},[39,60340,60341],{"class":41,"line":3657},[39,60342,60343],{"class":45},"    .slider-footer {\n",[39,60345,60346],{"class":41,"line":3662},[39,60347,60348],{"class":45},"      height: 80px;\n",[39,60350,60351],{"class":41,"line":3668},[39,60352,60353],{"class":45},"      background-color: rgb(100, 67, 68);\n",[39,60355,60356],{"class":41,"line":3674},[39,60357,60358],{"class":45},"      padding: 12px 12px 0 12px;\n",[39,60360,60361],{"class":41,"line":3679},[39,60362,60363],{"class":45},"      position: relative;\n",[39,60365,60366],{"class":41,"line":9004},[39,60367,3245],{"class":45},[39,60369,60370],{"class":41,"line":9028},[39,60371,3458],{"emptyLinePlaceholder":1145},[39,60373,60374],{"class":41,"line":9033},[39,60375,60376],{"class":45},"    .slider-footer .toggle {\n",[39,60378,60379],{"class":41,"line":9039},[39,60380,60381],{"class":45},"      position: absolute;\n",[39,60383,60384],{"class":41,"line":9066},[39,60385,60386],{"class":45},"      right: 0;\n",[39,60388,60389],{"class":41,"line":9071},[39,60390,60391],{"class":45},"      top: 12px;\n",[39,60393,60394],{"class":41,"line":9077},[39,60395,60396],{"class":45},"      display: flex;\n",[39,60398,60399],{"class":41,"line":9089},[39,60400,3245],{"class":45},[39,60402,60403],{"class":41,"line":9101},[39,60404,3458],{"emptyLinePlaceholder":1145},[39,60406,60407],{"class":41,"line":9113},[39,60408,60409],{"class":45},"    .slider-footer .toggle button {\n",[39,60411,60412],{"class":41,"line":10772},[39,60413,60414],{"class":45},"      margin-right: 12px;\n",[39,60416,60417],{"class":41,"line":10797},[39,60418,60419],{"class":45},"      width: 28px;\n",[39,60421,60422],{"class":41,"line":10820},[39,60423,60424],{"class":45},"      height: 28px;\n",[39,60426,60427],{"class":41,"line":10844},[39,60428,60429],{"class":45},"      appearance: none;\n",[39,60431,60432],{"class":41,"line":10849},[39,60433,60434],{"class":45},"      border: none;\n",[39,60436,60437],{"class":41,"line":10854},[39,60438,60439],{"class":45},"      background: rgba(255, 255, 255, 0.1);\n",[39,60441,60442],{"class":41,"line":10859},[39,60443,60444],{"class":45},"      color: #fff;\n",[39,60446,60447],{"class":41,"line":10868},[39,60448,60449],{"class":45},"      border-radius: 4px;\n",[39,60451,60452],{"class":41,"line":10873},[39,60453,60454],{"class":45},"      cursor: pointer;\n",[39,60456,60457],{"class":41,"line":10879},[39,60458,3245],{"class":45},[39,60460,60461],{"class":41,"line":10900},[39,60462,3458],{"emptyLinePlaceholder":1145},[39,60464,60465],{"class":41,"line":10906},[39,60466,60467],{"class":45},"    .slider-footer .toggle button:hover {\n",[39,60469,60470],{"class":41,"line":10920},[39,60471,60472],{"class":45},"      background: rgba(255, 255, 255, 0.2);\n",[39,60474,60475],{"class":41,"line":10926},[39,60476,3245],{"class":45},[39,60478,60479],{"class":41,"line":10953},[39,60480,3458],{"emptyLinePlaceholder":1145},[39,60482,60483],{"class":41,"line":10962},[39,60484,60485],{"class":45},"    .slider-footer p {\n",[39,60487,60488],{"class":41,"line":10968},[39,60489,60490],{"class":45},"      margin: 0;\n",[39,60492,60493],{"class":41,"line":10976},[39,60494,60444],{"class":45},[39,60496,60497],{"class":41,"line":10981},[39,60498,60499],{"class":45},"      font-size: 18px;\n",[39,60501,60502],{"class":41,"line":17660},[39,60503,60504],{"class":45},"      margin-bottom: 10px;\n",[39,60506,60507],{"class":41,"line":17666},[39,60508,3245],{"class":45},[39,60510,60511],{"class":41,"line":17689},[39,60512,3458],{"emptyLinePlaceholder":1145},[39,60514,60515],{"class":41,"line":17695},[39,60516,60517],{"class":45},"    .slider-indicator {\n",[39,60519,60520],{"class":41,"line":17718},[39,60521,60490],{"class":45},[39,60523,60524],{"class":41,"line":17732},[39,60525,60526],{"class":45},"      padding: 0;\n",[39,60528,60529],{"class":41,"line":17752},[39,60530,60531],{"class":45},"      list-style: none;\n",[39,60533,60534],{"class":41,"line":17758},[39,60535,60396],{"class":45},[39,60537,60538],{"class":41,"line":17769},[39,60539,60540],{"class":45},"      align-items: center;\n",[39,60542,60543],{"class":41,"line":17792},[39,60544,3245],{"class":45},[39,60546,60547],{"class":41,"line":17814},[39,60548,3458],{"emptyLinePlaceholder":1145},[39,60550,60551],{"class":41,"line":17819},[39,60552,60553],{"class":45},"    .slider-indicator li {\n",[39,60555,60556],{"class":41,"line":17825},[39,60557,60558],{"class":45},"      width: 8px;\n",[39,60560,60561],{"class":41,"line":17839},[39,60562,60563],{"class":45},"      height: 8px;\n",[39,60565,60566],{"class":41,"line":17852},[39,60567,60568],{"class":45},"      margin: 4px;\n",[39,60570,60571],{"class":41,"line":17857},[39,60572,60573],{"class":45},"      border-radius: 50%;\n",[39,60575,60576],{"class":41,"line":17871},[39,60577,60578],{"class":45},"      background: #fff;\n",[39,60580,60581],{"class":41,"line":17876},[39,60582,60583],{"class":45},"      opacity: 0.4;\n",[39,60585,60586],{"class":41,"line":17882},[39,60587,60454],{"class":45},[39,60589,60590],{"class":41,"line":17887},[39,60591,3245],{"class":45},[39,60593,60594],{"class":41,"line":17901},[39,60595,3458],{"emptyLinePlaceholder":1145},[39,60597,60598],{"class":41,"line":17906},[39,60599,60600],{"class":45},"    .slider-indicator li.active {\n",[39,60602,60603],{"class":41,"line":17911},[39,60604,60605],{"class":45},"      width: 12px;\n",[39,60607,60608],{"class":41,"line":17925},[39,60609,60610],{"class":45},"      height: 12px;\n",[39,60612,60613],{"class":41,"line":17937},[39,60614,60615],{"class":45},"      opacity: 1;\n",[39,60617,60618],{"class":41,"line":17942},[39,60619,3245],{"class":45},[39,60621,60622,60624,60626],{"class":41,"line":17955},[39,60623,53471],{"class":45},[39,60625,1133],{"class":52354},[39,60627,52361],{"class":45},[39,60629,60630,60632,60634],{"class":41,"line":17960},[39,60631,52839],{"class":45},[39,60633,52388],{"class":52354},[39,60635,52361],{"class":45},[39,60637,60638],{"class":41,"line":17965},[39,60639,3458],{"emptyLinePlaceholder":1145},[39,60641,60642,60644,60646],{"class":41,"line":17970},[39,60643,2108],{"class":45},[39,60645,52854],{"class":52354},[39,60647,52361],{"class":45},[39,60649,60650,60652,60654,60656,60658,60661],{"class":41,"line":17983},[39,60651,53198],{"class":45},[39,60653,52665],{"class":52354},[39,60655,54540],{"class":3021},[39,60657,50],{"class":45},[39,60659,60660],{"class":1319},"\"slider\"",[39,60662,52361],{"class":45},[39,60664,60665,60667,60669,60671,60673,60675],{"class":41,"line":17988},[39,60666,52395],{"class":45},[39,60668,52665],{"class":52354},[39,60670,54540],{"class":3021},[39,60672,50],{"class":45},[39,60674,56281],{"class":1319},[39,60676,52361],{"class":45},[39,60678,60679,60681,60683,60685,60687,60690,60692,60694,60696],{"class":41,"line":33688},[39,60680,56288],{"class":45},[39,60682,269],{"class":52354},[39,60684,56293],{"class":3021},[39,60686,50],{"class":45},[39,60688,60689],{"class":1319},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[39,60691,56301],{"class":3021},[39,60693,50],{"class":45},[39,60695,8708],{"class":1319},[39,60697,60181],{"class":45},[39,60699,60700,60702,60704],{"class":41,"line":33694},[39,60701,52830],{"class":45},[39,60703,52665],{"class":52354},[39,60705,52361],{"class":45},[39,60707,60708,60710,60712,60714,60716,60718],{"class":41,"line":33700},[39,60709,52395],{"class":45},[39,60711,52665],{"class":52354},[39,60713,54540],{"class":3021},[39,60715,50],{"class":45},[39,60717,56328],{"class":1319},[39,60719,52361],{"class":45},[39,60721,60722,60724,60726,60729,60731],{"class":41,"line":33706},[39,60723,56288],{"class":45},[39,60725,19],{"class":52354},[39,60727,60728],{"class":45},">对人类来说会不会太超前了？\u003C\u002F",[39,60730,19],{"class":52354},[39,60732,52361],{"class":45},[39,60734,60735,60737,60739,60741,60743,60746],{"class":41,"line":33712},[39,60736,56288],{"class":45},[39,60738,2205],{"class":52354},[39,60740,54540],{"class":3021},[39,60742,50],{"class":45},[39,60744,60745],{"class":1319},"\"slider-indicator\"",[39,60747,52361],{"class":45},[39,60749,60750,60752,60754,60756,60758,60761,60763,60765],{"class":41,"line":33723},[39,60751,56356],{"class":45},[39,60753,1174],{"class":52354},[39,60755,54540],{"class":3021},[39,60757,50],{"class":45},[39,60759,60760],{"class":1319},"\"active\"",[39,60762,56368],{"class":45},[39,60764,1174],{"class":52354},[39,60766,52361],{"class":45},[39,60768,60769,60771,60773,60775,60777],{"class":41,"line":33729},[39,60770,56356],{"class":45},[39,60772,1174],{"class":52354},[39,60774,56368],{"class":45},[39,60776,1174],{"class":52354},[39,60778,52361],{"class":45},[39,60780,60781,60783,60785,60787,60789],{"class":41,"line":33749},[39,60782,56356],{"class":45},[39,60784,1174],{"class":52354},[39,60786,56368],{"class":45},[39,60788,1174],{"class":52354},[39,60790,52361],{"class":45},[39,60792,60793,60795,60797,60799,60801],{"class":41,"line":33755},[39,60794,56356],{"class":45},[39,60796,1174],{"class":52354},[39,60798,56368],{"class":45},[39,60800,1174],{"class":52354},[39,60802,52361],{"class":45},[39,60804,60805,60807,60809,60811,60813],{"class":41,"line":33766},[39,60806,56356],{"class":45},[39,60808,1174],{"class":52354},[39,60810,56368],{"class":45},[39,60812,1174],{"class":52354},[39,60814,52361],{"class":45},[39,60816,60817,60819,60821,60823,60825],{"class":41,"line":33772},[39,60818,56356],{"class":45},[39,60820,1174],{"class":52354},[39,60822,56368],{"class":45},[39,60824,1174],{"class":52354},[39,60826,52361],{"class":45},[39,60828,60829,60831,60833,60835,60837],{"class":41,"line":33778},[39,60830,56356],{"class":45},[39,60832,1174],{"class":52354},[39,60834,56368],{"class":45},[39,60836,1174],{"class":52354},[39,60838,52361],{"class":45},[39,60840,60841,60843,60845,60847,60849],{"class":41,"line":33784},[39,60842,56356],{"class":45},[39,60844,1174],{"class":52354},[39,60846,56368],{"class":45},[39,60848,1174],{"class":52354},[39,60850,52361],{"class":45},[39,60852,60853,60855,60857],{"class":41,"line":33790},[39,60854,56461],{"class":45},[39,60856,2205],{"class":52354},[39,60858,52361],{"class":45},[39,60860,60861,60863,60865,60867,60869,60872],{"class":41,"line":33796},[39,60862,56288],{"class":45},[39,60864,52665],{"class":52354},[39,60866,54540],{"class":3021},[39,60868,50],{"class":45},[39,60870,60871],{"class":1319},"\"toggle\"",[39,60873,52361],{"class":45},[39,60875,60876,60878,60880,60882,60884,60887,60889,60892,60894,60896],{"class":41,"line":33802},[39,60877,56356],{"class":45},[39,60879,54941],{"class":52354},[39,60881,54540],{"class":3021},[39,60883,50],{"class":45},[39,60885,60886],{"class":1319},"\"prev\"",[39,60888,2158],{"class":45},[39,60890,60891],{"class":56},"&lt;",[39,60893,52839],{"class":45},[39,60895,54941],{"class":52354},[39,60897,52361],{"class":45},[39,60899,60900,60902,60904,60906,60908,60911,60913,60916,60918,60920],{"class":41,"line":33808},[39,60901,56356],{"class":45},[39,60903,54941],{"class":52354},[39,60905,54540],{"class":3021},[39,60907,50],{"class":45},[39,60909,60910],{"class":1319},"\"next\"",[39,60912,2158],{"class":45},[39,60914,60915],{"class":56},"&gt;",[39,60917,52839],{"class":45},[39,60919,54941],{"class":52354},[39,60921,52361],{"class":45},[39,60923,60924,60926,60928],{"class":41,"line":33828},[39,60925,56461],{"class":45},[39,60927,52665],{"class":52354},[39,60929,52361],{"class":45},[39,60931,60932,60934,60936],{"class":41,"line":33834},[39,60933,52830],{"class":45},[39,60935,52665],{"class":52354},[39,60937,52361],{"class":45},[39,60939,60940,60942,60944],{"class":41,"line":33850},[39,60941,53471],{"class":45},[39,60943,52665],{"class":52354},[39,60945,52361],{"class":45},[39,60947,60948,60950,60952],{"class":41,"line":33856},[39,60949,53198],{"class":45},[39,60951,52867],{"class":52354},[39,60953,52361],{"class":45},[39,60955,60956],{"class":41,"line":33870},[39,60957,60958],{"class":45},"    \u002F\u002F 1. 初始数据\n",[39,60960,60961],{"class":41,"line":33876},[39,60962,60963],{"class":45},"    const data = [\n",[39,60965,60966],{"class":41,"line":33891},[39,60967,60968],{"class":45},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[39,60970,60971],{"class":41,"line":33897},[39,60972,60973],{"class":45},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[39,60975,60976],{"class":41,"line":33906},[39,60977,60978],{"class":45},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[39,60980,60981],{"class":41,"line":33912},[39,60982,60983],{"class":45},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[39,60985,60986],{"class":41,"line":33921},[39,60987,60988],{"class":45},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[39,60990,60991],{"class":41,"line":33927},[39,60992,60993],{"class":45},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[39,60995,60996],{"class":41,"line":33933},[39,60997,60998],{"class":45},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[39,61000,61001],{"class":41,"line":33942},[39,61002,61003],{"class":45},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[39,61005,61006],{"class":41,"line":33948},[39,61007,54163],{"class":45},[39,61009,61010],{"class":41,"line":33959},[39,61011,61012],{"class":45},"    \u002F\u002F 获取元素\n",[39,61014,61015],{"class":41,"line":33965},[39,61016,61017],{"class":45},"    const img = document.querySelector('.slider-wrapper img')\n",[39,61019,61020],{"class":41,"line":33984},[39,61021,61022],{"class":45},"    const p = document.querySelector('.slider-footer p')\n",[39,61024,61025],{"class":41,"line":33990},[39,61026,61027],{"class":45},"    const footer = document.querySelector('.slider-footer')\n",[39,61029,61030],{"class":41,"line":34001},[39,61031,61032],{"class":45},"    \u002F\u002F 1. 右按钮业务\n",[39,61034,61035],{"class":41,"line":34007},[39,61036,61037],{"class":45},"    \u002F\u002F 1.1 获取右侧按钮 \n",[39,61039,61040],{"class":41,"line":34027},[39,61041,61042],{"class":45},"    const next = document.querySelector('.next')\n",[39,61044,61045],{"class":41,"line":34043},[39,61046,61047],{"class":45},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[39,61049,61050],{"class":41,"line":34049},[39,61051,61052],{"class":45},"    \u002F\u002F 1.2 注册点击事件\n",[39,61054,61055],{"class":41,"line":34063},[39,61056,3458],{"emptyLinePlaceholder":1145},[39,61058,61059],{"class":41,"line":34069},[39,61060,61061],{"class":45},"    next.addEventListener('click', function () {\n",[39,61063,61064],{"class":41,"line":34075},[39,61065,61066],{"class":45},"      \u002F\u002F console.log(11)\n",[39,61068,61069],{"class":41,"line":34086},[39,61070,61071],{"class":45},"      i++\n",[39,61073,61074],{"class":41,"line":34092},[39,61075,61076],{"class":45},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[39,61078,61079],{"class":41,"line":34098},[39,61080,61081],{"class":45},"      \u002F\u002F if (i >= 8) {\n",[39,61083,61084],{"class":41,"line":34108},[39,61085,61086],{"class":45},"      \u002F\u002F   i = 0\n",[39,61088,61089],{"class":41,"line":34114},[39,61090,61091],{"class":45},"      \u002F\u002F }\n",[39,61093,61094],{"class":41,"line":34125},[39,61095,61096],{"class":45},"      i = i >= data.length ? 0 : i\n",[39,61098,61099],{"class":41,"line":34131},[39,61100,61101],{"class":45},"      \u002F\u002F 1.3 得到对应的对象\n",[39,61103,61104],{"class":41,"line":34141},[39,61105,61106],{"class":45},"      \u002F\u002F console.log(data[i])\n",[39,61108,61109],{"class":41,"line":34146},[39,61110,61111],{"class":45},"      \u002F\u002F 调用函数\n",[39,61113,61114],{"class":41,"line":34152},[39,61115,61116],{"class":45},"      toggle()\n",[39,61118,61119],{"class":41,"line":34201},[39,61120,34516],{"class":45},[39,61122,61123],{"class":41,"line":34248},[39,61124,3458],{"emptyLinePlaceholder":1145},[39,61126,61127],{"class":41,"line":34253},[39,61128,61129],{"class":45},"    \u002F\u002F 2. 左侧按钮业务\n",[39,61131,61132],{"class":41,"line":34259},[39,61133,61134],{"class":45},"    \u002F\u002F 2.1 获取左侧按钮 \n",[39,61136,61137],{"class":41,"line":34278},[39,61138,61139],{"class":45},"    const prev = document.querySelector('.prev')\n",[39,61141,61142],{"class":41,"line":34284},[39,61143,61052],{"class":45},[39,61145,61146],{"class":41,"line":34304},[39,61147,61148],{"class":45},"    prev.addEventListener('click', function () {\n",[39,61150,61151],{"class":41,"line":34310},[39,61152,61153],{"class":45},"      i--\n",[39,61155,61156],{"class":41,"line":34316},[39,61157,61158],{"class":45},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[39,61160,61161],{"class":41,"line":34326},[39,61162,61163],{"class":45},"      \u002F\u002F if (i \u003C 0) {\n",[39,61165,61166],{"class":41,"line":34331},[39,61167,61168],{"class":45},"      \u002F\u002F   i = 7\n",[39,61170,61171],{"class":41,"line":34337},[39,61172,61091],{"class":45},[39,61174,61175],{"class":41,"line":34353},[39,61176,61177],{"class":45},"      i = i \u003C 0 ? data.length - 1 : i\n",[39,61179,61180],{"class":41,"line":34398},[39,61181,61101],{"class":45},[39,61183,61184],{"class":41,"line":34404},[39,61185,61106],{"class":45},[39,61187,61188],{"class":41,"line":34410},[39,61189,61111],{"class":45},[39,61191,61192],{"class":41,"line":34416},[39,61193,61116],{"class":45},[39,61195,61196],{"class":41,"line":34427},[39,61197,34516],{"class":45},[39,61199,61200],{"class":41,"line":34433},[39,61201,3458],{"emptyLinePlaceholder":1145},[39,61203,61204],{"class":41,"line":34439},[39,61205,61206],{"class":45},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[39,61208,61209],{"class":41,"line":34445},[39,61210,61211],{"class":45},"    function toggle() {\n",[39,61213,61214],{"class":41,"line":34463},[39,61215,61216],{"class":45},"      \u002F\u002F 1.4 渲染对应的数据\n",[39,61218,61219],{"class":41,"line":34477},[39,61220,61221],{"class":45},"      img.src = data[i].url\n",[39,61223,61224],{"class":41,"line":34486},[39,61225,61226],{"class":45},"      p.innerHTML = data[i].title\n",[39,61228,61229],{"class":41,"line":34495},[39,61230,61231],{"class":45},"      footer.style.backgroundColor = data[i].color\n",[39,61233,61234],{"class":41,"line":34504},[39,61235,61236],{"class":45},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[39,61238,61239],{"class":41,"line":34513},[39,61240,61241],{"class":45},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[39,61243,61244],{"class":41,"line":34519},[39,61245,61246],{"class":45},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[39,61248,61249],{"class":41,"line":34525},[39,61250,3245],{"class":45},[39,61252,61253],{"class":41,"line":34533},[39,61254,3458],{"emptyLinePlaceholder":1145},[39,61256,61257],{"class":41,"line":34538},[39,61258,61259],{"class":45},"    \u002F\u002F 3. 自动播放模块\n",[39,61261,61262],{"class":41,"line":34544},[39,61263,61264],{"class":45},"    let timerId = setInterval(function () {\n",[39,61266,61267],{"class":41,"line":34555},[39,61268,61269],{"class":45},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[39,61271,61272],{"class":41,"line":34561},[39,61273,61274],{"class":45},"      next.click()\n",[39,61276,61277],{"class":41,"line":34581},[39,61278,61279],{"class":45},"    }, 1000)\n",[39,61281,61282],{"class":41,"line":34587},[39,61283,3458],{"emptyLinePlaceholder":1145},[39,61285,61286],{"class":41,"line":34593},[39,61287,61288],{"class":45},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[39,61290,61291],{"class":41,"line":34599},[39,61292,61293],{"class":45},"    const slider = document.querySelector('.slider')\n",[39,61295,61296],{"class":41,"line":34616},[39,61297,61298],{"class":45},"    \u002F\u002F 注册事件\n",[39,61300,61301],{"class":41,"line":34622},[39,61302,61303],{"class":45},"    slider.addEventListener('mouseenter', function () {\n",[39,61305,61306],{"class":41,"line":34628},[39,61307,61308],{"class":45},"      \u002F\u002F 停止定时器\n",[39,61310,61311],{"class":41,"line":34634},[39,61312,61313],{"class":45},"      clearInterval(timerId)\n",[39,61315,61316],{"class":41,"line":34640},[39,61317,34516],{"class":45},[39,61319,61320],{"class":41,"line":34646},[39,61321,3458],{"emptyLinePlaceholder":1145},[39,61323,61324],{"class":41,"line":34673},[39,61325,61326],{"class":45},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[39,61328,61329],{"class":41,"line":34697},[39,61330,61298],{"class":45},[39,61332,61333],{"class":41,"line":34703},[39,61334,61335],{"class":45},"    slider.addEventListener('mouseleave', function () {\n",[39,61337,61338],{"class":41,"line":34709},[39,61339,61308],{"class":45},[39,61341,61342],{"class":41,"line":34715},[39,61343,61344],{"class":45},"      if (timerId) clearInterval(timerId)\n",[39,61346,61347],{"class":41,"line":34726},[39,61348,61349],{"class":45},"      \u002F\u002F 开启定时器\n",[39,61351,61352],{"class":41,"line":34737},[39,61353,61354],{"class":45},"      timerId = setInterval(function () {\n",[39,61356,61357],{"class":41,"line":34743},[39,61358,61359],{"class":45},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[39,61361,61362],{"class":41,"line":34760},[39,61363,61364],{"class":45},"        next.click()\n",[39,61366,61367],{"class":41,"line":34783},[39,61368,61369],{"class":45},"      }, 1000)\n",[39,61371,61372],{"class":41,"line":34806},[39,61373,34516],{"class":45},[39,61375,61376,61378,61380],{"class":41,"line":34812},[39,61377,53471],{"class":45},[39,61379,52867],{"class":52354},[39,61381,52361],{"class":45},[39,61383,61384,61386,61388],{"class":41,"line":34817},[39,61385,52839],{"class":45},[39,61387,52854],{"class":52354},[39,61389,52361],{"class":45},[39,61391,61392],{"class":41,"line":34826},[39,61393,3458],{"emptyLinePlaceholder":1145},[39,61395,61396,61398,61400],{"class":41,"line":34836},[39,61397,52839],{"class":45},[39,61399,51689],{"class":52354},[39,61401,52361],{"class":45},[23054,61403,61405],{"id":61404},"_3252-焦点事件","3.2.5.2 焦点事件",[19,61407,61408],{},"小米搜索框案例：",[29,61410,61412],{"className":51687,"code":61411,"language":51689,"meta":34,"style":34},"\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",[36,61413,61414,61424,61438,61442,61450,61464,61484,61504,61516,61524,61530,61540,61550,61562,61566,61570,61577,61581,61592,61596,61600,61607,61618,61631,61645,61649,61653,61662,61674,61686,61700,61713,61726,61744,61755,61759,61763,61772,61789,61793,61797,61804,61814,61824,61835,61848,61860,61876,61887,61899,61903,61907,61915,61926,61943,61955,61967,61978,61982,61986,61997,62008,62012,62020,62024,62032,62036,62044,62059,62082,62097,62128,62155,62182,62209,62236,62263,62290,62299,62307,62315,62320,62340,62360,62365,62370,62388,62393,62403,62408,62422,62427,62432,62449,62458,62470,62474,62482,62490,62494],{"__ignoreMap":34},[39,61415,61416,61418,61420,61422],{"class":41,"line":42},[39,61417,52351],{"class":45},[39,61419,52355],{"class":52354},[39,61421,52358],{"class":3021},[39,61423,52361],{"class":45},[39,61425,61426,61428,61430,61432,61434,61436],{"class":41,"line":74},[39,61427,2108],{"class":45},[39,61429,51689],{"class":52354},[39,61431,52370],{"class":3021},[39,61433,50],{"class":45},[39,61435,52375],{"class":1319},[39,61437,52361],{"class":45},[39,61439,61440],{"class":41,"line":99},[39,61441,3458],{"emptyLinePlaceholder":1145},[39,61443,61444,61446,61448],{"class":41,"line":106},[39,61445,2108],{"class":45},[39,61447,52388],{"class":52354},[39,61449,52361],{"class":45},[39,61451,61452,61454,61456,61458,61460,61462],{"class":41,"line":112},[39,61453,52395],{"class":45},[39,61455,52398],{"class":52354},[39,61457,52401],{"class":3021},[39,61459,50],{"class":45},[39,61461,52406],{"class":1319},[39,61463,52361],{"class":45},[39,61465,61466,61468,61470,61472,61474,61476,61478,61480,61482],{"class":41,"line":118},[39,61467,52395],{"class":45},[39,61469,52398],{"class":52354},[39,61471,52417],{"class":3021},[39,61473,50],{"class":45},[39,61475,52422],{"class":1319},[39,61477,52425],{"class":3021},[39,61479,50],{"class":45},[39,61481,52430],{"class":1319},[39,61483,52361],{"class":45},[39,61485,61486,61488,61490,61492,61494,61496,61498,61500,61502],{"class":41,"line":413},[39,61487,52395],{"class":45},[39,61489,52398],{"class":52354},[39,61491,15976],{"class":3021},[39,61493,50],{"class":45},[39,61495,52445],{"class":1319},[39,61497,52425],{"class":3021},[39,61499,50],{"class":45},[39,61501,52452],{"class":1319},[39,61503,52361],{"class":45},[39,61505,61506,61508,61510,61512,61514],{"class":41,"line":419},[39,61507,52395],{"class":45},[39,61509,52461],{"class":52354},[39,61511,52464],{"class":45},[39,61513,52461],{"class":52354},[39,61515,52361],{"class":45},[39,61517,61518,61520,61522],{"class":41,"line":425},[39,61519,52395],{"class":45},[39,61521,1133],{"class":52354},[39,61523,52361],{"class":45},[39,61525,61526,61528],{"class":41,"line":443},[39,61527,52481],{"class":52354},[39,61529,16628],{"class":45},[39,61531,61532,61534,61536,61538],{"class":41,"line":449},[39,61533,52488],{"class":56},[39,61535,52491],{"class":45},[39,61537,260],{"class":56},[39,61539,2359],{"class":45},[39,61541,61542,61544,61546,61548],{"class":41,"line":455},[39,61543,52500],{"class":56},[39,61545,52491],{"class":45},[39,61547,260],{"class":56},[39,61549,2359],{"class":45},[39,61551,61552,61555,61557,61560],{"class":41,"line":461},[39,61553,61554],{"class":56},"            box-sizing",[39,61556,52491],{"class":45},[39,61558,61559],{"class":56},"border-box",[39,61561,2359],{"class":45},[39,61563,61564],{"class":41,"line":475},[39,61565,3587],{"class":45},[39,61567,61568],{"class":41,"line":665},[39,61569,3458],{"emptyLinePlaceholder":1145},[39,61571,61572,61575],{"class":41,"line":671},[39,61573,61574],{"class":52354},"        ul",[39,61576,16628],{"class":45},[39,61578,61579],{"class":41,"line":684},[39,61580,3458],{"emptyLinePlaceholder":1145},[39,61582,61583,61586,61588,61590],{"class":41,"line":2732},[39,61584,61585],{"class":56},"            list-style",[39,61587,52491],{"class":45},[39,61589,55791],{"class":56},[39,61591,2359],{"class":45},[39,61593,61594],{"class":41,"line":2737},[39,61595,3587],{"class":45},[39,61597,61598],{"class":41,"line":2751},[39,61599,3458],{"emptyLinePlaceholder":1145},[39,61601,61602,61605],{"class":41,"line":2756},[39,61603,61604],{"class":3021},"        .mi",[39,61606,16628],{"class":45},[39,61608,61609,61612,61614,61616],{"class":41,"line":2785},[39,61610,61611],{"class":56},"            position",[39,61613,52491],{"class":45},[39,61615,55818],{"class":56},[39,61617,2359],{"class":45},[39,61619,61620,61622,61624,61627,61629],{"class":41,"line":2790},[39,61621,52538],{"class":56},[39,61623,52491],{"class":45},[39,61625,61626],{"class":56},"223",[39,61628,52546],{"class":49},[39,61630,2359],{"class":45},[39,61632,61633,61635,61637,61639,61641,61643],{"class":41,"line":2807},[39,61634,52488],{"class":56},[39,61636,52491],{"class":45},[39,61638,1519],{"class":56},[39,61640,52546],{"class":49},[39,61642,52610],{"class":56},[39,61644,2359],{"class":45},[39,61646,61647],{"class":41,"line":2812},[39,61648,3587],{"class":45},[39,61650,61651],{"class":41,"line":2817},[39,61652,3458],{"emptyLinePlaceholder":1145},[39,61654,61655,61657,61660],{"class":41,"line":2822},[39,61656,61604],{"class":3021},[39,61658,61659],{"class":52354}," input",[39,61661,16628],{"class":45},[39,61663,61664,61666,61668,61670,61672],{"class":41,"line":2836},[39,61665,52538],{"class":56},[39,61667,52491],{"class":45},[39,61669,61626],{"class":56},[39,61671,52546],{"class":49},[39,61673,2359],{"class":45},[39,61675,61676,61678,61680,61682,61684],{"class":41,"line":2841},[39,61677,52553],{"class":56},[39,61679,52491],{"class":45},[39,61681,1807],{"class":56},[39,61683,52546],{"class":49},[39,61685,2359],{"class":45},[39,61687,61688,61690,61692,61694,61696,61698],{"class":41,"line":3635},[39,61689,52500],{"class":56},[39,61691,52491],{"class":45},[39,61693,260],{"class":56},[39,61695,3096],{"class":56},[39,61697,52546],{"class":49},[39,61699,2359],{"class":45},[39,61701,61702,61705,61707,61709,61711],{"class":41,"line":3649},[39,61703,61704],{"class":56},"            font-size",[39,61706,52491],{"class":45},[39,61708,1749],{"class":56},[39,61710,52546],{"class":49},[39,61712,2359],{"class":45},[39,61714,61715,61718,61720,61722,61724],{"class":41,"line":3657},[39,61716,61717],{"class":56},"            line-height",[39,61719,52491],{"class":45},[39,61721,1807],{"class":56},[39,61723,52546],{"class":49},[39,61725,2359],{"class":45},[39,61727,61728,61731,61733,61735,61737,61739,61742],{"class":41,"line":3662},[39,61729,61730],{"class":56},"            border",[39,61732,52491],{"class":45},[39,61734,57],{"class":56},[39,61736,52546],{"class":49},[39,61738,52575],{"class":56},[39,61740,61741],{"class":56}," #e0e0e0",[39,61743,2359],{"class":45},[39,61745,61746,61749,61751,61753],{"class":41,"line":3668},[39,61747,61748],{"class":56},"            outline",[39,61750,52491],{"class":45},[39,61752,55791],{"class":56},[39,61754,2359],{"class":45},[39,61756,61757],{"class":41,"line":3674},[39,61758,3587],{"class":45},[39,61760,61761],{"class":41,"line":3679},[39,61762,3458],{"emptyLinePlaceholder":1145},[39,61764,61765,61767,61770],{"class":41,"line":9004},[39,61766,61604],{"class":3021},[39,61768,61769],{"class":3021}," .search",[39,61771,16628],{"class":45},[39,61773,61774,61776,61778,61780,61782,61784,61787],{"class":41,"line":9028},[39,61775,61730],{"class":56},[39,61777,52491],{"class":45},[39,61779,57],{"class":56},[39,61781,52546],{"class":49},[39,61783,52575],{"class":56},[39,61785,61786],{"class":56}," #ff6700",[39,61788,2359],{"class":45},[39,61790,61791],{"class":41,"line":9033},[39,61792,3587],{"class":45},[39,61794,61795],{"class":41,"line":9039},[39,61796,3458],{"emptyLinePlaceholder":1145},[39,61798,61799,61802],{"class":41,"line":9066},[39,61800,61801],{"class":3021},"        .result-list",[39,61803,16628],{"class":45},[39,61805,61806,61808,61810,61812],{"class":41,"line":9071},[39,61807,52526],{"class":56},[39,61809,52491],{"class":45},[39,61811,55791],{"class":56},[39,61813,2359],{"class":45},[39,61815,61816,61818,61820,61822],{"class":41,"line":9077},[39,61817,61611],{"class":56},[39,61819,52491],{"class":45},[39,61821,55885],{"class":56},[39,61823,2359],{"class":45},[39,61825,61826,61829,61831,61833],{"class":41,"line":9089},[39,61827,61828],{"class":56},"            left",[39,61830,52491],{"class":45},[39,61832,260],{"class":56},[39,61834,2359],{"class":45},[39,61836,61837,61840,61842,61844,61846],{"class":41,"line":9101},[39,61838,61839],{"class":56},"            top",[39,61841,52491],{"class":45},[39,61843,1807],{"class":56},[39,61845,52546],{"class":49},[39,61847,2359],{"class":45},[39,61849,61850,61852,61854,61856,61858],{"class":41,"line":9113},[39,61851,52538],{"class":56},[39,61853,52491],{"class":45},[39,61855,61626],{"class":56},[39,61857,52546],{"class":49},[39,61859,2359],{"class":45},[39,61861,61862,61864,61866,61868,61870,61872,61874],{"class":41,"line":10772},[39,61863,61730],{"class":56},[39,61865,52491],{"class":45},[39,61867,57],{"class":56},[39,61869,52546],{"class":49},[39,61871,52575],{"class":56},[39,61873,61786],{"class":56},[39,61875,2359],{"class":45},[39,61877,61878,61881,61883,61885],{"class":41,"line":10797},[39,61879,61880],{"class":56},"            border-top",[39,61882,52491],{"class":45},[39,61884,260],{"class":56},[39,61886,2359],{"class":45},[39,61888,61889,61892,61894,61897],{"class":41,"line":10820},[39,61890,61891],{"class":56},"            background",[39,61893,52491],{"class":45},[39,61895,61896],{"class":56},"#fff",[39,61898,2359],{"class":45},[39,61900,61901],{"class":41,"line":10844},[39,61902,3587],{"class":45},[39,61904,61905],{"class":41,"line":10849},[39,61906,3458],{"emptyLinePlaceholder":1145},[39,61908,61909,61911,61913],{"class":41,"line":10854},[39,61910,61801],{"class":3021},[39,61912,2464],{"class":52354},[39,61914,16628],{"class":45},[39,61916,61917,61919,61921,61924],{"class":41,"line":10859},[39,61918,52526],{"class":56},[39,61920,52491],{"class":45},[39,61922,61923],{"class":56},"block",[39,61925,2359],{"class":45},[39,61927,61928,61930,61932,61934,61936,61939,61941],{"class":41,"line":10868},[39,61929,52500],{"class":56},[39,61931,52491],{"class":45},[39,61933,94],{"class":56},[39,61935,52546],{"class":49},[39,61937,61938],{"class":56}," 15",[39,61940,52546],{"class":49},[39,61942,2359],{"class":45},[39,61944,61945,61947,61949,61951,61953],{"class":41,"line":10873},[39,61946,61704],{"class":56},[39,61948,52491],{"class":45},[39,61950,1699],{"class":56},[39,61952,52546],{"class":49},[39,61954,2359],{"class":45},[39,61956,61957,61960,61962,61965],{"class":41,"line":10879},[39,61958,61959],{"class":56},"            color",[39,61961,52491],{"class":45},[39,61963,61964],{"class":56},"#424242",[39,61966,2359],{"class":45},[39,61968,61969,61972,61974,61976],{"class":41,"line":10900},[39,61970,61971],{"class":56},"            text-decoration",[39,61973,52491],{"class":45},[39,61975,55791],{"class":56},[39,61977,2359],{"class":45},[39,61979,61980],{"class":41,"line":10906},[39,61981,3587],{"class":45},[39,61983,61984],{"class":41,"line":10920},[39,61985,3458],{"emptyLinePlaceholder":1145},[39,61987,61988,61990,61992,61995],{"class":41,"line":10926},[39,61989,61801],{"class":3021},[39,61991,2464],{"class":52354},[39,61993,61994],{"class":3021},":hover",[39,61996,16628],{"class":45},[39,61998,61999,62001,62003,62006],{"class":41,"line":10953},[39,62000,52694],{"class":56},[39,62002,52491],{"class":45},[39,62004,62005],{"class":56},"#eee",[39,62007,2359],{"class":45},[39,62009,62010],{"class":41,"line":10962},[39,62011,3587],{"class":45},[39,62013,62014,62016,62018],{"class":41,"line":10968},[39,62015,52830],{"class":45},[39,62017,1133],{"class":52354},[39,62019,52361],{"class":45},[39,62021,62022],{"class":41,"line":10976},[39,62023,3458],{"emptyLinePlaceholder":1145},[39,62025,62026,62028,62030],{"class":41,"line":10981},[39,62027,52839],{"class":45},[39,62029,52388],{"class":52354},[39,62031,52361],{"class":45},[39,62033,62034],{"class":41,"line":17660},[39,62035,3458],{"emptyLinePlaceholder":1145},[39,62037,62038,62040,62042],{"class":41,"line":17666},[39,62039,2108],{"class":45},[39,62041,52854],{"class":52354},[39,62043,52361],{"class":45},[39,62045,62046,62048,62050,62052,62054,62057],{"class":41,"line":17689},[39,62047,52395],{"class":45},[39,62049,52665],{"class":52354},[39,62051,54540],{"class":3021},[39,62053,50],{"class":45},[39,62055,62056],{"class":1319},"\"mi\"",[39,62058,52361],{"class":45},[39,62060,62061,62063,62065,62067,62069,62072,62075,62077,62080],{"class":41,"line":17695},[39,62062,56356],{"class":45},[39,62064,54875],{"class":52354},[39,62066,54878],{"class":3021},[39,62068,50],{"class":45},[39,62070,62071],{"class":1319},"\"search\"",[39,62073,62074],{"class":3021}," placeholder",[39,62076,50],{"class":45},[39,62078,62079],{"class":1319},"\"小米笔记本\"",[39,62081,52361],{"class":45},[39,62083,62084,62086,62088,62090,62092,62095],{"class":41,"line":17718},[39,62085,56356],{"class":45},[39,62087,2205],{"class":52354},[39,62089,54540],{"class":3021},[39,62091,50],{"class":45},[39,62093,62094],{"class":1319},"\"result-list\"",[39,62096,52361],{"class":45},[39,62098,62099,62102,62104,62107,62109,62112,62114,62117,62120,62122,62124,62126],{"class":41,"line":17732},[39,62100,62101],{"class":45},"            \u003C",[39,62103,1174],{"class":52354},[39,62105,62106],{"class":45},">\u003C",[39,62108,46],{"class":52354},[39,62110,62111],{"class":3021}," href",[39,62113,50],{"class":45},[39,62115,62116],{"class":1319},"\"#\"",[39,62118,62119],{"class":45},">全部商品\u003C\u002F",[39,62121,46],{"class":52354},[39,62123,56368],{"class":45},[39,62125,1174],{"class":52354},[39,62127,52361],{"class":45},[39,62129,62130,62132,62134,62136,62138,62140,62142,62144,62147,62149,62151,62153],{"class":41,"line":17752},[39,62131,62101],{"class":45},[39,62133,1174],{"class":52354},[39,62135,62106],{"class":45},[39,62137,46],{"class":52354},[39,62139,62111],{"class":3021},[39,62141,50],{"class":45},[39,62143,62116],{"class":1319},[39,62145,62146],{"class":45},">小米11\u003C\u002F",[39,62148,46],{"class":52354},[39,62150,56368],{"class":45},[39,62152,1174],{"class":52354},[39,62154,52361],{"class":45},[39,62156,62157,62159,62161,62163,62165,62167,62169,62171,62174,62176,62178,62180],{"class":41,"line":17758},[39,62158,62101],{"class":45},[39,62160,1174],{"class":52354},[39,62162,62106],{"class":45},[39,62164,46],{"class":52354},[39,62166,62111],{"class":3021},[39,62168,50],{"class":45},[39,62170,62116],{"class":1319},[39,62172,62173],{"class":45},">小米10S\u003C\u002F",[39,62175,46],{"class":52354},[39,62177,56368],{"class":45},[39,62179,1174],{"class":52354},[39,62181,52361],{"class":45},[39,62183,62184,62186,62188,62190,62192,62194,62196,62198,62201,62203,62205,62207],{"class":41,"line":17769},[39,62185,62101],{"class":45},[39,62187,1174],{"class":52354},[39,62189,62106],{"class":45},[39,62191,46],{"class":52354},[39,62193,62111],{"class":3021},[39,62195,50],{"class":45},[39,62197,62116],{"class":1319},[39,62199,62200],{"class":45},">小米笔记本\u003C\u002F",[39,62202,46],{"class":52354},[39,62204,56368],{"class":45},[39,62206,1174],{"class":52354},[39,62208,52361],{"class":45},[39,62210,62211,62213,62215,62217,62219,62221,62223,62225,62228,62230,62232,62234],{"class":41,"line":17792},[39,62212,62101],{"class":45},[39,62214,1174],{"class":52354},[39,62216,62106],{"class":45},[39,62218,46],{"class":52354},[39,62220,62111],{"class":3021},[39,62222,50],{"class":45},[39,62224,62116],{"class":1319},[39,62226,62227],{"class":45},">小米手机\u003C\u002F",[39,62229,46],{"class":52354},[39,62231,56368],{"class":45},[39,62233,1174],{"class":52354},[39,62235,52361],{"class":45},[39,62237,62238,62240,62242,62244,62246,62248,62250,62252,62255,62257,62259,62261],{"class":41,"line":17814},[39,62239,62101],{"class":45},[39,62241,1174],{"class":52354},[39,62243,62106],{"class":45},[39,62245,46],{"class":52354},[39,62247,62111],{"class":3021},[39,62249,50],{"class":45},[39,62251,62116],{"class":1319},[39,62253,62254],{"class":45},">黑鲨4\u003C\u002F",[39,62256,46],{"class":52354},[39,62258,56368],{"class":45},[39,62260,1174],{"class":52354},[39,62262,52361],{"class":45},[39,62264,62265,62267,62269,62271,62273,62275,62277,62279,62282,62284,62286,62288],{"class":41,"line":17819},[39,62266,62101],{"class":45},[39,62268,1174],{"class":52354},[39,62270,62106],{"class":45},[39,62272,46],{"class":52354},[39,62274,62111],{"class":3021},[39,62276,50],{"class":45},[39,62278,62116],{"class":1319},[39,62280,62281],{"class":45},">空调\u003C\u002F",[39,62283,46],{"class":52354},[39,62285,56368],{"class":45},[39,62287,1174],{"class":52354},[39,62289,52361],{"class":45},[39,62291,62292,62295,62297],{"class":41,"line":17825},[39,62293,62294],{"class":45},"        \u003C\u002F",[39,62296,2205],{"class":52354},[39,62298,52361],{"class":45},[39,62300,62301,62303,62305],{"class":41,"line":17839},[39,62302,52830],{"class":45},[39,62304,52665],{"class":52354},[39,62306,52361],{"class":45},[39,62308,62309,62311,62313],{"class":41,"line":17852},[39,62310,52395],{"class":45},[39,62312,52867],{"class":52354},[39,62314,52361],{"class":45},[39,62316,62317],{"class":41,"line":17857},[39,62318,62319],{"class":102},"        \u002F\u002F 1. 获取元素\n",[39,62321,62322,62325,62327,62329,62331,62333,62335,62338],{"class":41,"line":17871},[39,62323,62324],{"class":49},"        const",[39,62326,61659],{"class":56},[39,62328,14620],{"class":49},[39,62330,55450],{"class":45},[39,62332,55453],{"class":3021},[39,62334,1221],{"class":45},[39,62336,62337],{"class":1319},"'[type=search]'",[39,62339,209],{"class":45},[39,62341,62342,62344,62347,62349,62351,62353,62355,62358],{"class":41,"line":17876},[39,62343,62324],{"class":49},[39,62345,62346],{"class":56}," ul",[39,62348,14620],{"class":49},[39,62350,55450],{"class":45},[39,62352,55453],{"class":3021},[39,62354,1221],{"class":45},[39,62356,62357],{"class":1319},"'.result-list'",[39,62359,209],{"class":45},[39,62361,62362],{"class":41,"line":17882},[39,62363,62364],{"class":102},"        \u002F\u002F console.log(input)\n",[39,62366,62367],{"class":41,"line":17887},[39,62368,62369],{"class":102},"        \u002F\u002F 2. 监听事件 获得焦点\n",[39,62371,62372,62375,62377,62379,62382,62384,62386],{"class":41,"line":17901},[39,62373,62374],{"class":45},"        input.",[39,62376,58867],{"class":3021},[39,62378,1221],{"class":45},[39,62380,62381],{"class":1319},"'focus'",[39,62383,13491],{"class":45},[39,62385,55503],{"class":49},[39,62387,55506],{"class":45},[39,62389,62390],{"class":41,"line":17906},[39,62391,62392],{"class":102},"            \u002F\u002F ul显示\n",[39,62394,62395,62398,62400],{"class":41,"line":17911},[39,62396,62397],{"class":45},"            ul.style.display ",[39,62399,50],{"class":49},[39,62401,62402],{"class":1319}," 'block'\n",[39,62404,62405],{"class":41,"line":17925},[39,62406,62407],{"class":102},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[39,62409,62410,62413,62415,62417,62420],{"class":41,"line":17937},[39,62411,62412],{"class":45},"            input.classList.",[39,62414,6390],{"class":3021},[39,62416,1221],{"class":45},[39,62418,62419],{"class":1319},"'search'",[39,62421,209],{"class":45},[39,62423,62424],{"class":41,"line":17942},[39,62425,62426],{"class":45},"        })\n",[39,62428,62429],{"class":41,"line":17955},[39,62430,62431],{"class":102},"        \u002F\u002F 3. 监听事件 失去焦点\n",[39,62433,62434,62436,62438,62440,62443,62445,62447],{"class":41,"line":17960},[39,62435,62374],{"class":45},[39,62437,58867],{"class":3021},[39,62439,1221],{"class":45},[39,62441,62442],{"class":1319},"'blur'",[39,62444,13491],{"class":45},[39,62446,55503],{"class":49},[39,62448,55506],{"class":45},[39,62450,62451,62453,62455],{"class":41,"line":17965},[39,62452,62397],{"class":45},[39,62454,50],{"class":49},[39,62456,62457],{"class":1319}," 'none'\n",[39,62459,62460,62462,62464,62466,62468],{"class":41,"line":17970},[39,62461,62412],{"class":45},[39,62463,58060],{"class":3021},[39,62465,1221],{"class":45},[39,62467,62419],{"class":1319},[39,62469,209],{"class":45},[39,62471,62472],{"class":41,"line":17983},[39,62473,62426],{"class":45},[39,62475,62476,62478,62480],{"class":41,"line":17988},[39,62477,52830],{"class":45},[39,62479,52867],{"class":52354},[39,62481,52361],{"class":45},[39,62483,62484,62486,62488],{"class":41,"line":33688},[39,62485,52839],{"class":45},[39,62487,52854],{"class":52354},[39,62489,52361],{"class":45},[39,62491,62492],{"class":41,"line":33694},[39,62493,3458],{"emptyLinePlaceholder":1145},[39,62495,62496,62498,62500],{"class":41,"line":33700},[39,62497,52839],{"class":45},[39,62499,51689],{"class":52354},[39,62501,52361],{"class":45},[23054,62503,62505],{"id":62504},"_3253-键盘事件","3.2.5.3 键盘事件",[19,62507,62508],{},"评论字数统计案例",[19,62510,62511],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,62513,62514],{},"牢记focus伪类选择器",[52398,62516],{"charSet":62517},"UTF-8",[52398,62519],{"name":62520,"content":62521},"viewport","width=device-width, initial-scale=1.0",[52461,62523,62524],{},"Document",[1133,62526,62527],{},"\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",[54875,62529],{"type":6244},[2205,62531,62532,62535],{},[1174,62533,62534],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[1174,62536,62537],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[29,62539,62541],{"className":51687,"code":62540,"language":51689,"meta":34,"style":34},"\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",[36,62542,62543,62553,62567,62571,62579,62593,62613,62633,62646,62654,62661,62674,62688,62698,62708,62712,62716,62723,62735,62747,62759,62771,62800,62813,62817,62821,62830,62841,62853,62864,62875,62887,62898,62910,62926,62938,62942,62946,62957,62968,62978,62990,62994,62998,63006,63017,63027,63038,63050,63063,63075,63087,63091,63095,63104,63116,63127,63140,63151,63165,63169,63173,63180,63192,63204,63214,63218,63222,63231,63243,63253,63257,63261,63272,63282,63301,63314,63318,63322,63332,63342,63346,63350,63361,63372,63384,63396,63400,63404,63415,63426,63440,63444,63448,63459,63469,63481,63485,63493,63501,63505,63513,63528,63547,63587,63600,63608,63622,63642,63650,63665,63688,63706,63721,63741,63761,63781,63789,63797,63805,63813,63833,63853,63858,63875,63884,63888,63893,63909,63917,63921,63926,63943,63948,63973,63977,63981,63986,63991,63999,64007,64011],{"__ignoreMap":34},[39,62544,62545,62547,62549,62551],{"class":41,"line":42},[39,62546,52351],{"class":45},[39,62548,52355],{"class":52354},[39,62550,52358],{"class":3021},[39,62552,52361],{"class":45},[39,62554,62555,62557,62559,62561,62563,62565],{"class":41,"line":74},[39,62556,2108],{"class":45},[39,62558,51689],{"class":52354},[39,62560,52370],{"class":3021},[39,62562,50],{"class":45},[39,62564,52375],{"class":1319},[39,62566,52361],{"class":45},[39,62568,62569],{"class":41,"line":99},[39,62570,3458],{"emptyLinePlaceholder":1145},[39,62572,62573,62575,62577],{"class":41,"line":106},[39,62574,2108],{"class":45},[39,62576,52388],{"class":52354},[39,62578,52361],{"class":45},[39,62580,62581,62583,62585,62587,62589,62591],{"class":41,"line":112},[39,62582,53198],{"class":45},[39,62584,52398],{"class":52354},[39,62586,52401],{"class":3021},[39,62588,50],{"class":45},[39,62590,52406],{"class":1319},[39,62592,52361],{"class":45},[39,62594,62595,62597,62599,62601,62603,62605,62607,62609,62611],{"class":41,"line":118},[39,62596,53198],{"class":45},[39,62598,52398],{"class":52354},[39,62600,52417],{"class":3021},[39,62602,50],{"class":45},[39,62604,52422],{"class":1319},[39,62606,52425],{"class":3021},[39,62608,50],{"class":45},[39,62610,52430],{"class":1319},[39,62612,52361],{"class":45},[39,62614,62615,62617,62619,62621,62623,62625,62627,62629,62631],{"class":41,"line":413},[39,62616,53198],{"class":45},[39,62618,52398],{"class":52354},[39,62620,15976],{"class":3021},[39,62622,50],{"class":45},[39,62624,52445],{"class":1319},[39,62626,52425],{"class":3021},[39,62628,50],{"class":45},[39,62630,52452],{"class":1319},[39,62632,52361],{"class":45},[39,62634,62635,62637,62639,62642,62644],{"class":41,"line":419},[39,62636,53198],{"class":45},[39,62638,52461],{"class":52354},[39,62640,62641],{"class":45},">评论回车发布\u003C\u002F",[39,62643,52461],{"class":52354},[39,62645,52361],{"class":45},[39,62647,62648,62650,62652],{"class":41,"line":425},[39,62649,53198],{"class":45},[39,62651,1133],{"class":52354},[39,62653,52361],{"class":45},[39,62655,62656,62659],{"class":41,"line":443},[39,62657,62658],{"class":3021},"    .wrapper",[39,62660,16628],{"class":45},[39,62662,62663,62666,62668,62670,62672],{"class":41,"line":449},[39,62664,62665],{"class":56},"      min-width",[39,62667,52491],{"class":45},[39,62669,5045],{"class":56},[39,62671,52546],{"class":49},[39,62673,2359],{"class":45},[39,62675,62676,62679,62681,62684,62686],{"class":41,"line":455},[39,62677,62678],{"class":56},"      max-width",[39,62680,52491],{"class":45},[39,62682,62683],{"class":56},"800",[39,62685,52546],{"class":49},[39,62687,2359],{"class":45},[39,62689,62690,62692,62694,62696],{"class":41,"line":461},[39,62691,56063],{"class":56},[39,62693,52491],{"class":45},[39,62695,52531],{"class":56},[39,62697,2359],{"class":45},[39,62699,62700,62702,62704,62706],{"class":41,"line":475},[39,62701,56074],{"class":56},[39,62703,52491],{"class":45},[39,62705,52634],{"class":56},[39,62707,2359],{"class":45},[39,62709,62710],{"class":41,"line":665},[39,62711,3245],{"class":45},[39,62713,62714],{"class":41,"line":671},[39,62715,3458],{"emptyLinePlaceholder":1145},[39,62717,62718,62721],{"class":41,"line":684},[39,62719,62720],{"class":3021},"    .avatar",[39,62722,16628],{"class":45},[39,62724,62725,62727,62729,62731,62733],{"class":41,"line":2732},[39,62726,55825],{"class":56},[39,62728,52491],{"class":45},[39,62730,1807],{"class":56},[39,62732,52546],{"class":49},[39,62734,2359],{"class":45},[39,62736,62737,62739,62741,62743,62745],{"class":41,"line":2737},[39,62738,55839],{"class":56},[39,62740,52491],{"class":45},[39,62742,1807],{"class":56},[39,62744,52546],{"class":49},[39,62746,2359],{"class":45},[39,62748,62749,62751,62753,62755,62757],{"class":41,"line":2751},[39,62750,56188],{"class":56},[39,62752,52491],{"class":45},[39,62754,1855],{"class":56},[39,62756,1534],{"class":49},[39,62758,2359],{"class":45},[39,62760,62761,62764,62766,62769],{"class":41,"line":2756},[39,62762,62763],{"class":56},"      overflow",[39,62765,52491],{"class":45},[39,62767,62768],{"class":56},"hidden",[39,62770,2359],{"class":45},[39,62772,62773,62776,62778,62781,62783,62786,62788,62791,62793,62795,62798],{"class":41,"line":2785},[39,62774,62775],{"class":56},"      background",[39,62777,52491],{"class":45},[39,62779,62780],{"class":56},"url",[39,62782,1221],{"class":45},[39,62784,62785],{"class":254},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[39,62787,14770],{"class":45},[39,62789,62790],{"class":56},"no-repeat",[39,62792,18200],{"class":56},[39,62794,26035],{"class":45},[39,62796,62797],{"class":56},"cover",[39,62799,2359],{"class":45},[39,62801,62802,62805,62807,62809,62811],{"class":41,"line":2790},[39,62803,62804],{"class":56},"      margin-right",[39,62806,52491],{"class":45},[39,62808,1898],{"class":56},[39,62810,52546],{"class":49},[39,62812,2359],{"class":45},[39,62814,62815],{"class":41,"line":2807},[39,62816,3245],{"class":45},[39,62818,62819],{"class":41,"line":2812},[39,62820,3458],{"emptyLinePlaceholder":1145},[39,62822,62823,62825,62828],{"class":41,"line":2817},[39,62824,62658],{"class":3021},[39,62826,62827],{"class":52354}," textarea",[39,62829,16628],{"class":45},[39,62831,62832,62835,62837,62839],{"class":41,"line":2822},[39,62833,62834],{"class":56},"      outline",[39,62836,52491],{"class":45},[39,62838,55791],{"class":56},[39,62840,2359],{"class":45},[39,62842,62843,62846,62848,62851],{"class":41,"line":2836},[39,62844,62845],{"class":56},"      border-color",[39,62847,52491],{"class":45},[39,62849,62850],{"class":56},"transparent",[39,62852,2359],{"class":45},[39,62854,62855,62858,62860,62862],{"class":41,"line":2841},[39,62856,62857],{"class":56},"      resize",[39,62859,52491],{"class":45},[39,62861,55791],{"class":56},[39,62863,2359],{"class":45},[39,62865,62866,62868,62870,62873],{"class":41,"line":3635},[39,62867,62775],{"class":56},[39,62869,52491],{"class":45},[39,62871,62872],{"class":56},"#f5f5f5",[39,62874,2359],{"class":45},[39,62876,62877,62879,62881,62883,62885],{"class":41,"line":3649},[39,62878,56188],{"class":56},[39,62880,52491],{"class":45},[39,62882,84],{"class":56},[39,62884,52546],{"class":49},[39,62886,2359],{"class":45},[39,62888,62889,62892,62894,62896],{"class":41,"line":3657},[39,62890,62891],{"class":56},"      flex",[39,62893,52491],{"class":45},[39,62895,57],{"class":56},[39,62897,2359],{"class":45},[39,62899,62900,62902,62904,62906,62908],{"class":41,"line":3662},[39,62901,55749],{"class":56},[39,62903,52491],{"class":45},[39,62905,146],{"class":56},[39,62907,52546],{"class":49},[39,62909,2359],{"class":45},[39,62911,62912,62915,62917,62919,62922,62924],{"class":41,"line":3668},[39,62913,62914],{"class":56},"      transition",[39,62916,52491],{"class":45},[39,62918,29178],{"class":56},[39,62920,62921],{"class":56}," 0.5",[39,62923,392],{"class":49},[39,62925,2359],{"class":45},[39,62927,62928,62930,62932,62934,62936],{"class":41,"line":3674},[39,62929,55839],{"class":56},[39,62931,52491],{"class":45},[39,62933,2149],{"class":56},[39,62935,52546],{"class":49},[39,62937,2359],{"class":45},[39,62939,62940],{"class":41,"line":3679},[39,62941,3245],{"class":45},[39,62943,62944],{"class":41,"line":9004},[39,62945,3458],{"emptyLinePlaceholder":1145},[39,62947,62948,62950,62952,62955],{"class":41,"line":9028},[39,62949,62658],{"class":3021},[39,62951,62827],{"class":52354},[39,62953,62954],{"class":3021},":focus",[39,62956,16628],{"class":45},[39,62958,62959,62961,62963,62966],{"class":41,"line":9033},[39,62960,62845],{"class":56},[39,62962,52491],{"class":45},[39,62964,62965],{"class":56},"#e4e4e4",[39,62967,2359],{"class":45},[39,62969,62970,62972,62974,62976],{"class":41,"line":9039},[39,62971,62775],{"class":56},[39,62973,52491],{"class":45},[39,62975,61896],{"class":56},[39,62977,2359],{"class":45},[39,62979,62980,62982,62984,62986,62988],{"class":41,"line":9066},[39,62981,55839],{"class":56},[39,62983,52491],{"class":45},[39,62985,1855],{"class":56},[39,62987,52546],{"class":49},[39,62989,2359],{"class":45},[39,62991,62992],{"class":41,"line":9071},[39,62993,3245],{"class":45},[39,62995,62996],{"class":41,"line":9077},[39,62997,3458],{"emptyLinePlaceholder":1145},[39,62999,63000,63002,63004],{"class":41,"line":9089},[39,63001,62658],{"class":3021},[39,63003,58521],{"class":52354},[39,63005,16628],{"class":45},[39,63007,63008,63010,63012,63015],{"class":41,"line":9101},[39,63009,62775],{"class":56},[39,63011,52491],{"class":45},[39,63013,63014],{"class":56},"#00aeec",[39,63016,2359],{"class":45},[39,63018,63019,63021,63023,63025],{"class":41,"line":9113},[39,63020,58470],{"class":56},[39,63022,52491],{"class":45},[39,63024,61896],{"class":56},[39,63026,2359],{"class":45},[39,63028,63029,63032,63034,63036],{"class":41,"line":10772},[39,63030,63031],{"class":56},"      border",[39,63033,52491],{"class":45},[39,63035,55791],{"class":56},[39,63037,2359],{"class":45},[39,63039,63040,63042,63044,63046,63048],{"class":41,"line":10797},[39,63041,56188],{"class":56},[39,63043,52491],{"class":45},[39,63045,84],{"class":56},[39,63047,52546],{"class":49},[39,63049,2359],{"class":45},[39,63051,63052,63055,63057,63059,63061],{"class":41,"line":10820},[39,63053,63054],{"class":56},"      margin-left",[39,63056,52491],{"class":45},[39,63058,146],{"class":56},[39,63060,52546],{"class":49},[39,63062,2359],{"class":45},[39,63064,63065,63067,63069,63071,63073],{"class":41,"line":10844},[39,63066,55825],{"class":56},[39,63068,52491],{"class":45},[39,63070,1560],{"class":56},[39,63072,52546],{"class":49},[39,63074,2359],{"class":45},[39,63076,63077,63080,63082,63085],{"class":41,"line":10849},[39,63078,63079],{"class":56},"      cursor",[39,63081,52491],{"class":45},[39,63083,63084],{"class":56},"pointer",[39,63086,2359],{"class":45},[39,63088,63089],{"class":41,"line":10854},[39,63090,3245],{"class":45},[39,63092,63093],{"class":41,"line":10859},[39,63094,3458],{"emptyLinePlaceholder":1145},[39,63096,63097,63099,63102],{"class":41,"line":10868},[39,63098,62658],{"class":3021},[39,63100,63101],{"class":3021}," .total",[39,63103,16628],{"class":45},[39,63105,63106,63108,63110,63112,63114],{"class":41,"line":10873},[39,63107,62804],{"class":56},[39,63109,52491],{"class":45},[39,63111,1812],{"class":56},[39,63113,52546],{"class":49},[39,63115,2359],{"class":45},[39,63117,63118,63120,63122,63125],{"class":41,"line":10879},[39,63119,58470],{"class":56},[39,63121,52491],{"class":45},[39,63123,63124],{"class":56},"#999",[39,63126,2359],{"class":45},[39,63128,63129,63132,63134,63136,63138],{"class":41,"line":10900},[39,63130,63131],{"class":56},"      margin-top",[39,63133,52491],{"class":45},[39,63135,89],{"class":56},[39,63137,52546],{"class":49},[39,63139,2359],{"class":45},[39,63141,63142,63145,63147,63149],{"class":41,"line":10906},[39,63143,63144],{"class":56},"      opacity",[39,63146,52491],{"class":45},[39,63148,260],{"class":56},[39,63150,2359],{"class":45},[39,63152,63153,63155,63157,63159,63161,63163],{"class":41,"line":10920},[39,63154,62914],{"class":56},[39,63156,52491],{"class":45},[39,63158,29178],{"class":56},[39,63160,62921],{"class":56},[39,63162,392],{"class":49},[39,63164,2359],{"class":45},[39,63166,63167],{"class":41,"line":10926},[39,63168,3245],{"class":45},[39,63170,63171],{"class":41,"line":10953},[39,63172,3458],{"emptyLinePlaceholder":1145},[39,63174,63175,63178],{"class":41,"line":10962},[39,63176,63177],{"class":3021},"    .list",[39,63179,16628],{"class":45},[39,63181,63182,63184,63186,63188,63190],{"class":41,"line":10968},[39,63183,62665],{"class":56},[39,63185,52491],{"class":45},[39,63187,5045],{"class":56},[39,63189,52546],{"class":49},[39,63191,2359],{"class":45},[39,63193,63194,63196,63198,63200,63202],{"class":41,"line":10976},[39,63195,62678],{"class":56},[39,63197,52491],{"class":45},[39,63199,62683],{"class":56},[39,63201,52546],{"class":49},[39,63203,2359],{"class":45},[39,63205,63206,63208,63210,63212],{"class":41,"line":10981},[39,63207,56063],{"class":56},[39,63209,52491],{"class":45},[39,63211,52531],{"class":56},[39,63213,2359],{"class":45},[39,63215,63216],{"class":41,"line":17660},[39,63217,3245],{"class":45},[39,63219,63220],{"class":41,"line":17666},[39,63221,3458],{"emptyLinePlaceholder":1145},[39,63223,63224,63226,63229],{"class":41,"line":17689},[39,63225,63177],{"class":3021},[39,63227,63228],{"class":3021}," .item",[39,63230,16628],{"class":45},[39,63232,63233,63235,63237,63239,63241],{"class":41,"line":17695},[39,63234,55825],{"class":56},[39,63236,52491],{"class":45},[39,63238,1519],{"class":56},[39,63240,1534],{"class":49},[39,63242,2359],{"class":45},[39,63244,63245,63247,63249,63251],{"class":41,"line":17718},[39,63246,56063],{"class":56},[39,63248,52491],{"class":45},[39,63250,52531],{"class":56},[39,63252,2359],{"class":45},[39,63254,63255],{"class":41,"line":17732},[39,63256,3245],{"class":45},[39,63258,63259],{"class":41,"line":17752},[39,63260,3458],{"emptyLinePlaceholder":1145},[39,63262,63263,63265,63267,63270],{"class":41,"line":17758},[39,63264,63177],{"class":3021},[39,63266,63228],{"class":3021},[39,63268,63269],{"class":3021}," .info",[39,63271,16628],{"class":45},[39,63273,63274,63276,63278,63280],{"class":41,"line":17769},[39,63275,62891],{"class":56},[39,63277,52491],{"class":45},[39,63279,57],{"class":56},[39,63281,2359],{"class":45},[39,63283,63284,63287,63289,63291,63293,63296,63299],{"class":41,"line":17792},[39,63285,63286],{"class":56},"      border-bottom",[39,63288,52491],{"class":45},[39,63290,57],{"class":56},[39,63292,52546],{"class":49},[39,63294,63295],{"class":56}," dashed",[39,63297,63298],{"class":56}," #e4e4e4",[39,63300,2359],{"class":45},[39,63302,63303,63306,63308,63310,63312],{"class":41,"line":17814},[39,63304,63305],{"class":56},"      padding-bottom",[39,63307,52491],{"class":45},[39,63309,146],{"class":56},[39,63311,52546],{"class":49},[39,63313,2359],{"class":45},[39,63315,63316],{"class":41,"line":17819},[39,63317,3245],{"class":45},[39,63319,63320],{"class":41,"line":17825},[39,63321,3458],{"emptyLinePlaceholder":1145},[39,63323,63324,63326,63328,63330],{"class":41,"line":17839},[39,63325,63177],{"class":3021},[39,63327,63228],{"class":3021},[39,63329,7881],{"class":52354},[39,63331,16628],{"class":45},[39,63333,63334,63336,63338,63340],{"class":41,"line":17852},[39,63335,55760],{"class":56},[39,63337,52491],{"class":45},[39,63339,260],{"class":56},[39,63341,2359],{"class":45},[39,63343,63344],{"class":41,"line":17857},[39,63345,3245],{"class":45},[39,63347,63348],{"class":41,"line":17871},[39,63349,3458],{"emptyLinePlaceholder":1145},[39,63351,63352,63354,63356,63359],{"class":41,"line":17876},[39,63353,63177],{"class":3021},[39,63355,63228],{"class":3021},[39,63357,63358],{"class":3021}," .name",[39,63360,16628],{"class":45},[39,63362,63363,63365,63367,63370],{"class":41,"line":17882},[39,63364,58470],{"class":56},[39,63366,52491],{"class":45},[39,63368,63369],{"class":56},"#FB7299",[39,63371,2359],{"class":45},[39,63373,63374,63376,63378,63380,63382],{"class":41,"line":17887},[39,63375,55976],{"class":56},[39,63377,52491],{"class":45},[39,63379,1749],{"class":56},[39,63381,52546],{"class":49},[39,63383,2359],{"class":45},[39,63385,63386,63389,63391,63394],{"class":41,"line":17901},[39,63387,63388],{"class":56},"      font-weight",[39,63390,52491],{"class":45},[39,63392,63393],{"class":56},"bold",[39,63395,2359],{"class":45},[39,63397,63398],{"class":41,"line":17906},[39,63399,3245],{"class":45},[39,63401,63402],{"class":41,"line":17911},[39,63403,3458],{"emptyLinePlaceholder":1145},[39,63405,63406,63408,63410,63413],{"class":41,"line":17925},[39,63407,63177],{"class":3021},[39,63409,63228],{"class":3021},[39,63411,63412],{"class":3021}," .text",[39,63414,16628],{"class":45},[39,63416,63417,63419,63421,63424],{"class":41,"line":17937},[39,63418,58470],{"class":56},[39,63420,52491],{"class":45},[39,63422,63423],{"class":56},"#333",[39,63425,2359],{"class":45},[39,63427,63428,63430,63432,63434,63436,63438],{"class":41,"line":17942},[39,63429,55749],{"class":56},[39,63431,52491],{"class":45},[39,63433,146],{"class":56},[39,63435,52546],{"class":49},[39,63437,5151],{"class":56},[39,63439,2359],{"class":45},[39,63441,63442],{"class":41,"line":17955},[39,63443,3245],{"class":45},[39,63445,63446],{"class":41,"line":17960},[39,63447,3458],{"emptyLinePlaceholder":1145},[39,63449,63450,63452,63454,63457],{"class":41,"line":17965},[39,63451,63177],{"class":3021},[39,63453,63228],{"class":3021},[39,63455,63456],{"class":3021}," .time",[39,63458,16628],{"class":45},[39,63460,63461,63463,63465,63467],{"class":41,"line":17970},[39,63462,58470],{"class":56},[39,63464,52491],{"class":45},[39,63466,63124],{"class":56},[39,63468,2359],{"class":45},[39,63470,63471,63473,63475,63477,63479],{"class":41,"line":17983},[39,63472,55976],{"class":56},[39,63474,52491],{"class":45},[39,63476,1699],{"class":56},[39,63478,52546],{"class":49},[39,63480,2359],{"class":45},[39,63482,63483],{"class":41,"line":17988},[39,63484,3245],{"class":45},[39,63486,63487,63489,63491],{"class":41,"line":33688},[39,63488,53471],{"class":45},[39,63490,1133],{"class":52354},[39,63492,52361],{"class":45},[39,63494,63495,63497,63499],{"class":41,"line":33694},[39,63496,52839],{"class":45},[39,63498,52388],{"class":52354},[39,63500,52361],{"class":45},[39,63502,63503],{"class":41,"line":33700},[39,63504,3458],{"emptyLinePlaceholder":1145},[39,63506,63507,63509,63511],{"class":41,"line":33706},[39,63508,2108],{"class":45},[39,63510,52854],{"class":52354},[39,63512,52361],{"class":45},[39,63514,63515,63517,63519,63521,63523,63526],{"class":41,"line":33712},[39,63516,53198],{"class":45},[39,63518,52665],{"class":52354},[39,63520,54540],{"class":3021},[39,63522,50],{"class":45},[39,63524,63525],{"class":1319},"\"wrapper\"",[39,63527,52361],{"class":45},[39,63529,63530,63532,63534,63536,63538,63541,63543,63545],{"class":41,"line":33723},[39,63531,52395],{"class":45},[39,63533,1644],{"class":52354},[39,63535,54540],{"class":3021},[39,63537,50],{"class":45},[39,63539,63540],{"class":1319},"\"avatar\"",[39,63542,56368],{"class":45},[39,63544,1644],{"class":52354},[39,63546,52361],{"class":45},[39,63548,63549,63551,63553,63555,63557,63560,63562,63564,63567,63569,63571,63573,63576,63578,63581,63583,63585],{"class":41,"line":33729},[39,63550,52395],{"class":45},[39,63552,55342],{"class":52354},[39,63554,16015],{"class":3021},[39,63556,50],{"class":45},[39,63558,63559],{"class":1319},"\"tx\"",[39,63561,62074],{"class":3021},[39,63563,50],{"class":45},[39,63565,63566],{"class":1319},"\"发一条友善的评论\"",[39,63568,55365],{"class":3021},[39,63570,50],{"class":45},[39,63572,4759],{"class":1319},[39,63574,63575],{"class":3021}," maxlength",[39,63577,50],{"class":45},[39,63579,63580],{"class":1319},"\"200\"",[39,63582,56368],{"class":45},[39,63584,55342],{"class":52354},[39,63586,52361],{"class":45},[39,63588,63589,63591,63593,63596,63598],{"class":41,"line":33749},[39,63590,52395],{"class":45},[39,63592,54941],{"class":52354},[39,63594,63595],{"class":45},">发布\u003C\u002F",[39,63597,54941],{"class":52354},[39,63599,52361],{"class":45},[39,63601,63602,63604,63606],{"class":41,"line":33755},[39,63603,53471],{"class":45},[39,63605,52665],{"class":52354},[39,63607,52361],{"class":45},[39,63609,63610,63612,63614,63616,63618,63620],{"class":41,"line":33766},[39,63611,53198],{"class":45},[39,63613,52665],{"class":52354},[39,63615,54540],{"class":3021},[39,63617,50],{"class":45},[39,63619,63525],{"class":1319},[39,63621,52361],{"class":45},[39,63623,63624,63626,63628,63630,63632,63635,63638,63640],{"class":41,"line":33772},[39,63625,52395],{"class":45},[39,63627,39],{"class":52354},[39,63629,54540],{"class":3021},[39,63631,50],{"class":45},[39,63633,63634],{"class":1319},"\"total\"",[39,63636,63637],{"class":45},">0\u002F200字\u003C\u002F",[39,63639,39],{"class":52354},[39,63641,52361],{"class":45},[39,63643,63644,63646,63648],{"class":41,"line":33778},[39,63645,53471],{"class":45},[39,63647,52665],{"class":52354},[39,63649,52361],{"class":45},[39,63651,63652,63654,63656,63658,63660,63663],{"class":41,"line":33784},[39,63653,53198],{"class":45},[39,63655,52665],{"class":52354},[39,63657,54540],{"class":3021},[39,63659,50],{"class":45},[39,63661,63662],{"class":1319},"\"list\"",[39,63664,52361],{"class":45},[39,63666,63667,63669,63671,63673,63675,63678,63681,63683,63686],{"class":41,"line":33790},[39,63668,52395],{"class":45},[39,63670,52665],{"class":52354},[39,63672,54540],{"class":3021},[39,63674,50],{"class":45},[39,63676,63677],{"class":1319},"\"item\"",[39,63679,63680],{"class":3021}," style",[39,63682,50],{"class":45},[39,63684,63685],{"class":1319},"\"display: none;\"",[39,63687,52361],{"class":45},[39,63689,63690,63692,63694,63696,63698,63700,63702,63704],{"class":41,"line":33796},[39,63691,56288],{"class":45},[39,63693,1644],{"class":52354},[39,63695,54540],{"class":3021},[39,63697,50],{"class":45},[39,63699,63540],{"class":1319},[39,63701,56368],{"class":45},[39,63703,1644],{"class":52354},[39,63705,52361],{"class":45},[39,63707,63708,63710,63712,63714,63716,63719],{"class":41,"line":33802},[39,63709,56288],{"class":45},[39,63711,52665],{"class":52354},[39,63713,54540],{"class":3021},[39,63715,50],{"class":45},[39,63717,63718],{"class":1319},"\"info\"",[39,63720,52361],{"class":45},[39,63722,63723,63725,63727,63729,63731,63734,63737,63739],{"class":41,"line":33808},[39,63724,56356],{"class":45},[39,63726,19],{"class":52354},[39,63728,54540],{"class":3021},[39,63730,50],{"class":45},[39,63732,63733],{"class":1319},"\"name\"",[39,63735,63736],{"class":45},">清风徐来\u003C\u002F",[39,63738,19],{"class":52354},[39,63740,52361],{"class":45},[39,63742,63743,63745,63747,63749,63751,63754,63757,63759],{"class":41,"line":33828},[39,63744,56356],{"class":45},[39,63746,19],{"class":52354},[39,63748,54540],{"class":3021},[39,63750,50],{"class":45},[39,63752,63753],{"class":1319},"\"text\"",[39,63755,63756],{"class":45},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[39,63758,19],{"class":52354},[39,63760,52361],{"class":45},[39,63762,63763,63765,63767,63769,63771,63774,63777,63779],{"class":41,"line":33834},[39,63764,56356],{"class":45},[39,63766,19],{"class":52354},[39,63768,54540],{"class":3021},[39,63770,50],{"class":45},[39,63772,63773],{"class":1319},"\"time\"",[39,63775,63776],{"class":45},">2022-10-10 20:29:21\u003C\u002F",[39,63778,19],{"class":52354},[39,63780,52361],{"class":45},[39,63782,63783,63785,63787],{"class":41,"line":33850},[39,63784,56461],{"class":45},[39,63786,52665],{"class":52354},[39,63788,52361],{"class":45},[39,63790,63791,63793,63795],{"class":41,"line":33856},[39,63792,52830],{"class":45},[39,63794,52665],{"class":52354},[39,63796,52361],{"class":45},[39,63798,63799,63801,63803],{"class":41,"line":33870},[39,63800,53471],{"class":45},[39,63802,52665],{"class":52354},[39,63804,52361],{"class":45},[39,63806,63807,63809,63811],{"class":41,"line":33876},[39,63808,53198],{"class":45},[39,63810,52867],{"class":52354},[39,63812,52361],{"class":45},[39,63814,63815,63817,63820,63822,63824,63826,63828,63831],{"class":41,"line":33891},[39,63816,12277],{"class":49},[39,63818,63819],{"class":56}," tx",[39,63821,14620],{"class":49},[39,63823,55450],{"class":45},[39,63825,55453],{"class":3021},[39,63827,1221],{"class":45},[39,63829,63830],{"class":1319},"'#tx'",[39,63832,209],{"class":45},[39,63834,63835,63837,63840,63842,63844,63846,63848,63851],{"class":41,"line":33897},[39,63836,12277],{"class":49},[39,63838,63839],{"class":56}," total",[39,63841,14620],{"class":49},[39,63843,55450],{"class":45},[39,63845,55453],{"class":3021},[39,63847,1221],{"class":45},[39,63849,63850],{"class":1319},"'.total'",[39,63852,209],{"class":45},[39,63854,63855],{"class":41,"line":33906},[39,63856,63857],{"class":102},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[39,63859,63860,63863,63865,63867,63869,63871,63873],{"class":41,"line":33912},[39,63861,63862],{"class":45},"    tx.",[39,63864,58867],{"class":3021},[39,63866,1221],{"class":45},[39,63868,62381],{"class":1319},[39,63870,13491],{"class":45},[39,63872,55503],{"class":49},[39,63874,55506],{"class":45},[39,63876,63877,63880,63882],{"class":41,"line":33921},[39,63878,63879],{"class":45},"      total.style.opacity ",[39,63881,50],{"class":49},[39,63883,56753],{"class":56},[39,63885,63886],{"class":41,"line":33927},[39,63887,34516],{"class":45},[39,63889,63890],{"class":41,"line":33933},[39,63891,63892],{"class":102},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[39,63894,63895,63897,63899,63901,63903,63905,63907],{"class":41,"line":33942},[39,63896,63862],{"class":45},[39,63898,58867],{"class":3021},[39,63900,1221],{"class":45},[39,63902,62442],{"class":1319},[39,63904,13491],{"class":45},[39,63906,55503],{"class":49},[39,63908,55506],{"class":45},[39,63910,63911,63913,63915],{"class":41,"line":33948},[39,63912,63879],{"class":45},[39,63914,50],{"class":49},[39,63916,48388],{"class":56},[39,63918,63919],{"class":41,"line":33959},[39,63920,34516],{"class":45},[39,63922,63923],{"class":41,"line":33965},[39,63924,63925],{"class":102},"    \u002F\u002F 3. 检测用户输入\n",[39,63927,63928,63930,63932,63934,63937,63939,63941],{"class":41,"line":33984},[39,63929,63862],{"class":45},[39,63931,58867],{"class":3021},[39,63933,1221],{"class":45},[39,63935,63936],{"class":1319},"'input'",[39,63938,13491],{"class":45},[39,63940,55503],{"class":49},[39,63942,55506],{"class":45},[39,63944,63945],{"class":41,"line":33990},[39,63946,63947],{"class":102},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[39,63949,63950,63953,63955,63958,63961,63963,63966,63968,63970],{"class":41,"line":34001},[39,63951,63952],{"class":45},"      total.innerHTML ",[39,63954,50],{"class":49},[39,63956,63957],{"class":1319}," `${",[39,63959,63960],{"class":45},"tx",[39,63962,1758],{"class":1319},[39,63964,63965],{"class":45},"value",[39,63967,1758],{"class":1319},[39,63969,53022],{"class":56},[39,63971,63972],{"class":1319},"}\u002F200字`\n",[39,63974,63975],{"class":41,"line":34007},[39,63976,34516],{"class":45},[39,63978,63979],{"class":41,"line":34027},[39,63980,3458],{"emptyLinePlaceholder":1145},[39,63982,63983],{"class":41,"line":34043},[39,63984,63985],{"class":102},"    \u002F\u002F const str = 'andy'\n",[39,63987,63988],{"class":41,"line":34049},[39,63989,63990],{"class":102},"    \u002F\u002F console.log(str.length)\n",[39,63992,63993,63995,63997],{"class":41,"line":34063},[39,63994,53471],{"class":45},[39,63996,52867],{"class":52354},[39,63998,52361],{"class":45},[39,64000,64001,64003,64005],{"class":41,"line":34069},[39,64002,52839],{"class":45},[39,64004,52854],{"class":52354},[39,64006,52361],{"class":45},[39,64008,64009],{"class":41,"line":34075},[39,64010,3458],{"emptyLinePlaceholder":1145},[39,64012,64013,64015,64017],{"class":41,"line":34086},[39,64014,52839],{"class":45},[39,64016,51689],{"class":52354},[39,64018,52361],{"class":45},[23054,64020,64022],{"id":64021},"_3254-change事件","3.2.5.4 change事件",[19,64024,64025],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64027,64028],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64030,64031],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[29,64033,64035],{"className":51687,"code":64034,"language":51689,"meta":34,"style":34},"\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",[36,64036,64037,64047,64061,64065,64073,64087,64107,64119,64127,64131,64139,64153,64161,64179,64197,64209,64213,64221,64229,64233],{"__ignoreMap":34},[39,64038,64039,64041,64043,64045],{"class":41,"line":42},[39,64040,52351],{"class":45},[39,64042,52355],{"class":52354},[39,64044,52358],{"class":3021},[39,64046,52361],{"class":45},[39,64048,64049,64051,64053,64055,64057,64059],{"class":41,"line":74},[39,64050,2108],{"class":45},[39,64052,51689],{"class":52354},[39,64054,52370],{"class":3021},[39,64056,50],{"class":45},[39,64058,52375],{"class":1319},[39,64060,52361],{"class":45},[39,64062,64063],{"class":41,"line":99},[39,64064,3458],{"emptyLinePlaceholder":1145},[39,64066,64067,64069,64071],{"class":41,"line":106},[39,64068,2108],{"class":45},[39,64070,52388],{"class":52354},[39,64072,52361],{"class":45},[39,64074,64075,64077,64079,64081,64083,64085],{"class":41,"line":112},[39,64076,53198],{"class":45},[39,64078,52398],{"class":52354},[39,64080,52401],{"class":3021},[39,64082,50],{"class":45},[39,64084,52406],{"class":1319},[39,64086,52361],{"class":45},[39,64088,64089,64091,64093,64095,64097,64099,64101,64103,64105],{"class":41,"line":118},[39,64090,53198],{"class":45},[39,64092,52398],{"class":52354},[39,64094,15976],{"class":3021},[39,64096,50],{"class":45},[39,64098,52445],{"class":1319},[39,64100,52425],{"class":3021},[39,64102,50],{"class":45},[39,64104,52452],{"class":1319},[39,64106,52361],{"class":45},[39,64108,64109,64111,64113,64115,64117],{"class":41,"line":413},[39,64110,53198],{"class":45},[39,64112,52461],{"class":52354},[39,64114,52464],{"class":45},[39,64116,52461],{"class":52354},[39,64118,52361],{"class":45},[39,64120,64121,64123,64125],{"class":41,"line":419},[39,64122,52839],{"class":45},[39,64124,52388],{"class":52354},[39,64126,52361],{"class":45},[39,64128,64129],{"class":41,"line":425},[39,64130,3458],{"emptyLinePlaceholder":1145},[39,64132,64133,64135,64137],{"class":41,"line":443},[39,64134,2108],{"class":45},[39,64136,52854],{"class":52354},[39,64138,52361],{"class":45},[39,64140,64141,64143,64145,64147,64149,64151],{"class":41,"line":449},[39,64142,53198],{"class":45},[39,64144,54875],{"class":52354},[39,64146,54878],{"class":3021},[39,64148,50],{"class":45},[39,64150,63753],{"class":1319},[39,64152,52361],{"class":45},[39,64154,64155,64157,64159],{"class":41,"line":455},[39,64156,53198],{"class":45},[39,64158,52867],{"class":52354},[39,64160,52361],{"class":45},[39,64162,64163,64165,64167,64169,64171,64173,64175,64177],{"class":41,"line":461},[39,64164,12277],{"class":49},[39,64166,61659],{"class":56},[39,64168,14620],{"class":49},[39,64170,55450],{"class":45},[39,64172,55453],{"class":3021},[39,64174,1221],{"class":45},[39,64176,63936],{"class":1319},[39,64178,209],{"class":45},[39,64180,64181,64184,64186,64188,64191,64193,64195],{"class":41,"line":475},[39,64182,64183],{"class":45},"    input.",[39,64185,58867],{"class":3021},[39,64187,1221],{"class":45},[39,64189,64190],{"class":1319},"'change'",[39,64192,13491],{"class":45},[39,64194,55503],{"class":49},[39,64196,55506],{"class":45},[39,64198,64199,64201,64203,64205,64207],{"class":41,"line":665},[39,64200,59298],{"class":45},[39,64202,59301],{"class":3021},[39,64204,1221],{"class":45},[39,64206,1793],{"class":56},[39,64208,209],{"class":45},[39,64210,64211],{"class":41,"line":671},[39,64212,34516],{"class":45},[39,64214,64215,64217,64219],{"class":41,"line":684},[39,64216,53471],{"class":45},[39,64218,52867],{"class":52354},[39,64220,52361],{"class":45},[39,64222,64223,64225,64227],{"class":41,"line":2732},[39,64224,52839],{"class":45},[39,64226,52854],{"class":52354},[39,64228,52361],{"class":45},[39,64230,64231],{"class":41,"line":2737},[39,64232,3458],{"emptyLinePlaceholder":1145},[39,64234,64235,64237,64239],{"class":41,"line":2751},[39,64236,52839],{"class":45},[39,64238,51689],{"class":52354},[39,64240,52361],{"class":45},[19,64242,64243],{},"总结：内容发生改变才回去触发",[1188,64245,64247],{"id":64246},"_326-事件对象","3.2.6 事件对象",[23054,64249,64251],{"id":64250},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,64253,64254],{},[269,64255],{"alt":34,"src":64256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,64258,64259],{},[269,64260],{"alt":34,"src":64261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,64263,64264],{},"点击一次，就输出了事件对象，它是个对象",[19,64266,64267],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,64269,64270],{},[269,64271],{"alt":34,"src":64272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23054,64274,64276],{"id":64275},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,64278,64279],{},[269,64280],{"alt":34,"src":64281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,64283,64284],{},"实现按特殊字符才是实现打印输出效果：",[29,64286,64288],{"className":54121,"code":64287,"language":54123,"meta":34,"style":34},"\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",[36,64289,64290,64298,64303,64317,64325,64330,64335,64340,64345,64350,64355,64360,64365,64370,64374,64378,64386],{"__ignoreMap":34},[39,64291,64292,64294,64296],{"class":41,"line":42},[39,64293,2108],{"class":45},[39,64295,52854],{"class":52354},[39,64297,52361],{"class":45},[39,64299,64300],{"class":41,"line":74},[39,64301,64302],{"class":102},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[39,64304,64305,64307,64309,64311,64313,64315],{"class":41,"line":99},[39,64306,53198],{"class":45},[39,64308,54875],{"class":52354},[39,64310,54878],{"class":3021},[39,64312,50],{"class":45},[39,64314,63753],{"class":1319},[39,64316,52361],{"class":45},[39,64318,64319,64321,64323],{"class":41,"line":106},[39,64320,53198],{"class":45},[39,64322,52867],{"class":52354},[39,64324,52361],{"class":45},[39,64326,64327],{"class":41,"line":112},[39,64328,64329],{"class":45},"    \u002F\u002F const btn = document.querySelector('button')\n",[39,64331,64332],{"class":41,"line":118},[39,64333,64334],{"class":45},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[39,64336,64337],{"class":41,"line":413},[39,64338,64339],{"class":45},"    \u002F\u002F   console.log(e);\n",[39,64341,64342],{"class":41,"line":419},[39,64343,64344],{"class":45},"    \u002F\u002F })\n",[39,64346,64347],{"class":41,"line":425},[39,64348,64349],{"class":45},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[39,64351,64352],{"class":41,"line":443},[39,64353,64354],{"class":45},"    const input = document.querySelector('input')\n",[39,64356,64357],{"class":41,"line":449},[39,64358,64359],{"class":45},"    input.addEventListener('keyup', function (e) {\n",[39,64361,64362],{"class":41,"line":455},[39,64363,64364],{"class":45},"      if (e.key === 'Enter') {\n",[39,64366,64367],{"class":41,"line":461},[39,64368,64369],{"class":45},"        console.log('我按下了回车键')\n",[39,64371,64372],{"class":41,"line":475},[39,64373,53452],{"class":45},[39,64375,64376],{"class":41,"line":665},[39,64377,34516],{"class":45},[39,64379,64380,64382,64384],{"class":41,"line":671},[39,64381,53471],{"class":45},[39,64383,52867],{"class":52354},[39,64385,52361],{"class":45},[39,64387,64388,64390,64392],{"class":41,"line":684},[39,64389,52839],{"class":45},[39,64391,52854],{"class":52354},[39,64393,52361],{"class":45},[23054,64395,64397],{"id":64396},"_3263-trim方法","3.2.6.3 trim方法",[19,64399,64400],{},[269,64401],{"alt":34,"src":64402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,64404,64405],{},[269,64406],{"alt":34,"src":64407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,64409,64410],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,64412,64413],{},"str.trim()",[1188,64415,64417],{"id":64416},"_327-环境对象","3.2.7 环境对象",[19,64419,64420],{},[269,64421],{"alt":34,"src":64422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,64424,64425],{},[269,64426],{"alt":34,"src":64427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,64429,64430],{},[269,64431],{"alt":34,"src":64432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,64434,64435],{},"实际函数调用是window.fn()",[19,64437,64438],{},"普通函数里面this指向的是window",[2205,64440,64441,64444,64447],{},[1174,64442,64443],{},"在普通函数下，this指向的是window",[1174,64445,64446],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[1174,64448,64449],{},"箭头函数没有this",[19,64451,64452],{},"粗略记法就是：谁调用，this就指向谁",[19,64454,64455],{},[269,64456],{"alt":34,"src":64457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,64459,64460],{},[269,64461],{"alt":34,"src":64462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,64464,64465],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,64467,64468],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[29,64470,64472],{"className":54121,"code":64471,"language":54123,"meta":34,"style":34},"\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",[36,64473,64474,64482,64494,64502,64507,64512,64517,64522,64526,64534],{"__ignoreMap":34},[39,64475,64476,64478,64480],{"class":41,"line":42},[39,64477,2108],{"class":45},[39,64479,52854],{"class":52354},[39,64481,52361],{"class":45},[39,64483,64484,64486,64488,64490,64492],{"class":41,"line":74},[39,64485,53198],{"class":45},[39,64487,54941],{"class":52354},[39,64489,54947],{"class":45},[39,64491,54941],{"class":52354},[39,64493,52361],{"class":45},[39,64495,64496,64498,64500],{"class":41,"line":99},[39,64497,53198],{"class":45},[39,64499,52867],{"class":52354},[39,64501,52361],{"class":45},[39,64503,64504],{"class":41,"line":106},[39,64505,64506],{"class":45},"    const button = document.querySelector('button')\n",[39,64508,64509],{"class":41,"line":112},[39,64510,64511],{"class":45},"    button.addEventListener('click', function () {\n",[39,64513,64514],{"class":41,"line":118},[39,64515,64516],{"class":45},"      \u002F\u002F console.log(this);\n",[39,64518,64519],{"class":41,"line":413},[39,64520,64521],{"class":45},"      this.style.color = 'pink'\n",[39,64523,64524],{"class":41,"line":419},[39,64525,34516],{"class":45},[39,64527,64528,64530,64532],{"class":41,"line":425},[39,64529,53471],{"class":45},[39,64531,52867],{"class":52354},[39,64533,52361],{"class":45},[39,64535,64536,64538,64540],{"class":41,"line":443},[39,64537,52839],{"class":45},[39,64539,52854],{"class":52354},[39,64541,52361],{"class":45},[1188,64543,64545],{"id":64544},"_328-回调函数","3.2.8 回调函数",[19,64547,64548],{},[269,64549],{"alt":34,"src":64550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,64552,64553],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,64555,12388],{},[2205,64557,64558,64561,64564],{},[1174,64559,64560],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[1174,64562,64563],{},"回调函数本质还是函数，只不过把它当成参数使用",[1174,64565,64566],{},"使用匿名函数做为回调函数比较常见",[1188,64568,64570],{"id":64569},"_329-tab栏切换","3.2.9 tab栏切换",[19,64572,64573],{},[269,64574],{"alt":34,"src":64575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[29,64577,64579],{"className":51687,"code":64578,"language":51689,"meta":34,"style":34},"\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",[36,64580,64581,64591,64605,64609,64617,64631,64651,64671,64684,64692,64698,64708,64718,64722,64726,64733,64746,64759,64771,64787,64791,64795,64802,64814,64826,64838,64848,64858,64862,64866,64875,64887,64898,64910,64914,64918,64926,64936,64946,64956,64960,64964,64974,64988,65000,65004,65008,65020,65031,65048,65058,65062,65066,65081,65092,65102,65106,65110,65117,65132,65136,65140,65148,65158,65162,65166,65175,65185,65189,65197,65205,65209,65217,65232,65247,65260,65268,65302,65329,65356,65383,65410,65418,65426,65441,65478,65513,65548,65583,65618,65626,65634,65642,65647,65652,65672,65677,65706,65711,65716,65734,65739,65744,65749,65771,65776,65792,65796,65801,65806,65827,65832,65861,65865,65870,65874,65882,65890,65894],{"__ignoreMap":34},[39,64582,64583,64585,64587,64589],{"class":41,"line":42},[39,64584,52351],{"class":45},[39,64586,52355],{"class":52354},[39,64588,52358],{"class":3021},[39,64590,52361],{"class":45},[39,64592,64593,64595,64597,64599,64601,64603],{"class":41,"line":74},[39,64594,2108],{"class":45},[39,64596,51689],{"class":52354},[39,64598,52370],{"class":3021},[39,64600,50],{"class":45},[39,64602,52375],{"class":1319},[39,64604,52361],{"class":45},[39,64606,64607],{"class":41,"line":99},[39,64608,3458],{"emptyLinePlaceholder":1145},[39,64610,64611,64613,64615],{"class":41,"line":106},[39,64612,2108],{"class":45},[39,64614,52388],{"class":52354},[39,64616,52361],{"class":45},[39,64618,64619,64621,64623,64625,64627,64629],{"class":41,"line":112},[39,64620,53198],{"class":45},[39,64622,52398],{"class":52354},[39,64624,52401],{"class":3021},[39,64626,50],{"class":45},[39,64628,52406],{"class":1319},[39,64630,60181],{"class":45},[39,64632,64633,64635,64637,64639,64641,64643,64645,64647,64649],{"class":41,"line":118},[39,64634,53198],{"class":45},[39,64636,52398],{"class":52354},[39,64638,52417],{"class":3021},[39,64640,50],{"class":45},[39,64642,52422],{"class":1319},[39,64644,52425],{"class":3021},[39,64646,50],{"class":45},[39,64648,52430],{"class":1319},[39,64650,60181],{"class":45},[39,64652,64653,64655,64657,64659,64661,64663,64665,64667,64669],{"class":41,"line":413},[39,64654,53198],{"class":45},[39,64656,52398],{"class":52354},[39,64658,15976],{"class":3021},[39,64660,50],{"class":45},[39,64662,52445],{"class":1319},[39,64664,52425],{"class":3021},[39,64666,50],{"class":45},[39,64668,52452],{"class":1319},[39,64670,60181],{"class":45},[39,64672,64673,64675,64677,64680,64682],{"class":41,"line":419},[39,64674,53198],{"class":45},[39,64676,52461],{"class":52354},[39,64678,64679],{"class":45},">tab栏切换\u003C\u002F",[39,64681,52461],{"class":52354},[39,64683,52361],{"class":45},[39,64685,64686,64688,64690],{"class":41,"line":425},[39,64687,53198],{"class":45},[39,64689,1133],{"class":52354},[39,64691,52361],{"class":45},[39,64693,64694,64696],{"class":41,"line":443},[39,64695,7459],{"class":52354},[39,64697,16628],{"class":45},[39,64699,64700,64702,64704,64706],{"class":41,"line":449},[39,64701,55760],{"class":56},[39,64703,52491],{"class":45},[39,64705,260],{"class":56},[39,64707,2359],{"class":45},[39,64709,64710,64712,64714,64716],{"class":41,"line":455},[39,64711,55749],{"class":56},[39,64713,52491],{"class":45},[39,64715,260],{"class":56},[39,64717,2359],{"class":45},[39,64719,64720],{"class":41,"line":461},[39,64721,3245],{"class":45},[39,64723,64724],{"class":41,"line":475},[39,64725,3458],{"emptyLinePlaceholder":1145},[39,64727,64728,64731],{"class":41,"line":665},[39,64729,64730],{"class":3021},"    .tab",[39,64732,16628],{"class":45},[39,64734,64735,64737,64739,64742,64744],{"class":41,"line":671},[39,64736,55825],{"class":56},[39,64738,52491],{"class":45},[39,64740,64741],{"class":56},"590",[39,64743,52546],{"class":49},[39,64745,2359],{"class":45},[39,64747,64748,64750,64752,64755,64757],{"class":41,"line":684},[39,64749,55839],{"class":56},[39,64751,52491],{"class":45},[39,64753,64754],{"class":56},"340",[39,64756,52546],{"class":49},[39,64758,2359],{"class":45},[39,64760,64761,64763,64765,64767,64769],{"class":41,"line":2732},[39,64762,55760],{"class":56},[39,64764,52491],{"class":45},[39,64766,1898],{"class":56},[39,64768,52546],{"class":49},[39,64770,2359],{"class":45},[39,64772,64773,64775,64777,64779,64781,64783,64785],{"class":41,"line":2737},[39,64774,63031],{"class":56},[39,64776,52491],{"class":45},[39,64778,57],{"class":56},[39,64780,52546],{"class":49},[39,64782,52575],{"class":56},[39,64784,63298],{"class":56},[39,64786,2359],{"class":45},[39,64788,64789],{"class":41,"line":2751},[39,64790,3245],{"class":45},[39,64792,64793],{"class":41,"line":2756},[39,64794,3458],{"emptyLinePlaceholder":1145},[39,64796,64797,64800],{"class":41,"line":2785},[39,64798,64799],{"class":3021},"    .tab-nav",[39,64801,16628],{"class":45},[39,64803,64804,64806,64808,64810,64812],{"class":41,"line":2790},[39,64805,55825],{"class":56},[39,64807,52491],{"class":45},[39,64809,1519],{"class":56},[39,64811,1534],{"class":49},[39,64813,2359],{"class":45},[39,64815,64816,64818,64820,64822,64824],{"class":41,"line":2807},[39,64817,55839],{"class":56},[39,64819,52491],{"class":45},[39,64821,2105],{"class":56},[39,64823,52546],{"class":49},[39,64825,2359],{"class":45},[39,64827,64828,64830,64832,64834,64836],{"class":41,"line":2812},[39,64829,58413],{"class":56},[39,64831,52491],{"class":45},[39,64833,2105],{"class":56},[39,64835,52546],{"class":49},[39,64837,2359],{"class":45},[39,64839,64840,64842,64844,64846],{"class":41,"line":2817},[39,64841,56063],{"class":56},[39,64843,52491],{"class":45},[39,64845,52531],{"class":56},[39,64847,2359],{"class":45},[39,64849,64850,64852,64854,64856],{"class":41,"line":2822},[39,64851,56074],{"class":56},[39,64853,52491],{"class":45},[39,64855,52722],{"class":56},[39,64857,2359],{"class":45},[39,64859,64860],{"class":41,"line":2836},[39,64861,3245],{"class":45},[39,64863,64864],{"class":41,"line":2841},[39,64865,3458],{"emptyLinePlaceholder":1145},[39,64867,64868,64870,64873],{"class":41,"line":3635},[39,64869,64799],{"class":3021},[39,64871,64872],{"class":52354}," h3",[39,64874,16628],{"class":45},[39,64876,64877,64879,64881,64883,64885],{"class":41,"line":3649},[39,64878,55976],{"class":56},[39,64880,52491],{"class":45},[39,64882,1998],{"class":56},[39,64884,52546],{"class":49},[39,64886,2359],{"class":45},[39,64888,64889,64891,64893,64896],{"class":41,"line":3657},[39,64890,63388],{"class":56},[39,64892,52491],{"class":45},[39,64894,64895],{"class":56},"normal",[39,64897,2359],{"class":45},[39,64899,64900,64902,64904,64906,64908],{"class":41,"line":3662},[39,64901,63054],{"class":56},[39,64903,52491],{"class":45},[39,64905,1898],{"class":56},[39,64907,52546],{"class":49},[39,64909,2359],{"class":45},[39,64911,64912],{"class":41,"line":3668},[39,64913,3245],{"class":45},[39,64915,64916],{"class":41,"line":3674},[39,64917,3458],{"emptyLinePlaceholder":1145},[39,64919,64920,64922,64924],{"class":41,"line":3679},[39,64921,64799],{"class":3021},[39,64923,62346],{"class":52354},[39,64925,16628],{"class":45},[39,64927,64928,64930,64932,64934],{"class":41,"line":9004},[39,64929,55786],{"class":56},[39,64931,52491],{"class":45},[39,64933,55791],{"class":56},[39,64935,2359],{"class":45},[39,64937,64938,64940,64942,64944],{"class":41,"line":9028},[39,64939,56063],{"class":56},[39,64941,52491],{"class":45},[39,64943,52531],{"class":56},[39,64945,2359],{"class":45},[39,64947,64948,64950,64952,64954],{"class":41,"line":9033},[39,64949,56074],{"class":56},[39,64951,52491],{"class":45},[39,64953,52634],{"class":56},[39,64955,2359],{"class":45},[39,64957,64958],{"class":41,"line":9039},[39,64959,3245],{"class":45},[39,64961,64962],{"class":41,"line":9066},[39,64963,3458],{"emptyLinePlaceholder":1145},[39,64965,64966,64968,64970,64972],{"class":41,"line":9071},[39,64967,64799],{"class":3021},[39,64969,62346],{"class":52354},[39,64971,56129],{"class":52354},[39,64973,16628],{"class":45},[39,64975,64976,64978,64980,64982,64984,64986],{"class":41,"line":9077},[39,64977,55760],{"class":56},[39,64979,52491],{"class":45},[39,64981,260],{"class":56},[39,64983,10006],{"class":56},[39,64985,52546],{"class":49},[39,64987,2359],{"class":45},[39,64989,64990,64992,64994,64996,64998],{"class":41,"line":9089},[39,64991,55976],{"class":56},[39,64993,52491],{"class":45},[39,64995,1749],{"class":56},[39,64997,52546],{"class":49},[39,64999,2359],{"class":45},[39,65001,65002],{"class":41,"line":9101},[39,65003,3245],{"class":45},[39,65005,65006],{"class":41,"line":9113},[39,65007,3458],{"emptyLinePlaceholder":1145},[39,65009,65010,65012,65014,65016,65018],{"class":41,"line":10772},[39,65011,64799],{"class":3021},[39,65013,62346],{"class":52354},[39,65015,56129],{"class":52354},[39,65017,2464],{"class":52354},[39,65019,16628],{"class":45},[39,65021,65022,65025,65027,65029],{"class":41,"line":10797},[39,65023,65024],{"class":56},"      text-decoration",[39,65026,52491],{"class":45},[39,65028,55791],{"class":56},[39,65030,2359],{"class":45},[39,65032,65033,65035,65037,65039,65041,65043,65046],{"class":41,"line":10820},[39,65034,63286],{"class":56},[39,65036,52491],{"class":45},[39,65038,63],{"class":56},[39,65040,52546],{"class":49},[39,65042,52575],{"class":56},[39,65044,65045],{"class":56}," transparent",[39,65047,2359],{"class":45},[39,65049,65050,65052,65054,65056],{"class":41,"line":10844},[39,65051,58470],{"class":56},[39,65053,52491],{"class":45},[39,65055,63423],{"class":56},[39,65057,2359],{"class":45},[39,65059,65060],{"class":41,"line":10849},[39,65061,3245],{"class":45},[39,65063,65064],{"class":41,"line":10854},[39,65065,3458],{"emptyLinePlaceholder":1145},[39,65067,65068,65070,65072,65074,65076,65079],{"class":41,"line":10859},[39,65069,64799],{"class":3021},[39,65071,62346],{"class":52354},[39,65073,56129],{"class":52354},[39,65075,2464],{"class":52354},[39,65077,65078],{"class":3021},".active",[39,65080,16628],{"class":45},[39,65082,65083,65085,65087,65090],{"class":41,"line":10868},[39,65084,62845],{"class":56},[39,65086,52491],{"class":45},[39,65088,65089],{"class":56},"#e1251b",[39,65091,2359],{"class":45},[39,65093,65094,65096,65098,65100],{"class":41,"line":10873},[39,65095,58470],{"class":56},[39,65097,52491],{"class":45},[39,65099,65089],{"class":56},[39,65101,2359],{"class":45},[39,65103,65104],{"class":41,"line":10879},[39,65105,3245],{"class":45},[39,65107,65108],{"class":41,"line":10900},[39,65109,3458],{"emptyLinePlaceholder":1145},[39,65111,65112,65115],{"class":41,"line":10906},[39,65113,65114],{"class":3021},"    .tab-content",[39,65116,16628],{"class":45},[39,65118,65119,65121,65123,65125,65128,65130],{"class":41,"line":10920},[39,65120,55749],{"class":56},[39,65122,52491],{"class":45},[39,65124,260],{"class":56},[39,65126,65127],{"class":56}," 16",[39,65129,52546],{"class":49},[39,65131,2359],{"class":45},[39,65133,65134],{"class":41,"line":10926},[39,65135,3245],{"class":45},[39,65137,65138],{"class":41,"line":10953},[39,65139,3458],{"emptyLinePlaceholder":1145},[39,65141,65142,65144,65146],{"class":41,"line":10962},[39,65143,65114],{"class":3021},[39,65145,63228],{"class":3021},[39,65147,16628],{"class":45},[39,65149,65150,65152,65154,65156],{"class":41,"line":10968},[39,65151,56063],{"class":56},[39,65153,52491],{"class":45},[39,65155,55791],{"class":56},[39,65157,2359],{"class":45},[39,65159,65160],{"class":41,"line":10976},[39,65161,3245],{"class":45},[39,65163,65164],{"class":41,"line":10981},[39,65165,3458],{"emptyLinePlaceholder":1145},[39,65167,65168,65170,65173],{"class":41,"line":17660},[39,65169,65114],{"class":3021},[39,65171,65172],{"class":3021}," .item.active",[39,65174,16628],{"class":45},[39,65176,65177,65179,65181,65183],{"class":41,"line":17666},[39,65178,56063],{"class":56},[39,65180,52491],{"class":45},[39,65182,61923],{"class":56},[39,65184,2359],{"class":45},[39,65186,65187],{"class":41,"line":17689},[39,65188,3245],{"class":45},[39,65190,65191,65193,65195],{"class":41,"line":17695},[39,65192,53471],{"class":45},[39,65194,1133],{"class":52354},[39,65196,52361],{"class":45},[39,65198,65199,65201,65203],{"class":41,"line":17718},[39,65200,52839],{"class":45},[39,65202,52388],{"class":52354},[39,65204,52361],{"class":45},[39,65206,65207],{"class":41,"line":17732},[39,65208,3458],{"emptyLinePlaceholder":1145},[39,65210,65211,65213,65215],{"class":41,"line":17752},[39,65212,2108],{"class":45},[39,65214,52854],{"class":52354},[39,65216,52361],{"class":45},[39,65218,65219,65221,65223,65225,65227,65230],{"class":41,"line":17758},[39,65220,53198],{"class":45},[39,65222,52665],{"class":52354},[39,65224,54540],{"class":3021},[39,65226,50],{"class":45},[39,65228,65229],{"class":1319},"\"tab\"",[39,65231,52361],{"class":45},[39,65233,65234,65236,65238,65240,65242,65245],{"class":41,"line":17769},[39,65235,52395],{"class":45},[39,65237,52665],{"class":52354},[39,65239,54540],{"class":3021},[39,65241,50],{"class":45},[39,65243,65244],{"class":1319},"\"tab-nav\"",[39,65246,52361],{"class":45},[39,65248,65249,65251,65253,65256,65258],{"class":41,"line":17792},[39,65250,56288],{"class":45},[39,65252,1188],{"class":52354},[39,65254,65255],{"class":45},">每日特价\u003C\u002F",[39,65257,1188],{"class":52354},[39,65259,52361],{"class":45},[39,65261,65262,65264,65266],{"class":41,"line":17814},[39,65263,56288],{"class":45},[39,65265,2205],{"class":52354},[39,65267,52361],{"class":45},[39,65269,65270,65272,65274,65276,65278,65280,65282,65284,65286,65288,65291,65294,65296,65298,65300],{"class":41,"line":17819},[39,65271,56356],{"class":45},[39,65273,1174],{"class":52354},[39,65275,62106],{"class":45},[39,65277,46],{"class":52354},[39,65279,54540],{"class":3021},[39,65281,50],{"class":45},[39,65283,60760],{"class":1319},[39,65285,62111],{"class":3021},[39,65287,50],{"class":45},[39,65289,65290],{"class":1319},"\"javascript:;\"",[39,65292,65293],{"class":45},">精选\u003C\u002F",[39,65295,46],{"class":52354},[39,65297,56368],{"class":45},[39,65299,1174],{"class":52354},[39,65301,52361],{"class":45},[39,65303,65304,65306,65308,65310,65312,65314,65316,65318,65321,65323,65325,65327],{"class":41,"line":17825},[39,65305,56356],{"class":45},[39,65307,1174],{"class":52354},[39,65309,62106],{"class":45},[39,65311,46],{"class":52354},[39,65313,62111],{"class":3021},[39,65315,50],{"class":45},[39,65317,65290],{"class":1319},[39,65319,65320],{"class":45},">美食\u003C\u002F",[39,65322,46],{"class":52354},[39,65324,56368],{"class":45},[39,65326,1174],{"class":52354},[39,65328,52361],{"class":45},[39,65330,65331,65333,65335,65337,65339,65341,65343,65345,65348,65350,65352,65354],{"class":41,"line":17839},[39,65332,56356],{"class":45},[39,65334,1174],{"class":52354},[39,65336,62106],{"class":45},[39,65338,46],{"class":52354},[39,65340,62111],{"class":3021},[39,65342,50],{"class":45},[39,65344,65290],{"class":1319},[39,65346,65347],{"class":45},">百货\u003C\u002F",[39,65349,46],{"class":52354},[39,65351,56368],{"class":45},[39,65353,1174],{"class":52354},[39,65355,52361],{"class":45},[39,65357,65358,65360,65362,65364,65366,65368,65370,65372,65375,65377,65379,65381],{"class":41,"line":17852},[39,65359,56356],{"class":45},[39,65361,1174],{"class":52354},[39,65363,62106],{"class":45},[39,65365,46],{"class":52354},[39,65367,62111],{"class":3021},[39,65369,50],{"class":45},[39,65371,65290],{"class":1319},[39,65373,65374],{"class":45},">个护\u003C\u002F",[39,65376,46],{"class":52354},[39,65378,56368],{"class":45},[39,65380,1174],{"class":52354},[39,65382,52361],{"class":45},[39,65384,65385,65387,65389,65391,65393,65395,65397,65399,65402,65404,65406,65408],{"class":41,"line":17857},[39,65386,56356],{"class":45},[39,65388,1174],{"class":52354},[39,65390,62106],{"class":45},[39,65392,46],{"class":52354},[39,65394,62111],{"class":3021},[39,65396,50],{"class":45},[39,65398,65290],{"class":1319},[39,65400,65401],{"class":45},">预告\u003C\u002F",[39,65403,46],{"class":52354},[39,65405,56368],{"class":45},[39,65407,1174],{"class":52354},[39,65409,52361],{"class":45},[39,65411,65412,65414,65416],{"class":41,"line":17871},[39,65413,56461],{"class":45},[39,65415,2205],{"class":52354},[39,65417,52361],{"class":45},[39,65419,65420,65422,65424],{"class":41,"line":17876},[39,65421,52830],{"class":45},[39,65423,52665],{"class":52354},[39,65425,52361],{"class":45},[39,65427,65428,65430,65432,65434,65436,65439],{"class":41,"line":17882},[39,65429,52395],{"class":45},[39,65431,52665],{"class":52354},[39,65433,54540],{"class":3021},[39,65435,50],{"class":45},[39,65437,65438],{"class":1319},"\"tab-content\"",[39,65440,52361],{"class":45},[39,65442,65443,65445,65447,65449,65451,65454,65456,65458,65460,65462,65465,65467,65469,65471,65474,65476],{"class":41,"line":17887},[39,65444,56288],{"class":45},[39,65446,52665],{"class":52354},[39,65448,54540],{"class":3021},[39,65450,50],{"class":45},[39,65452,65453],{"class":1319},"\"item active\"",[39,65455,62106],{"class":45},[39,65457,269],{"class":52354},[39,65459,56293],{"class":3021},[39,65461,50],{"class":45},[39,65463,65464],{"class":1319},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[39,65466,56301],{"class":3021},[39,65468,50],{"class":45},[39,65470,8708],{"class":1319},[39,65472,65473],{"class":45}," \u002F>\u003C\u002F",[39,65475,52665],{"class":52354},[39,65477,52361],{"class":45},[39,65479,65480,65482,65484,65486,65488,65490,65492,65494,65496,65498,65501,65503,65505,65507,65509,65511],{"class":41,"line":17901},[39,65481,56288],{"class":45},[39,65483,52665],{"class":52354},[39,65485,54540],{"class":3021},[39,65487,50],{"class":45},[39,65489,63677],{"class":1319},[39,65491,62106],{"class":45},[39,65493,269],{"class":52354},[39,65495,56293],{"class":3021},[39,65497,50],{"class":45},[39,65499,65500],{"class":1319},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[39,65502,56301],{"class":3021},[39,65504,50],{"class":45},[39,65506,8708],{"class":1319},[39,65508,65473],{"class":45},[39,65510,52665],{"class":52354},[39,65512,52361],{"class":45},[39,65514,65515,65517,65519,65521,65523,65525,65527,65529,65531,65533,65536,65538,65540,65542,65544,65546],{"class":41,"line":17906},[39,65516,56288],{"class":45},[39,65518,52665],{"class":52354},[39,65520,54540],{"class":3021},[39,65522,50],{"class":45},[39,65524,63677],{"class":1319},[39,65526,62106],{"class":45},[39,65528,269],{"class":52354},[39,65530,56293],{"class":3021},[39,65532,50],{"class":45},[39,65534,65535],{"class":1319},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[39,65537,56301],{"class":3021},[39,65539,50],{"class":45},[39,65541,8708],{"class":1319},[39,65543,65473],{"class":45},[39,65545,52665],{"class":52354},[39,65547,52361],{"class":45},[39,65549,65550,65552,65554,65556,65558,65560,65562,65564,65566,65568,65571,65573,65575,65577,65579,65581],{"class":41,"line":17911},[39,65551,56288],{"class":45},[39,65553,52665],{"class":52354},[39,65555,54540],{"class":3021},[39,65557,50],{"class":45},[39,65559,63677],{"class":1319},[39,65561,62106],{"class":45},[39,65563,269],{"class":52354},[39,65565,56293],{"class":3021},[39,65567,50],{"class":45},[39,65569,65570],{"class":1319},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[39,65572,56301],{"class":3021},[39,65574,50],{"class":45},[39,65576,8708],{"class":1319},[39,65578,65473],{"class":45},[39,65580,52665],{"class":52354},[39,65582,52361],{"class":45},[39,65584,65585,65587,65589,65591,65593,65595,65597,65599,65601,65603,65606,65608,65610,65612,65614,65616],{"class":41,"line":17925},[39,65586,56288],{"class":45},[39,65588,52665],{"class":52354},[39,65590,54540],{"class":3021},[39,65592,50],{"class":45},[39,65594,63677],{"class":1319},[39,65596,62106],{"class":45},[39,65598,269],{"class":52354},[39,65600,56293],{"class":3021},[39,65602,50],{"class":45},[39,65604,65605],{"class":1319},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[39,65607,56301],{"class":3021},[39,65609,50],{"class":45},[39,65611,8708],{"class":1319},[39,65613,65473],{"class":45},[39,65615,52665],{"class":52354},[39,65617,52361],{"class":45},[39,65619,65620,65622,65624],{"class":41,"line":17937},[39,65621,52830],{"class":45},[39,65623,52665],{"class":52354},[39,65625,52361],{"class":45},[39,65627,65628,65630,65632],{"class":41,"line":17942},[39,65629,53471],{"class":45},[39,65631,52665],{"class":52354},[39,65633,52361],{"class":45},[39,65635,65636,65638,65640],{"class":41,"line":17955},[39,65637,53198],{"class":45},[39,65639,52867],{"class":52354},[39,65641,52361],{"class":45},[39,65643,65644],{"class":41,"line":17960},[39,65645,65646],{"class":102},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[39,65648,65649],{"class":41,"line":17965},[39,65650,65651],{"class":102},"    \u002F\u002F 1.1 获取 a 元素 \n",[39,65653,65654,65656,65659,65661,65663,65665,65667,65670],{"class":41,"line":17970},[39,65655,12277],{"class":49},[39,65657,65658],{"class":56}," as",[39,65660,14620],{"class":49},[39,65662,55450],{"class":45},[39,65664,56735],{"class":3021},[39,65666,1221],{"class":45},[39,65668,65669],{"class":1319},"'.tab-nav a'",[39,65671,209],{"class":45},[39,65673,65674],{"class":41,"line":17983},[39,65675,65676],{"class":102},"    \u002F\u002F console.log(as) \n",[39,65678,65679,65681,65683,65685,65687,65689,65691,65693,65695,65698,65700,65702,65704],{"class":41,"line":17988},[39,65680,4259],{"class":49},[39,65682,2716],{"class":45},[39,65684,52901],{"class":49},[39,65686,10494],{"class":45},[39,65688,50],{"class":49},[39,65690,5151],{"class":56},[39,65692,10501],{"class":45},[39,65694,2108],{"class":49},[39,65696,65697],{"class":45}," as.",[39,65699,53022],{"class":56},[39,65701,4272],{"class":45},[39,65703,3350],{"class":49},[39,65705,13498],{"class":45},[39,65707,65708],{"class":41,"line":33688},[39,65709,65710],{"class":102},"      \u002F\u002F console.log(as[i])\n",[39,65712,65713],{"class":41,"line":33694},[39,65714,65715],{"class":102},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[39,65717,65718,65721,65723,65725,65728,65730,65732],{"class":41,"line":33700},[39,65719,65720],{"class":45},"      as[i].",[39,65722,58867],{"class":3021},[39,65724,1221],{"class":45},[39,65726,65727],{"class":1319},"'mouseenter'",[39,65729,13491],{"class":45},[39,65731,55503],{"class":49},[39,65733,55506],{"class":45},[39,65735,65736],{"class":41,"line":33706},[39,65737,65738],{"class":102},"        \u002F\u002F console.log('鼠标经过')\n",[39,65740,65741],{"class":41,"line":33712},[39,65742,65743],{"class":102},"        \u002F\u002F 排他思想  \n",[39,65745,65746],{"class":41,"line":33723},[39,65747,65748],{"class":102},"        \u002F\u002F 干掉别人 移除类active\n",[39,65750,65751,65753,65755,65757,65760,65762,65764,65766,65769],{"class":41,"line":33729},[39,65752,52979],{"class":45},[39,65754,55453],{"class":3021},[39,65756,1221],{"class":45},[39,65758,65759],{"class":1319},"'.tab-nav .active'",[39,65761,58057],{"class":45},[39,65763,58060],{"class":3021},[39,65765,1221],{"class":45},[39,65767,65768],{"class":1319},"'active'",[39,65770,209],{"class":45},[39,65772,65773],{"class":41,"line":33749},[39,65774,65775],{"class":102},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[39,65777,65778,65781,65784,65786,65788,65790],{"class":41,"line":33755},[39,65779,65780],{"class":56},"        this",[39,65782,65783],{"class":45},".classList.",[39,65785,6390],{"class":3021},[39,65787,1221],{"class":45},[39,65789,65768],{"class":1319},[39,65791,209],{"class":45},[39,65793,65794],{"class":41,"line":33766},[39,65795,3458],{"emptyLinePlaceholder":1145},[39,65797,65798],{"class":41,"line":33772},[39,65799,65800],{"class":102},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[39,65802,65803],{"class":41,"line":33778},[39,65804,65805],{"class":102},"        \u002F\u002F 干掉别人\n",[39,65807,65808,65810,65812,65814,65817,65819,65821,65823,65825],{"class":41,"line":33784},[39,65809,52979],{"class":45},[39,65811,55453],{"class":3021},[39,65813,1221],{"class":45},[39,65815,65816],{"class":1319},"'.tab-content .active'",[39,65818,58057],{"class":45},[39,65820,58060],{"class":3021},[39,65822,1221],{"class":45},[39,65824,65768],{"class":1319},[39,65826,209],{"class":45},[39,65828,65829],{"class":41,"line":33790},[39,65830,65831],{"class":102},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[39,65833,65834,65836,65838,65840,65843,65845,65847,65849,65851,65853,65855,65857,65859],{"class":41,"line":33796},[39,65835,52979],{"class":45},[39,65837,55453],{"class":3021},[39,65839,1221],{"class":45},[39,65841,65842],{"class":1319},"`.tab-content .item:nth-child(${",[39,65844,1644],{"class":45},[39,65846,46621],{"class":49},[39,65848,26175],{"class":56},[39,65850,58086],{"class":1319},[39,65852,58057],{"class":45},[39,65854,6390],{"class":3021},[39,65856,1221],{"class":45},[39,65858,65768],{"class":1319},[39,65860,209],{"class":45},[39,65862,65863],{"class":41,"line":33802},[39,65864,3458],{"emptyLinePlaceholder":1145},[39,65866,65867],{"class":41,"line":33808},[39,65868,65869],{"class":45},"      })\n",[39,65871,65872],{"class":41,"line":33828},[39,65873,3245],{"class":45},[39,65875,65876,65878,65880],{"class":41,"line":33834},[39,65877,53471],{"class":45},[39,65879,52867],{"class":52354},[39,65881,52361],{"class":45},[39,65883,65884,65886,65888],{"class":41,"line":33850},[39,65885,52839],{"class":45},[39,65887,52854],{"class":52354},[39,65889,52361],{"class":45},[39,65891,65892],{"class":41,"line":33856},[39,65893,3458],{"emptyLinePlaceholder":1145},[39,65895,65896,65898,65900],{"class":41,"line":33870},[39,65897,52839],{"class":45},[39,65899,51689],{"class":52354},[39,65901,52361],{"class":45},[19,65903,65904],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,65906,65907],{},"在监听事件中，this指向的就是他的调用者",[19,65909,65910],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,65912,54774],{},[19,65914,65915],{},"(function () {",[19,65917,65918],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65920,65921],{},"list.addEventListener('click', function (e) {",[19,65923,65924],{},"if (e.target.tagName === 'A') {",[19,65926,65927],{},"\u002F\u002F 排他思想",[19,65929,65930],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65932,65933],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65935,65936],{},"\u002F\u002F console.log(old);",[19,65938,65939],{},"\u002F\u002F 判断",[19,65941,65942],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65944,65945],{},"if (old) old.classList.remove('active')",[19,65947,65948],{},"e.target.classList.add('active')",[19,65950,2144],{},[19,65952,53518],{},[19,65954,65955],{},"})();",[1188,65957,65959],{"id":65958},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[29,65961,65963],{"className":51687,"code":65962,"language":51689,"meta":34,"style":34},"\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",[36,65964,65965,65975,65979,65987,65991,66005,66019,66031,66039,66045,66055,66065,66069,66073,66080,66092,66103,66120,66133,66147,66157,66161,66165,66172,66183,66201,66211,66223,66227,66231,66238,66255,66266,66278,66282,66286,66293,66305,66309,66317,66325,66329,66337,66345,66353,66368,66412,66420,66433,66446,66459,66467,66475,66483,66511,66519,66531,66544,66557,66565,66573,66581,66607,66615,66628,66640,66653,66661,66669,66677,66703,66711,66724,66736,66749,66757,66765,66773,66778,66798,66803,66823,66828,66845,66850,66858,66863,66892,66905,66909,66913,66918,66922,66950,66955,66972,66977,66982,66987,66992,67018,67022,67026,67034,67042,67046],{"__ignoreMap":34},[39,65966,65967,65969,65971,65973],{"class":41,"line":42},[39,65968,52351],{"class":45},[39,65970,52355],{"class":52354},[39,65972,52358],{"class":3021},[39,65974,52361],{"class":45},[39,65976,65977],{"class":41,"line":74},[39,65978,3458],{"emptyLinePlaceholder":1145},[39,65980,65981,65983,65985],{"class":41,"line":99},[39,65982,2108],{"class":45},[39,65984,51689],{"class":52354},[39,65986,52361],{"class":45},[39,65988,65989],{"class":41,"line":106},[39,65990,3458],{"emptyLinePlaceholder":1145},[39,65992,65993,65995,65997,65999,66001,66003],{"class":41,"line":112},[39,65994,2108],{"class":45},[39,65996,52388],{"class":52354},[39,65998,52370],{"class":3021},[39,66000,50],{"class":45},[39,66002,52375],{"class":1319},[39,66004,52361],{"class":45},[39,66006,66007,66009,66011,66013,66015,66017],{"class":41,"line":118},[39,66008,53198],{"class":45},[39,66010,52398],{"class":52354},[39,66012,52401],{"class":3021},[39,66014,50],{"class":45},[39,66016,52406],{"class":1319},[39,66018,52361],{"class":45},[39,66020,66021,66023,66025,66027,66029],{"class":41,"line":413},[39,66022,53198],{"class":45},[39,66024,52461],{"class":52354},[39,66026,56368],{"class":45},[39,66028,52461],{"class":52354},[39,66030,52361],{"class":45},[39,66032,66033,66035,66037],{"class":41,"line":419},[39,66034,53198],{"class":45},[39,66036,1133],{"class":52354},[39,66038,52361],{"class":45},[39,66040,66041,66043],{"class":41,"line":425},[39,66042,7459],{"class":52354},[39,66044,16628],{"class":45},[39,66046,66047,66049,66051,66053],{"class":41,"line":443},[39,66048,55760],{"class":56},[39,66050,52491],{"class":45},[39,66052,260],{"class":56},[39,66054,2359],{"class":45},[39,66056,66057,66059,66061,66063],{"class":41,"line":449},[39,66058,55749],{"class":56},[39,66060,52491],{"class":45},[39,66062,260],{"class":56},[39,66064,2359],{"class":45},[39,66066,66067],{"class":41,"line":455},[39,66068,3245],{"class":45},[39,66070,66071],{"class":41,"line":461},[39,66072,3458],{"emptyLinePlaceholder":1145},[39,66074,66075,66078],{"class":41,"line":475},[39,66076,66077],{"class":52354},"    table",[39,66079,16628],{"class":45},[39,66081,66082,66085,66087,66090],{"class":41,"line":665},[39,66083,66084],{"class":56},"      border-collapse",[39,66086,52491],{"class":45},[39,66088,66089],{"class":56},"collapse",[39,66091,2359],{"class":45},[39,66093,66094,66097,66099,66101],{"class":41,"line":671},[39,66095,66096],{"class":56},"      border-spacing",[39,66098,52491],{"class":45},[39,66100,260],{"class":56},[39,66102,2359],{"class":45},[39,66104,66105,66107,66109,66111,66113,66115,66118],{"class":41,"line":684},[39,66106,63031],{"class":56},[39,66108,52491],{"class":45},[39,66110,57],{"class":56},[39,66112,52546],{"class":49},[39,66114,52575],{"class":56},[39,66116,66117],{"class":56}," #c0c0c0",[39,66119,2359],{"class":45},[39,66121,66122,66124,66126,66129,66131],{"class":41,"line":2732},[39,66123,55825],{"class":56},[39,66125,52491],{"class":45},[39,66127,66128],{"class":56},"500",[39,66130,52546],{"class":49},[39,66132,2359],{"class":45},[39,66134,66135,66137,66139,66141,66143,66145],{"class":41,"line":2737},[39,66136,55760],{"class":56},[39,66138,52491],{"class":45},[39,66140,1519],{"class":56},[39,66142,52546],{"class":49},[39,66144,52610],{"class":56},[39,66146,2359],{"class":45},[39,66148,66149,66151,66153,66155],{"class":41,"line":2751},[39,66150,58340],{"class":56},[39,66152,52491],{"class":45},[39,66154,52646],{"class":56},[39,66156,2359],{"class":45},[39,66158,66159],{"class":41,"line":2756},[39,66160,3245],{"class":45},[39,66162,66163],{"class":41,"line":2785},[39,66164,3458],{"emptyLinePlaceholder":1145},[39,66166,66167,66170],{"class":41,"line":2790},[39,66168,66169],{"class":52354},"    th",[39,66171,16628],{"class":45},[39,66173,66174,66176,66178,66181],{"class":41,"line":2807},[39,66175,55938],{"class":56},[39,66177,52491],{"class":45},[39,66179,66180],{"class":56},"#09c",[39,66182,2359],{"class":45},[39,66184,66185,66188,66190,66192,66194,66196,66199],{"class":41,"line":2812},[39,66186,66187],{"class":56},"      font",[39,66189,52491],{"class":45},[39,66191,63393],{"class":56},[39,66193,65127],{"class":56},[39,66195,52546],{"class":49},[39,66197,66198],{"class":1319}," \"微软雅黑\"",[39,66200,2359],{"class":45},[39,66202,66203,66205,66207,66209],{"class":41,"line":2817},[39,66204,58470],{"class":56},[39,66206,52491],{"class":45},[39,66208,61896],{"class":56},[39,66210,2359],{"class":45},[39,66212,66213,66215,66217,66219,66221],{"class":41,"line":2822},[39,66214,55839],{"class":56},[39,66216,52491],{"class":45},[39,66218,1998],{"class":56},[39,66220,52546],{"class":49},[39,66222,2359],{"class":45},[39,66224,66225],{"class":41,"line":2836},[39,66226,3245],{"class":45},[39,66228,66229],{"class":41,"line":2841},[39,66230,3458],{"emptyLinePlaceholder":1145},[39,66232,66233,66236],{"class":41,"line":3635},[39,66234,66235],{"class":52354},"    td",[39,66237,16628],{"class":45},[39,66239,66240,66242,66244,66246,66248,66250,66253],{"class":41,"line":3649},[39,66241,63031],{"class":56},[39,66243,52491],{"class":45},[39,66245,57],{"class":56},[39,66247,52546],{"class":49},[39,66249,52575],{"class":56},[39,66251,66252],{"class":56}," #d0d0d0",[39,66254,2359],{"class":45},[39,66256,66257,66259,66261,66264],{"class":41,"line":3657},[39,66258,58470],{"class":56},[39,66260,52491],{"class":45},[39,66262,66263],{"class":56},"#404060",[39,66265,2359],{"class":45},[39,66267,66268,66270,66272,66274,66276],{"class":41,"line":3662},[39,66269,55749],{"class":56},[39,66271,52491],{"class":45},[39,66273,146],{"class":56},[39,66275,52546],{"class":49},[39,66277,2359],{"class":45},[39,66279,66280],{"class":41,"line":3668},[39,66281,3245],{"class":45},[39,66283,66284],{"class":41,"line":3674},[39,66285,3458],{"emptyLinePlaceholder":1145},[39,66287,66288,66291],{"class":41,"line":3679},[39,66289,66290],{"class":3021},"    .allCheck",[39,66292,16628],{"class":45},[39,66294,66295,66297,66299,66301,66303],{"class":41,"line":9004},[39,66296,55825],{"class":56},[39,66298,52491],{"class":45},[39,66300,1812],{"class":56},[39,66302,52546],{"class":49},[39,66304,2359],{"class":45},[39,66306,66307],{"class":41,"line":9028},[39,66308,3245],{"class":45},[39,66310,66311,66313,66315],{"class":41,"line":9033},[39,66312,53471],{"class":45},[39,66314,1133],{"class":52354},[39,66316,52361],{"class":45},[39,66318,66319,66321,66323],{"class":41,"line":9039},[39,66320,52839],{"class":45},[39,66322,52388],{"class":52354},[39,66324,52361],{"class":45},[39,66326,66327],{"class":41,"line":9066},[39,66328,3458],{"emptyLinePlaceholder":1145},[39,66330,66331,66333,66335],{"class":41,"line":9071},[39,66332,2108],{"class":45},[39,66334,52854],{"class":52354},[39,66336,52361],{"class":45},[39,66338,66339,66341,66343],{"class":41,"line":9077},[39,66340,53198],{"class":45},[39,66342,1352],{"class":52354},[39,66344,52361],{"class":45},[39,66346,66347,66349,66351],{"class":41,"line":9089},[39,66348,52395],{"class":45},[39,66350,1358],{"class":52354},[39,66352,52361],{"class":45},[39,66354,66355,66357,66359,66361,66363,66366],{"class":41,"line":9101},[39,66356,56288],{"class":45},[39,66358,1361],{"class":52354},[39,66360,54540],{"class":3021},[39,66362,50],{"class":45},[39,66364,66365],{"class":1319},"\"allCheck\"",[39,66367,52361],{"class":45},[39,66369,66370,66372,66374,66376,66378,66380,66382,66384,66386,66388,66390,66393,66396,66398,66400,66402,66405,66408,66410],{"class":41,"line":9113},[39,66371,56356],{"class":45},[39,66373,54875],{"class":52354},[39,66375,54878],{"class":3021},[39,66377,50],{"class":45},[39,66379,54883],{"class":1319},[39,66381,15976],{"class":3021},[39,66383,50],{"class":45},[39,66385,8708],{"class":1319},[39,66387,16015],{"class":3021},[39,66389,50],{"class":45},[39,66391,66392],{"class":1319},"\"checkAll\"",[39,66394,66395],{"class":45},"> \u003C",[39,66397,39],{"class":52354},[39,66399,54540],{"class":3021},[39,66401,50],{"class":45},[39,66403,66404],{"class":1319},"\"all\"",[39,66406,66407],{"class":45},">全选\u003C\u002F",[39,66409,39],{"class":52354},[39,66411,52361],{"class":45},[39,66413,66414,66416,66418],{"class":41,"line":10772},[39,66415,56461],{"class":45},[39,66417,1361],{"class":52354},[39,66419,52361],{"class":45},[39,66421,66422,66424,66426,66429,66431],{"class":41,"line":10797},[39,66423,56288],{"class":45},[39,66425,1361],{"class":52354},[39,66427,66428],{"class":45},">商品\u003C\u002F",[39,66430,1361],{"class":52354},[39,66432,52361],{"class":45},[39,66434,66435,66437,66439,66442,66444],{"class":41,"line":10820},[39,66436,56288],{"class":45},[39,66438,1361],{"class":52354},[39,66440,66441],{"class":45},">商家\u003C\u002F",[39,66443,1361],{"class":52354},[39,66445,52361],{"class":45},[39,66447,66448,66450,66452,66455,66457],{"class":41,"line":10844},[39,66449,56288],{"class":45},[39,66451,1361],{"class":52354},[39,66453,66454],{"class":45},">价格\u003C\u002F",[39,66456,1361],{"class":52354},[39,66458,52361],{"class":45},[39,66460,66461,66463,66465],{"class":41,"line":10849},[39,66462,52830],{"class":45},[39,66464,1358],{"class":52354},[39,66466,52361],{"class":45},[39,66468,66469,66471,66473],{"class":41,"line":10854},[39,66470,52395],{"class":45},[39,66472,1358],{"class":52354},[39,66474,52361],{"class":45},[39,66476,66477,66479,66481],{"class":41,"line":10859},[39,66478,56288],{"class":45},[39,66480,1403],{"class":52354},[39,66482,52361],{"class":45},[39,66484,66485,66487,66489,66491,66493,66495,66497,66499,66502,66504,66506,66509],{"class":41,"line":10868},[39,66486,56356],{"class":45},[39,66488,54875],{"class":52354},[39,66490,54878],{"class":3021},[39,66492,50],{"class":45},[39,66494,54883],{"class":1319},[39,66496,15976],{"class":3021},[39,66498,50],{"class":45},[39,66500,66501],{"class":1319},"\"check\"",[39,66503,54540],{"class":3021},[39,66505,50],{"class":45},[39,66507,66508],{"class":1319},"\"ck\"",[39,66510,52361],{"class":45},[39,66512,66513,66515,66517],{"class":41,"line":10873},[39,66514,56461],{"class":45},[39,66516,1403],{"class":52354},[39,66518,52361],{"class":45},[39,66520,66521,66523,66525,66527,66529],{"class":41,"line":10879},[39,66522,56288],{"class":45},[39,66524,1403],{"class":52354},[39,66526,62227],{"class":45},[39,66528,1403],{"class":52354},[39,66530,52361],{"class":45},[39,66532,66533,66535,66537,66540,66542],{"class":41,"line":10900},[39,66534,56288],{"class":45},[39,66536,1403],{"class":52354},[39,66538,66539],{"class":45},">小米\u003C\u002F",[39,66541,1403],{"class":52354},[39,66543,52361],{"class":45},[39,66545,66546,66548,66550,66553,66555],{"class":41,"line":10906},[39,66547,56288],{"class":45},[39,66549,1403],{"class":52354},[39,66551,66552],{"class":45},">￥1999\u003C\u002F",[39,66554,1403],{"class":52354},[39,66556,52361],{"class":45},[39,66558,66559,66561,66563],{"class":41,"line":10920},[39,66560,52830],{"class":45},[39,66562,1358],{"class":52354},[39,66564,52361],{"class":45},[39,66566,66567,66569,66571],{"class":41,"line":10926},[39,66568,52395],{"class":45},[39,66570,1358],{"class":52354},[39,66572,52361],{"class":45},[39,66574,66575,66577,66579],{"class":41,"line":10953},[39,66576,56288],{"class":45},[39,66578,1403],{"class":52354},[39,66580,52361],{"class":45},[39,66582,66583,66585,66587,66589,66591,66593,66595,66597,66599,66601,66603,66605],{"class":41,"line":10962},[39,66584,56356],{"class":45},[39,66586,54875],{"class":52354},[39,66588,54878],{"class":3021},[39,66590,50],{"class":45},[39,66592,54883],{"class":1319},[39,66594,15976],{"class":3021},[39,66596,50],{"class":45},[39,66598,66501],{"class":1319},[39,66600,54540],{"class":3021},[39,66602,50],{"class":45},[39,66604,66508],{"class":1319},[39,66606,52361],{"class":45},[39,66608,66609,66611,66613],{"class":41,"line":10968},[39,66610,56461],{"class":45},[39,66612,1403],{"class":52354},[39,66614,52361],{"class":45},[39,66616,66617,66619,66621,66624,66626],{"class":41,"line":10976},[39,66618,56288],{"class":45},[39,66620,1403],{"class":52354},[39,66622,66623],{"class":45},">小米净水器\u003C\u002F",[39,66625,1403],{"class":52354},[39,66627,52361],{"class":45},[39,66629,66630,66632,66634,66636,66638],{"class":41,"line":10981},[39,66631,56288],{"class":45},[39,66633,1403],{"class":52354},[39,66635,66539],{"class":45},[39,66637,1403],{"class":52354},[39,66639,52361],{"class":45},[39,66641,66642,66644,66646,66649,66651],{"class":41,"line":17660},[39,66643,56288],{"class":45},[39,66645,1403],{"class":52354},[39,66647,66648],{"class":45},">￥4999\u003C\u002F",[39,66650,1403],{"class":52354},[39,66652,52361],{"class":45},[39,66654,66655,66657,66659],{"class":41,"line":17666},[39,66656,52830],{"class":45},[39,66658,1358],{"class":52354},[39,66660,52361],{"class":45},[39,66662,66663,66665,66667],{"class":41,"line":17689},[39,66664,52395],{"class":45},[39,66666,1358],{"class":52354},[39,66668,52361],{"class":45},[39,66670,66671,66673,66675],{"class":41,"line":17695},[39,66672,56288],{"class":45},[39,66674,1403],{"class":52354},[39,66676,52361],{"class":45},[39,66678,66679,66681,66683,66685,66687,66689,66691,66693,66695,66697,66699,66701],{"class":41,"line":17718},[39,66680,56356],{"class":45},[39,66682,54875],{"class":52354},[39,66684,54878],{"class":3021},[39,66686,50],{"class":45},[39,66688,54883],{"class":1319},[39,66690,15976],{"class":3021},[39,66692,50],{"class":45},[39,66694,66501],{"class":1319},[39,66696,54540],{"class":3021},[39,66698,50],{"class":45},[39,66700,66508],{"class":1319},[39,66702,52361],{"class":45},[39,66704,66705,66707,66709],{"class":41,"line":17732},[39,66706,56461],{"class":45},[39,66708,1403],{"class":52354},[39,66710,52361],{"class":45},[39,66712,66713,66715,66717,66720,66722],{"class":41,"line":17752},[39,66714,56288],{"class":45},[39,66716,1403],{"class":52354},[39,66718,66719],{"class":45},">小米电视\u003C\u002F",[39,66721,1403],{"class":52354},[39,66723,52361],{"class":45},[39,66725,66726,66728,66730,66732,66734],{"class":41,"line":17758},[39,66727,56288],{"class":45},[39,66729,1403],{"class":52354},[39,66731,66539],{"class":45},[39,66733,1403],{"class":52354},[39,66735,52361],{"class":45},[39,66737,66738,66740,66742,66745,66747],{"class":41,"line":17769},[39,66739,56288],{"class":45},[39,66741,1403],{"class":52354},[39,66743,66744],{"class":45},">￥5999\u003C\u002F",[39,66746,1403],{"class":52354},[39,66748,52361],{"class":45},[39,66750,66751,66753,66755],{"class":41,"line":17792},[39,66752,52830],{"class":45},[39,66754,1358],{"class":52354},[39,66756,52361],{"class":45},[39,66758,66759,66761,66763],{"class":41,"line":17814},[39,66760,53471],{"class":45},[39,66762,1352],{"class":52354},[39,66764,52361],{"class":45},[39,66766,66767,66769,66771],{"class":41,"line":17819},[39,66768,53198],{"class":45},[39,66770,52867],{"class":52354},[39,66772,52361],{"class":45},[39,66774,66775],{"class":41,"line":17825},[39,66776,66777],{"class":102},"    \u002F\u002F 1. 获取大复选框\n",[39,66779,66780,66782,66785,66787,66789,66791,66793,66796],{"class":41,"line":17839},[39,66781,12277],{"class":49},[39,66783,66784],{"class":56}," checkAll",[39,66786,14620],{"class":49},[39,66788,55450],{"class":45},[39,66790,55453],{"class":3021},[39,66792,1221],{"class":45},[39,66794,66795],{"class":1319},"'#checkAll'",[39,66797,209],{"class":45},[39,66799,66800],{"class":41,"line":17852},[39,66801,66802],{"class":102},"    \u002F\u002F 2. 获取所有的小复选框\n",[39,66804,66805,66807,66810,66812,66814,66816,66818,66821],{"class":41,"line":17857},[39,66806,12277],{"class":49},[39,66808,66809],{"class":56}," cks",[39,66811,14620],{"class":49},[39,66813,55450],{"class":45},[39,66815,56735],{"class":3021},[39,66817,1221],{"class":45},[39,66819,66820],{"class":1319},"'.ck'",[39,66822,209],{"class":45},[39,66824,66825],{"class":41,"line":17871},[39,66826,66827],{"class":102},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[39,66829,66830,66833,66835,66837,66839,66841,66843],{"class":41,"line":17876},[39,66831,66832],{"class":45},"    checkAll.",[39,66834,58867],{"class":3021},[39,66836,1221],{"class":45},[39,66838,58872],{"class":1319},[39,66840,13491],{"class":45},[39,66842,55503],{"class":49},[39,66844,55506],{"class":45},[39,66846,66847],{"class":41,"line":17882},[39,66848,66849],{"class":102},"      \u002F\u002F 得到当前大复选框的选中状态\n",[39,66851,66852,66855],{"class":41,"line":17887},[39,66853,66854],{"class":102},"      \u002F\u002F console.log(checkAll.checked)",[39,66856,66857],{"class":102},"  \u002F\u002F 得到 是 true 或者是 false\n",[39,66859,66860],{"class":41,"line":17901},[39,66861,66862],{"class":102},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[39,66864,66865,66867,66869,66871,66873,66875,66877,66879,66881,66884,66886,66888,66890],{"class":41,"line":17906},[39,66866,53338],{"class":49},[39,66868,2716],{"class":45},[39,66870,52901],{"class":49},[39,66872,10494],{"class":45},[39,66874,50],{"class":49},[39,66876,5151],{"class":56},[39,66878,10501],{"class":45},[39,66880,2108],{"class":49},[39,66882,66883],{"class":45}," cks.",[39,66885,53022],{"class":56},[39,66887,4272],{"class":45},[39,66889,3350],{"class":49},[39,66891,13498],{"class":45},[39,66893,66894,66897,66899,66902],{"class":41,"line":17911},[39,66895,66896],{"class":45},"        cks[i].checked ",[39,66898,50],{"class":49},[39,66900,66901],{"class":56}," this",[39,66903,66904],{"class":45},".checked\n",[39,66906,66907],{"class":41,"line":17925},[39,66908,53452],{"class":45},[39,66910,66911],{"class":41,"line":17937},[39,66912,34516],{"class":45},[39,66914,66915],{"class":41,"line":17942},[39,66916,66917],{"class":102},"    \u002F\u002F 5. 小复选框控制大复选框\n",[39,66919,66920],{"class":41,"line":17955},[39,66921,3458],{"emptyLinePlaceholder":1145},[39,66923,66924,66926,66928,66930,66932,66934,66936,66938,66940,66942,66944,66946,66948],{"class":41,"line":17960},[39,66925,4259],{"class":49},[39,66927,2716],{"class":45},[39,66929,52901],{"class":49},[39,66931,10494],{"class":45},[39,66933,50],{"class":49},[39,66935,5151],{"class":56},[39,66937,10501],{"class":45},[39,66939,2108],{"class":49},[39,66941,66883],{"class":45},[39,66943,53022],{"class":56},[39,66945,4272],{"class":45},[39,66947,3350],{"class":49},[39,66949,13498],{"class":45},[39,66951,66952],{"class":41,"line":17965},[39,66953,66954],{"class":102},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[39,66956,66957,66960,66962,66964,66966,66968,66970],{"class":41,"line":17970},[39,66958,66959],{"class":45},"      cks[i].",[39,66961,58867],{"class":3021},[39,66963,1221],{"class":45},[39,66965,58872],{"class":1319},[39,66967,13491],{"class":45},[39,66969,55503],{"class":49},[39,66971,55506],{"class":45},[39,66973,66974],{"class":41,"line":17983},[39,66975,66976],{"class":102},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[39,66978,66979],{"class":41,"line":17988},[39,66980,66981],{"class":102},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[39,66983,66984],{"class":41,"line":33688},[39,66985,66986],{"class":102},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[39,66988,66989],{"class":41,"line":33694},[39,66990,66991],{"class":102},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[39,66993,66994,66997,66999,67001,67003,67005,67008,67010,67012,67014,67016],{"class":41,"line":33700},[39,66995,66996],{"class":45},"        checkAll.checked ",[39,66998,50],{"class":49},[39,67000,55450],{"class":45},[39,67002,56735],{"class":3021},[39,67004,1221],{"class":45},[39,67006,67007],{"class":1319},"'.ck:checked'",[39,67009,31881],{"class":45},[39,67011,53022],{"class":56},[39,67013,58960],{"class":49},[39,67015,66883],{"class":45},[39,67017,56885],{"class":56},[39,67019,67020],{"class":41,"line":33706},[39,67021,65869],{"class":45},[39,67023,67024],{"class":41,"line":33712},[39,67025,3245],{"class":45},[39,67027,67028,67030,67032],{"class":41,"line":33723},[39,67029,53471],{"class":45},[39,67031,52867],{"class":52354},[39,67033,52361],{"class":45},[39,67035,67036,67038,67040],{"class":41,"line":33729},[39,67037,52839],{"class":45},[39,67039,52854],{"class":52354},[39,67041,52361],{"class":45},[39,67043,67044],{"class":41,"line":33749},[39,67045,3458],{"emptyLinePlaceholder":1145},[39,67047,67048,67050,67052],{"class":41,"line":33755},[39,67049,52839],{"class":45},[39,67051,51689],{"class":52354},[39,67053,52361],{"class":45},[19,67055,67056],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67058,67059],{},"用好之间比较得到的布尔值！！！",[19,67061,67062,67063,67066,67067,2716,67070,1784,67072,67075],{},"在 JS 里访问的时候，",[36,67064,67065],{},"checkbox.checked"," 是一个 ",[304,67068,67069],{},"布尔值",[36,67071,2428],{},[36,67073,67074],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,67077,67078,67079,67082,67083],{},"HTML 的 ",[36,67080,67081],{},"checked=\"checked\""," 只是 ",[304,67084,67085,67086,67089],{},"初始值；JS 的 ",[36,67087,67088],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,67091,67092],{},"：checked是一个伪类选择器",[19,67094,67095],{},[269,67096],{"alt":34,"src":67097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,67099,67100,67103],{},[67101,67102],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,67105,67106],{},[269,67107],{"alt":34,"src":67108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67110,67112],{"id":67111},"_33-dom事件进阶","3.3 DOM事件进阶",[1188,67114,67116],{"id":67115},"_331-事件流","3.3.1 事件流",[19,67118,67119],{},[269,67120],{"alt":34,"src":67121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23054,67123,67125],{"id":67124},"_3311-事件捕获","3.3.1.1 事件捕获",[19,67127,67128],{},[269,67129],{"alt":34,"src":67130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[29,67132,67134],{"className":51687,"code":67133,"language":51689,"meta":34,"style":34},"\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",[36,67135,67136,67146,67160,67164,67172,67186,67206,67218,67226,67233,67245,67257,67267,67271,67275,67282,67294,67306,67316,67320,67328,67336,67340,67348,67363,67382,67390,67398,67418,67438,67454,67465,67473,67490,67501,67509,67526,67537,67545,67553,67561,67565],{"__ignoreMap":34},[39,67137,67138,67140,67142,67144],{"class":41,"line":42},[39,67139,52351],{"class":45},[39,67141,52355],{"class":52354},[39,67143,52358],{"class":3021},[39,67145,52361],{"class":45},[39,67147,67148,67150,67152,67154,67156,67158],{"class":41,"line":74},[39,67149,2108],{"class":45},[39,67151,51689],{"class":52354},[39,67153,52370],{"class":3021},[39,67155,50],{"class":45},[39,67157,52375],{"class":1319},[39,67159,52361],{"class":45},[39,67161,67162],{"class":41,"line":99},[39,67163,3458],{"emptyLinePlaceholder":1145},[39,67165,67166,67168,67170],{"class":41,"line":106},[39,67167,2108],{"class":45},[39,67169,52388],{"class":52354},[39,67171,52361],{"class":45},[39,67173,67174,67176,67178,67180,67182,67184],{"class":41,"line":112},[39,67175,53198],{"class":45},[39,67177,52398],{"class":52354},[39,67179,52401],{"class":3021},[39,67181,50],{"class":45},[39,67183,52406],{"class":1319},[39,67185,52361],{"class":45},[39,67187,67188,67190,67192,67194,67196,67198,67200,67202,67204],{"class":41,"line":118},[39,67189,53198],{"class":45},[39,67191,52398],{"class":52354},[39,67193,15976],{"class":3021},[39,67195,50],{"class":45},[39,67197,52445],{"class":1319},[39,67199,52425],{"class":3021},[39,67201,50],{"class":45},[39,67203,52452],{"class":1319},[39,67205,52361],{"class":45},[39,67207,67208,67210,67212,67214,67216],{"class":41,"line":413},[39,67209,53198],{"class":45},[39,67211,52461],{"class":52354},[39,67213,52464],{"class":45},[39,67215,52461],{"class":52354},[39,67217,52361],{"class":45},[39,67219,67220,67222,67224],{"class":41,"line":419},[39,67221,53198],{"class":45},[39,67223,1133],{"class":52354},[39,67225,52361],{"class":45},[39,67227,67228,67231],{"class":41,"line":425},[39,67229,67230],{"class":3021},"    .father",[39,67232,16628],{"class":45},[39,67234,67235,67237,67239,67241,67243],{"class":41,"line":443},[39,67236,55825],{"class":56},[39,67238,52491],{"class":45},[39,67240,66128],{"class":56},[39,67242,52546],{"class":49},[39,67244,2359],{"class":45},[39,67246,67247,67249,67251,67253,67255],{"class":41,"line":449},[39,67248,55839],{"class":56},[39,67250,52491],{"class":45},[39,67252,66128],{"class":56},[39,67254,52546],{"class":49},[39,67256,2359],{"class":45},[39,67258,67259,67261,67263,67265],{"class":41,"line":455},[39,67260,55938],{"class":56},[39,67262,52491],{"class":45},[39,67264,52699],{"class":56},[39,67266,2359],{"class":45},[39,67268,67269],{"class":41,"line":461},[39,67270,3245],{"class":45},[39,67272,67273],{"class":41,"line":475},[39,67274,3458],{"emptyLinePlaceholder":1145},[39,67276,67277,67280],{"class":41,"line":665},[39,67278,67279],{"class":3021},"    .son",[39,67281,16628],{"class":45},[39,67283,67284,67286,67288,67290,67292],{"class":41,"line":671},[39,67285,55825],{"class":56},[39,67287,52491],{"class":45},[39,67289,2780],{"class":56},[39,67291,52546],{"class":49},[39,67293,2359],{"class":45},[39,67295,67296,67298,67300,67302,67304],{"class":41,"line":684},[39,67297,55839],{"class":56},[39,67299,52491],{"class":45},[39,67301,2780],{"class":56},[39,67303,52546],{"class":49},[39,67305,2359],{"class":45},[39,67307,67308,67310,67312,67314],{"class":41,"line":2732},[39,67309,55938],{"class":56},[39,67311,52491],{"class":45},[39,67313,55943],{"class":56},[39,67315,2359],{"class":45},[39,67317,67318],{"class":41,"line":2737},[39,67319,3245],{"class":45},[39,67321,67322,67324,67326],{"class":41,"line":2751},[39,67323,53471],{"class":45},[39,67325,1133],{"class":52354},[39,67327,52361],{"class":45},[39,67329,67330,67332,67334],{"class":41,"line":2756},[39,67331,52839],{"class":45},[39,67333,52388],{"class":52354},[39,67335,52361],{"class":45},[39,67337,67338],{"class":41,"line":2785},[39,67339,3458],{"emptyLinePlaceholder":1145},[39,67341,67342,67344,67346],{"class":41,"line":2790},[39,67343,2108],{"class":45},[39,67345,52854],{"class":52354},[39,67347,52361],{"class":45},[39,67349,67350,67352,67354,67356,67358,67361],{"class":41,"line":2807},[39,67351,53198],{"class":45},[39,67353,52665],{"class":52354},[39,67355,54540],{"class":3021},[39,67357,50],{"class":45},[39,67359,67360],{"class":1319},"\"father\"",[39,67362,52361],{"class":45},[39,67364,67365,67367,67369,67371,67373,67376,67378,67380],{"class":41,"line":2812},[39,67366,52395],{"class":45},[39,67368,52665],{"class":52354},[39,67370,54540],{"class":3021},[39,67372,50],{"class":45},[39,67374,67375],{"class":1319},"\"son\"",[39,67377,56368],{"class":45},[39,67379,52665],{"class":52354},[39,67381,52361],{"class":45},[39,67383,67384,67386,67388],{"class":41,"line":2817},[39,67385,53471],{"class":45},[39,67387,52665],{"class":52354},[39,67389,52361],{"class":45},[39,67391,67392,67394,67396],{"class":41,"line":2822},[39,67393,53198],{"class":45},[39,67395,52867],{"class":52354},[39,67397,52361],{"class":45},[39,67399,67400,67402,67405,67407,67409,67411,67413,67416],{"class":41,"line":2836},[39,67401,12277],{"class":49},[39,67403,67404],{"class":56}," fa",[39,67406,14620],{"class":49},[39,67408,55450],{"class":45},[39,67410,55453],{"class":3021},[39,67412,1221],{"class":45},[39,67414,67415],{"class":1319},"'.father'",[39,67417,209],{"class":45},[39,67419,67420,67422,67425,67427,67429,67431,67433,67436],{"class":41,"line":2841},[39,67421,12277],{"class":49},[39,67423,67424],{"class":56}," son",[39,67426,14620],{"class":49},[39,67428,55450],{"class":45},[39,67430,55453],{"class":3021},[39,67432,1221],{"class":45},[39,67434,67435],{"class":1319},"'.son'",[39,67437,209],{"class":45},[39,67439,67440,67442,67444,67446,67448,67450,67452],{"class":41,"line":3635},[39,67441,53461],{"class":45},[39,67443,58867],{"class":3021},[39,67445,1221],{"class":45},[39,67447,58872],{"class":1319},[39,67449,13491],{"class":45},[39,67451,55503],{"class":49},[39,67453,55506],{"class":45},[39,67455,67456,67458,67460,67463],{"class":41,"line":3649},[39,67457,59979],{"class":3021},[39,67459,1221],{"class":45},[39,67461,67462],{"class":1319},"'woshiu1'",[39,67464,209],{"class":45},[39,67466,67467,67469,67471],{"class":41,"line":3657},[39,67468,55589],{"class":45},[39,67470,2428],{"class":56},[39,67472,209],{"class":45},[39,67474,67475,67478,67480,67482,67484,67486,67488],{"class":41,"line":3662},[39,67476,67477],{"class":45},"    fa.",[39,67479,58867],{"class":3021},[39,67481,1221],{"class":45},[39,67483,58872],{"class":1319},[39,67485,13491],{"class":45},[39,67487,55503],{"class":49},[39,67489,55506],{"class":45},[39,67491,67492,67494,67496,67499],{"class":41,"line":3668},[39,67493,59979],{"class":3021},[39,67495,1221],{"class":45},[39,67497,67498],{"class":1319},"'1'",[39,67500,209],{"class":45},[39,67502,67503,67505,67507],{"class":41,"line":3674},[39,67504,55589],{"class":45},[39,67506,2428],{"class":56},[39,67508,209],{"class":45},[39,67510,67511,67514,67516,67518,67520,67522,67524],{"class":41,"line":3679},[39,67512,67513],{"class":45},"    son.",[39,67515,58867],{"class":3021},[39,67517,1221],{"class":45},[39,67519,58872],{"class":1319},[39,67521,13491],{"class":45},[39,67523,55503],{"class":49},[39,67525,55506],{"class":45},[39,67527,67528,67530,67532,67535],{"class":41,"line":9004},[39,67529,59979],{"class":3021},[39,67531,1221],{"class":45},[39,67533,67534],{"class":1319},"'2'",[39,67536,209],{"class":45},[39,67538,67539,67541,67543],{"class":41,"line":9028},[39,67540,55589],{"class":45},[39,67542,2428],{"class":56},[39,67544,209],{"class":45},[39,67546,67547,67549,67551],{"class":41,"line":9033},[39,67548,53471],{"class":45},[39,67550,52867],{"class":52354},[39,67552,52361],{"class":45},[39,67554,67555,67557,67559],{"class":41,"line":9039},[39,67556,52839],{"class":45},[39,67558,52854],{"class":52354},[39,67560,52361],{"class":45},[39,67562,67563],{"class":41,"line":9066},[39,67564,3458],{"emptyLinePlaceholder":1145},[39,67566,67567,67569,67571],{"class":41,"line":9071},[39,67568,52839],{"class":45},[39,67570,51689],{"class":52354},[39,67572,52361],{"class":45},[19,67574,67575],{},[269,67576],{"alt":34,"src":67577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,67579,67580],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23054,67582,67584],{"id":67583},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,67586,67587],{},[269,67588],{"alt":34,"src":67589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,67591,67592],{},"反着来",[19,67594,67595],{},"注意是同名事件，比如都是‘click’",[23054,67597,67599],{"id":67598},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,67601,67602],{},[269,67603],{"alt":34,"src":67604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23054,67606,67608],{"id":67607},"_3314-解绑事件","3.3.1.4 解绑事件",[19,67610,67611],{},[269,67612],{"alt":34,"src":67613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,67615,67616],{},[269,67617],{"alt":34,"src":67618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23054,67620,67622],{"id":67621},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[1171,67624,67625],{},[1174,67626,67627],{},"事件类型的区别",[19,67629,67630],{},[269,67631],{"alt":34,"src":67632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,67634,67635],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[1171,67637,67638],{"start":74},[1174,67639,67640],{},"注册事件的区别",[19,67642,67643],{},[269,67644],{"alt":34,"src":67645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23054,67647,67649],{"id":67648},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,67651,67652],{},[269,67653],{"alt":34,"src":67654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,67656,67657],{},[269,67658],{"alt":34,"src":67659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[29,67661,67663],{"className":54121,"code":67662,"language":54123,"meta":34,"style":34},"\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",[36,67664,67665,67673,67690,67713,67721,67726,67731,67736,67740,67748,67756],{"__ignoreMap":34},[39,67666,67667,67669,67671],{"class":41,"line":42},[39,67668,2108],{"class":45},[39,67670,52854],{"class":52354},[39,67672,52361],{"class":45},[39,67674,67675,67677,67680,67683,67685,67688],{"class":41,"line":74},[39,67676,53198],{"class":45},[39,67678,67679],{"class":52354},"form",[39,67681,67682],{"class":3021}," action",[39,67684,50],{"class":45},[39,67686,67687],{"class":1319},"\"http:\u002F\u002Fwww.itcast.cn\"",[39,67689,52361],{"class":45},[39,67691,67692,67694,67696,67698,67700,67703,67706,67708,67711],{"class":41,"line":99},[39,67693,52395],{"class":45},[39,67695,54875],{"class":52354},[39,67697,54878],{"class":3021},[39,67699,50],{"class":45},[39,67701,67702],{"class":1319},"\"submit\"",[39,67704,67705],{"class":3021}," value",[39,67707,50],{"class":45},[39,67709,67710],{"class":1319},"\"免费注册\"",[39,67712,52361],{"class":45},[39,67714,67715,67717,67719],{"class":41,"line":106},[39,67716,52395],{"class":45},[39,67718,52867],{"class":52354},[39,67720,52361],{"class":45},[39,67722,67723],{"class":41,"line":112},[39,67724,67725],{"class":45},"      const form = document.querySelector('form')\n",[39,67727,67728],{"class":41,"line":118},[39,67729,67730],{"class":45},"      form.addEventListener('submit', function (e) {\n",[39,67732,67733],{"class":41,"line":413},[39,67734,67735],{"class":45},"        e.preventDefault()\n",[39,67737,67738],{"class":41,"line":419},[39,67739,65869],{"class":45},[39,67741,67742,67744,67746],{"class":41,"line":425},[39,67743,52830],{"class":45},[39,67745,52867],{"class":52354},[39,67747,52361],{"class":45},[39,67749,67750,67752,67754],{"class":41,"line":443},[39,67751,53471],{"class":45},[39,67753,67679],{"class":52354},[39,67755,52361],{"class":45},[39,67757,67758,67760,67762],{"class":41,"line":449},[39,67759,52839],{"class":45},[39,67761,52854],{"class":52354},[39,67763,52361],{"class":45},[19,67765,67766],{},"点击不在跳转！！！",[1188,67768,67770],{"id":67769},"_332-事件委托","3.3.2 事件委托",[19,67772,67773],{},[269,67774],{"alt":34,"src":67775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[29,67777,67779],{"className":51687,"code":67778,"language":51689,"meta":34,"style":34},"\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",[36,67780,67781,67791,67805,67809,67817,67831,67851,67863,67871,67875,67883,67891,67903,67915,67927,67939,67951,67964,67972,67980,67985,68004,68025,68030,68035,68040,68045,68054,68058,68068,68072,68077,68082,68096,68106,68110,68114,68122,68130,68134],{"__ignoreMap":34},[39,67782,67783,67785,67787,67789],{"class":41,"line":42},[39,67784,52351],{"class":45},[39,67786,52355],{"class":52354},[39,67788,52358],{"class":3021},[39,67790,52361],{"class":45},[39,67792,67793,67795,67797,67799,67801,67803],{"class":41,"line":74},[39,67794,2108],{"class":45},[39,67796,51689],{"class":52354},[39,67798,52370],{"class":3021},[39,67800,50],{"class":45},[39,67802,52375],{"class":1319},[39,67804,52361],{"class":45},[39,67806,67807],{"class":41,"line":99},[39,67808,3458],{"emptyLinePlaceholder":1145},[39,67810,67811,67813,67815],{"class":41,"line":106},[39,67812,2108],{"class":45},[39,67814,52388],{"class":52354},[39,67816,52361],{"class":45},[39,67818,67819,67821,67823,67825,67827,67829],{"class":41,"line":112},[39,67820,53198],{"class":45},[39,67822,52398],{"class":52354},[39,67824,52401],{"class":3021},[39,67826,50],{"class":45},[39,67828,52406],{"class":1319},[39,67830,52361],{"class":45},[39,67832,67833,67835,67837,67839,67841,67843,67845,67847,67849],{"class":41,"line":118},[39,67834,53198],{"class":45},[39,67836,52398],{"class":52354},[39,67838,15976],{"class":3021},[39,67840,50],{"class":45},[39,67842,52445],{"class":1319},[39,67844,52425],{"class":3021},[39,67846,50],{"class":45},[39,67848,52452],{"class":1319},[39,67850,52361],{"class":45},[39,67852,67853,67855,67857,67859,67861],{"class":41,"line":413},[39,67854,53198],{"class":45},[39,67856,52461],{"class":52354},[39,67858,52464],{"class":45},[39,67860,52461],{"class":52354},[39,67862,52361],{"class":45},[39,67864,67865,67867,67869],{"class":41,"line":419},[39,67866,52839],{"class":45},[39,67868,52388],{"class":52354},[39,67870,52361],{"class":45},[39,67872,67873],{"class":41,"line":425},[39,67874,3458],{"emptyLinePlaceholder":1145},[39,67876,67877,67879,67881],{"class":41,"line":443},[39,67878,2108],{"class":45},[39,67880,52854],{"class":52354},[39,67882,52361],{"class":45},[39,67884,67885,67887,67889],{"class":41,"line":449},[39,67886,53198],{"class":45},[39,67888,2205],{"class":52354},[39,67890,52361],{"class":45},[39,67892,67893,67895,67897,67899,67901],{"class":41,"line":455},[39,67894,52395],{"class":45},[39,67896,1174],{"class":52354},[39,67898,55020],{"class":45},[39,67900,1174],{"class":52354},[39,67902,52361],{"class":45},[39,67904,67905,67907,67909,67911,67913],{"class":41,"line":461},[39,67906,52395],{"class":45},[39,67908,1174],{"class":52354},[39,67910,55039],{"class":45},[39,67912,1174],{"class":52354},[39,67914,52361],{"class":45},[39,67916,67917,67919,67921,67923,67925],{"class":41,"line":475},[39,67918,52395],{"class":45},[39,67920,1174],{"class":52354},[39,67922,55058],{"class":45},[39,67924,1174],{"class":52354},[39,67926,52361],{"class":45},[39,67928,67929,67931,67933,67935,67937],{"class":41,"line":665},[39,67930,52395],{"class":45},[39,67932,1174],{"class":52354},[39,67934,55077],{"class":45},[39,67936,1174],{"class":52354},[39,67938,52361],{"class":45},[39,67940,67941,67943,67945,67947,67949],{"class":41,"line":671},[39,67942,52395],{"class":45},[39,67944,1174],{"class":52354},[39,67946,55096],{"class":45},[39,67948,1174],{"class":52354},[39,67950,52361],{"class":45},[39,67952,67953,67955,67957,67960,67962],{"class":41,"line":684},[39,67954,52395],{"class":45},[39,67956,19],{"class":52354},[39,67958,67959],{"class":45},">我不需要变色\u003C\u002F",[39,67961,19],{"class":52354},[39,67963,52361],{"class":45},[39,67965,67966,67968,67970],{"class":41,"line":2732},[39,67967,53471],{"class":45},[39,67969,2205],{"class":52354},[39,67971,52361],{"class":45},[39,67973,67974,67976,67978],{"class":41,"line":2737},[39,67975,53198],{"class":45},[39,67977,52867],{"class":52354},[39,67979,52361],{"class":45},[39,67981,67982],{"class":41,"line":2751},[39,67983,67984],{"class":102},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[39,67986,67987,67989,67991,67993,67995,67997,67999,68002],{"class":41,"line":2756},[39,67988,12277],{"class":49},[39,67990,62346],{"class":56},[39,67992,14620],{"class":49},[39,67994,55450],{"class":45},[39,67996,55453],{"class":3021},[39,67998,1221],{"class":45},[39,68000,68001],{"class":1319},"'ul'",[39,68003,209],{"class":45},[39,68005,68006,68009,68011,68013,68015,68017,68019,68021,68023],{"class":41,"line":2785},[39,68007,68008],{"class":45},"    ul.",[39,68010,58867],{"class":3021},[39,68012,1221],{"class":45},[39,68014,58872],{"class":1319},[39,68016,13491],{"class":45},[39,68018,55503],{"class":49},[39,68020,2716],{"class":45},[39,68022,1290],{"class":254},[39,68024,13498],{"class":45},[39,68026,68027],{"class":41,"line":2790},[39,68028,68029],{"class":102},"      \u002F\u002F alert(1)\n",[39,68031,68032],{"class":41,"line":2807},[39,68033,68034],{"class":102},"      \u002F\u002F e.target就是我们点击的对象\n",[39,68036,68037],{"class":41,"line":2812},[39,68038,68039],{"class":102},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[39,68041,68042],{"class":41,"line":2817},[39,68043,68044],{"class":102},"      \u002F\u002F e.target.style.color = 'red'\n",[39,68046,68047,68049,68051],{"class":41,"line":2822},[39,68048,59298],{"class":45},[39,68050,59301],{"class":3021},[39,68052,68053],{"class":45},"(e)\n",[39,68055,68056],{"class":41,"line":2836},[39,68057,3458],{"emptyLinePlaceholder":1145},[39,68059,68060,68062,68065],{"class":41,"line":2841},[39,68061,59298],{"class":45},[39,68063,68064],{"class":3021},"dir",[39,68066,68067],{"class":45},"(e.target)\n",[39,68069,68070],{"class":41,"line":3635},[39,68071,3458],{"emptyLinePlaceholder":1145},[39,68073,68074],{"class":41,"line":3649},[39,68075,68076],{"class":102},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[39,68078,68079],{"class":41,"line":3657},[39,68080,68081],{"class":102},"      \u002F\u002F 通过tagName来进行判断\n",[39,68083,68084,68086,68089,68091,68094],{"class":41,"line":3662},[39,68085,55534],{"class":49},[39,68087,68088],{"class":45}," (e.target.tagName ",[39,68090,55540],{"class":49},[39,68092,68093],{"class":1319}," 'LI'",[39,68095,13498],{"class":45},[39,68097,68098,68101,68103],{"class":41,"line":3668},[39,68099,68100],{"class":45},"        e.target.style.color ",[39,68102,50],{"class":49},[39,68104,68105],{"class":1319}," 'red'\n",[39,68107,68108],{"class":41,"line":3674},[39,68109,53452],{"class":45},[39,68111,68112],{"class":41,"line":3679},[39,68113,34516],{"class":45},[39,68115,68116,68118,68120],{"class":41,"line":9004},[39,68117,53471],{"class":45},[39,68119,52867],{"class":52354},[39,68121,52361],{"class":45},[39,68123,68124,68126,68128],{"class":41,"line":9028},[39,68125,52839],{"class":45},[39,68127,52854],{"class":52354},[39,68129,52361],{"class":45},[39,68131,68132],{"class":41,"line":9033},[39,68133,3458],{"emptyLinePlaceholder":1145},[39,68135,68136,68138,68140],{"class":41,"line":9039},[39,68137,52839],{"class":45},[39,68139,51689],{"class":52354},[39,68141,52361],{"class":45},[19,68143,68144],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,68146,68147],{},"if(e.target.ragName==='P') {}",[19,68149,68150],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,68152,68153],{},"通过事件委托的方式实现tab栏切换改造：",[19,68155,68156],{},"一定要记住自定义属性！！！！！！",[19,68158,68159],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,68161,68162],{},"id是自定义的属性名",[19,68164,68165],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[29,68167,68169],{"className":51687,"code":68168,"language":51689,"meta":34,"style":34},"\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",[36,68170,68171,68181,68195,68199,68207,68221,68241,68261,68273,68281,68287,68297,68307,68311,68315,68321,68333,68345,68357,68373,68377,68381,68387,68399,68411,68423,68433,68443,68447,68451,68459,68471,68481,68493,68497,68501,68509,68519,68529,68539,68543,68547,68557,68571,68583,68587,68591,68603,68613,68629,68639,68643,68647,68661,68671,68681,68685,68689,68695,68709,68713,68717,68725,68735,68739,68743,68752,68762,68766,68774,68782,68786,68794,68808,68822,68834,68842,68881,68913,68945,68977,69009,69017,69025,69039,69073,69107,69141,69175,69209,69217,69225,69233,69238,69243,69262,69267,69287,69295,69300,69313,69334,69347,69351,69356,69361,69374,69394,69422,69426,69430,69434,69442,69450,69454],{"__ignoreMap":34},[39,68172,68173,68175,68177,68179],{"class":41,"line":42},[39,68174,52351],{"class":45},[39,68176,52355],{"class":52354},[39,68178,52358],{"class":3021},[39,68180,52361],{"class":45},[39,68182,68183,68185,68187,68189,68191,68193],{"class":41,"line":74},[39,68184,2108],{"class":45},[39,68186,51689],{"class":52354},[39,68188,52370],{"class":3021},[39,68190,50],{"class":45},[39,68192,52375],{"class":1319},[39,68194,52361],{"class":45},[39,68196,68197],{"class":41,"line":99},[39,68198,3458],{"emptyLinePlaceholder":1145},[39,68200,68201,68203,68205],{"class":41,"line":106},[39,68202,2108],{"class":45},[39,68204,52388],{"class":52354},[39,68206,52361],{"class":45},[39,68208,68209,68211,68213,68215,68217,68219],{"class":41,"line":112},[39,68210,53198],{"class":45},[39,68212,52398],{"class":52354},[39,68214,52401],{"class":3021},[39,68216,50],{"class":45},[39,68218,52406],{"class":1319},[39,68220,60181],{"class":45},[39,68222,68223,68225,68227,68229,68231,68233,68235,68237,68239],{"class":41,"line":118},[39,68224,53198],{"class":45},[39,68226,52398],{"class":52354},[39,68228,52417],{"class":3021},[39,68230,50],{"class":45},[39,68232,52422],{"class":1319},[39,68234,52425],{"class":3021},[39,68236,50],{"class":45},[39,68238,52430],{"class":1319},[39,68240,60181],{"class":45},[39,68242,68243,68245,68247,68249,68251,68253,68255,68257,68259],{"class":41,"line":413},[39,68244,53198],{"class":45},[39,68246,52398],{"class":52354},[39,68248,15976],{"class":3021},[39,68250,50],{"class":45},[39,68252,52445],{"class":1319},[39,68254,52425],{"class":3021},[39,68256,50],{"class":45},[39,68258,52452],{"class":1319},[39,68260,60181],{"class":45},[39,68262,68263,68265,68267,68269,68271],{"class":41,"line":419},[39,68264,53198],{"class":45},[39,68266,52461],{"class":52354},[39,68268,64679],{"class":45},[39,68270,52461],{"class":52354},[39,68272,52361],{"class":45},[39,68274,68275,68277,68279],{"class":41,"line":425},[39,68276,53198],{"class":45},[39,68278,1133],{"class":52354},[39,68280,52361],{"class":45},[39,68282,68283,68285],{"class":41,"line":443},[39,68284,7459],{"class":52354},[39,68286,16628],{"class":45},[39,68288,68289,68291,68293,68295],{"class":41,"line":449},[39,68290,55760],{"class":56},[39,68292,52491],{"class":45},[39,68294,260],{"class":56},[39,68296,2359],{"class":45},[39,68298,68299,68301,68303,68305],{"class":41,"line":455},[39,68300,55749],{"class":56},[39,68302,52491],{"class":45},[39,68304,260],{"class":56},[39,68306,2359],{"class":45},[39,68308,68309],{"class":41,"line":461},[39,68310,3245],{"class":45},[39,68312,68313],{"class":41,"line":475},[39,68314,3458],{"emptyLinePlaceholder":1145},[39,68316,68317,68319],{"class":41,"line":665},[39,68318,64730],{"class":3021},[39,68320,16628],{"class":45},[39,68322,68323,68325,68327,68329,68331],{"class":41,"line":671},[39,68324,55825],{"class":56},[39,68326,52491],{"class":45},[39,68328,64741],{"class":56},[39,68330,52546],{"class":49},[39,68332,2359],{"class":45},[39,68334,68335,68337,68339,68341,68343],{"class":41,"line":684},[39,68336,55839],{"class":56},[39,68338,52491],{"class":45},[39,68340,64754],{"class":56},[39,68342,52546],{"class":49},[39,68344,2359],{"class":45},[39,68346,68347,68349,68351,68353,68355],{"class":41,"line":2732},[39,68348,55760],{"class":56},[39,68350,52491],{"class":45},[39,68352,1898],{"class":56},[39,68354,52546],{"class":49},[39,68356,2359],{"class":45},[39,68358,68359,68361,68363,68365,68367,68369,68371],{"class":41,"line":2737},[39,68360,63031],{"class":56},[39,68362,52491],{"class":45},[39,68364,57],{"class":56},[39,68366,52546],{"class":49},[39,68368,52575],{"class":56},[39,68370,63298],{"class":56},[39,68372,2359],{"class":45},[39,68374,68375],{"class":41,"line":2751},[39,68376,3245],{"class":45},[39,68378,68379],{"class":41,"line":2756},[39,68380,3458],{"emptyLinePlaceholder":1145},[39,68382,68383,68385],{"class":41,"line":2785},[39,68384,64799],{"class":3021},[39,68386,16628],{"class":45},[39,68388,68389,68391,68393,68395,68397],{"class":41,"line":2790},[39,68390,55825],{"class":56},[39,68392,52491],{"class":45},[39,68394,1519],{"class":56},[39,68396,1534],{"class":49},[39,68398,2359],{"class":45},[39,68400,68401,68403,68405,68407,68409],{"class":41,"line":2807},[39,68402,55839],{"class":56},[39,68404,52491],{"class":45},[39,68406,2105],{"class":56},[39,68408,52546],{"class":49},[39,68410,2359],{"class":45},[39,68412,68413,68415,68417,68419,68421],{"class":41,"line":2812},[39,68414,58413],{"class":56},[39,68416,52491],{"class":45},[39,68418,2105],{"class":56},[39,68420,52546],{"class":49},[39,68422,2359],{"class":45},[39,68424,68425,68427,68429,68431],{"class":41,"line":2817},[39,68426,56063],{"class":56},[39,68428,52491],{"class":45},[39,68430,52531],{"class":56},[39,68432,2359],{"class":45},[39,68434,68435,68437,68439,68441],{"class":41,"line":2822},[39,68436,56074],{"class":56},[39,68438,52491],{"class":45},[39,68440,52722],{"class":56},[39,68442,2359],{"class":45},[39,68444,68445],{"class":41,"line":2836},[39,68446,3245],{"class":45},[39,68448,68449],{"class":41,"line":2841},[39,68450,3458],{"emptyLinePlaceholder":1145},[39,68452,68453,68455,68457],{"class":41,"line":3635},[39,68454,64799],{"class":3021},[39,68456,64872],{"class":52354},[39,68458,16628],{"class":45},[39,68460,68461,68463,68465,68467,68469],{"class":41,"line":3649},[39,68462,55976],{"class":56},[39,68464,52491],{"class":45},[39,68466,1998],{"class":56},[39,68468,52546],{"class":49},[39,68470,2359],{"class":45},[39,68472,68473,68475,68477,68479],{"class":41,"line":3657},[39,68474,63388],{"class":56},[39,68476,52491],{"class":45},[39,68478,64895],{"class":56},[39,68480,2359],{"class":45},[39,68482,68483,68485,68487,68489,68491],{"class":41,"line":3662},[39,68484,63054],{"class":56},[39,68486,52491],{"class":45},[39,68488,1898],{"class":56},[39,68490,52546],{"class":49},[39,68492,2359],{"class":45},[39,68494,68495],{"class":41,"line":3668},[39,68496,3245],{"class":45},[39,68498,68499],{"class":41,"line":3674},[39,68500,3458],{"emptyLinePlaceholder":1145},[39,68502,68503,68505,68507],{"class":41,"line":3679},[39,68504,64799],{"class":3021},[39,68506,62346],{"class":52354},[39,68508,16628],{"class":45},[39,68510,68511,68513,68515,68517],{"class":41,"line":9004},[39,68512,55786],{"class":56},[39,68514,52491],{"class":45},[39,68516,55791],{"class":56},[39,68518,2359],{"class":45},[39,68520,68521,68523,68525,68527],{"class":41,"line":9028},[39,68522,56063],{"class":56},[39,68524,52491],{"class":45},[39,68526,52531],{"class":56},[39,68528,2359],{"class":45},[39,68530,68531,68533,68535,68537],{"class":41,"line":9033},[39,68532,56074],{"class":56},[39,68534,52491],{"class":45},[39,68536,52634],{"class":56},[39,68538,2359],{"class":45},[39,68540,68541],{"class":41,"line":9039},[39,68542,3245],{"class":45},[39,68544,68545],{"class":41,"line":9066},[39,68546,3458],{"emptyLinePlaceholder":1145},[39,68548,68549,68551,68553,68555],{"class":41,"line":9071},[39,68550,64799],{"class":3021},[39,68552,62346],{"class":52354},[39,68554,56129],{"class":52354},[39,68556,16628],{"class":45},[39,68558,68559,68561,68563,68565,68567,68569],{"class":41,"line":9077},[39,68560,55760],{"class":56},[39,68562,52491],{"class":45},[39,68564,260],{"class":56},[39,68566,10006],{"class":56},[39,68568,52546],{"class":49},[39,68570,2359],{"class":45},[39,68572,68573,68575,68577,68579,68581],{"class":41,"line":9089},[39,68574,55976],{"class":56},[39,68576,52491],{"class":45},[39,68578,1749],{"class":56},[39,68580,52546],{"class":49},[39,68582,2359],{"class":45},[39,68584,68585],{"class":41,"line":9101},[39,68586,3245],{"class":45},[39,68588,68589],{"class":41,"line":9113},[39,68590,3458],{"emptyLinePlaceholder":1145},[39,68592,68593,68595,68597,68599,68601],{"class":41,"line":10772},[39,68594,64799],{"class":3021},[39,68596,62346],{"class":52354},[39,68598,56129],{"class":52354},[39,68600,2464],{"class":52354},[39,68602,16628],{"class":45},[39,68604,68605,68607,68609,68611],{"class":41,"line":10797},[39,68606,65024],{"class":56},[39,68608,52491],{"class":45},[39,68610,55791],{"class":56},[39,68612,2359],{"class":45},[39,68614,68615,68617,68619,68621,68623,68625,68627],{"class":41,"line":10820},[39,68616,63286],{"class":56},[39,68618,52491],{"class":45},[39,68620,63],{"class":56},[39,68622,52546],{"class":49},[39,68624,52575],{"class":56},[39,68626,65045],{"class":56},[39,68628,2359],{"class":45},[39,68630,68631,68633,68635,68637],{"class":41,"line":10844},[39,68632,58470],{"class":56},[39,68634,52491],{"class":45},[39,68636,63423],{"class":56},[39,68638,2359],{"class":45},[39,68640,68641],{"class":41,"line":10849},[39,68642,3245],{"class":45},[39,68644,68645],{"class":41,"line":10854},[39,68646,3458],{"emptyLinePlaceholder":1145},[39,68648,68649,68651,68653,68655,68657,68659],{"class":41,"line":10859},[39,68650,64799],{"class":3021},[39,68652,62346],{"class":52354},[39,68654,56129],{"class":52354},[39,68656,2464],{"class":52354},[39,68658,65078],{"class":3021},[39,68660,16628],{"class":45},[39,68662,68663,68665,68667,68669],{"class":41,"line":10868},[39,68664,62845],{"class":56},[39,68666,52491],{"class":45},[39,68668,65089],{"class":56},[39,68670,2359],{"class":45},[39,68672,68673,68675,68677,68679],{"class":41,"line":10873},[39,68674,58470],{"class":56},[39,68676,52491],{"class":45},[39,68678,65089],{"class":56},[39,68680,2359],{"class":45},[39,68682,68683],{"class":41,"line":10879},[39,68684,3245],{"class":45},[39,68686,68687],{"class":41,"line":10900},[39,68688,3458],{"emptyLinePlaceholder":1145},[39,68690,68691,68693],{"class":41,"line":10906},[39,68692,65114],{"class":3021},[39,68694,16628],{"class":45},[39,68696,68697,68699,68701,68703,68705,68707],{"class":41,"line":10920},[39,68698,55749],{"class":56},[39,68700,52491],{"class":45},[39,68702,260],{"class":56},[39,68704,65127],{"class":56},[39,68706,52546],{"class":49},[39,68708,2359],{"class":45},[39,68710,68711],{"class":41,"line":10926},[39,68712,3245],{"class":45},[39,68714,68715],{"class":41,"line":10953},[39,68716,3458],{"emptyLinePlaceholder":1145},[39,68718,68719,68721,68723],{"class":41,"line":10962},[39,68720,65114],{"class":3021},[39,68722,63228],{"class":3021},[39,68724,16628],{"class":45},[39,68726,68727,68729,68731,68733],{"class":41,"line":10968},[39,68728,56063],{"class":56},[39,68730,52491],{"class":45},[39,68732,55791],{"class":56},[39,68734,2359],{"class":45},[39,68736,68737],{"class":41,"line":10976},[39,68738,3245],{"class":45},[39,68740,68741],{"class":41,"line":10981},[39,68742,3458],{"emptyLinePlaceholder":1145},[39,68744,68745,68747,68750],{"class":41,"line":17660},[39,68746,65114],{"class":3021},[39,68748,68749],{"class":3021}," .active",[39,68751,16628],{"class":45},[39,68753,68754,68756,68758,68760],{"class":41,"line":17666},[39,68755,56063],{"class":56},[39,68757,52491],{"class":45},[39,68759,61923],{"class":56},[39,68761,2359],{"class":45},[39,68763,68764],{"class":41,"line":17689},[39,68765,3245],{"class":45},[39,68767,68768,68770,68772],{"class":41,"line":17695},[39,68769,53471],{"class":45},[39,68771,1133],{"class":52354},[39,68773,52361],{"class":45},[39,68775,68776,68778,68780],{"class":41,"line":17718},[39,68777,52839],{"class":45},[39,68779,52388],{"class":52354},[39,68781,52361],{"class":45},[39,68783,68784],{"class":41,"line":17732},[39,68785,3458],{"emptyLinePlaceholder":1145},[39,68787,68788,68790,68792],{"class":41,"line":17752},[39,68789,2108],{"class":45},[39,68791,52854],{"class":52354},[39,68793,52361],{"class":45},[39,68795,68796,68798,68800,68802,68804,68806],{"class":41,"line":17758},[39,68797,53198],{"class":45},[39,68799,52665],{"class":52354},[39,68801,54540],{"class":3021},[39,68803,50],{"class":45},[39,68805,65229],{"class":1319},[39,68807,52361],{"class":45},[39,68809,68810,68812,68814,68816,68818,68820],{"class":41,"line":17769},[39,68811,52395],{"class":45},[39,68813,52665],{"class":52354},[39,68815,54540],{"class":3021},[39,68817,50],{"class":45},[39,68819,65244],{"class":1319},[39,68821,52361],{"class":45},[39,68823,68824,68826,68828,68830,68832],{"class":41,"line":17792},[39,68825,56288],{"class":45},[39,68827,1188],{"class":52354},[39,68829,65255],{"class":45},[39,68831,1188],{"class":52354},[39,68833,52361],{"class":45},[39,68835,68836,68838,68840],{"class":41,"line":17814},[39,68837,56288],{"class":45},[39,68839,2205],{"class":52354},[39,68841,52361],{"class":45},[39,68843,68844,68846,68848,68850,68852,68854,68856,68858,68860,68862,68864,68866,68868,68871,68873,68875,68877,68879],{"class":41,"line":17819},[39,68845,56356],{"class":45},[39,68847,1174],{"class":52354},[39,68849,62106],{"class":45},[39,68851,46],{"class":52354},[39,68853,54540],{"class":3021},[39,68855,50],{"class":45},[39,68857,60760],{"class":1319},[39,68859,62111],{"class":3021},[39,68861,50],{"class":45},[39,68863,65290],{"class":1319},[39,68865,55005],{"class":3021},[39,68867,50],{"class":45},[39,68869,68870],{"class":1319},"\"0\"",[39,68872,65293],{"class":45},[39,68874,46],{"class":52354},[39,68876,56368],{"class":45},[39,68878,1174],{"class":52354},[39,68880,52361],{"class":45},[39,68882,68883,68885,68887,68889,68891,68893,68895,68897,68899,68901,68903,68905,68907,68909,68911],{"class":41,"line":17825},[39,68884,56356],{"class":45},[39,68886,1174],{"class":52354},[39,68888,62106],{"class":45},[39,68890,46],{"class":52354},[39,68892,62111],{"class":3021},[39,68894,50],{"class":45},[39,68896,65290],{"class":1319},[39,68898,55005],{"class":3021},[39,68900,50],{"class":45},[39,68902,4736],{"class":1319},[39,68904,65320],{"class":45},[39,68906,46],{"class":52354},[39,68908,56368],{"class":45},[39,68910,1174],{"class":52354},[39,68912,52361],{"class":45},[39,68914,68915,68917,68919,68921,68923,68925,68927,68929,68931,68933,68935,68937,68939,68941,68943],{"class":41,"line":17839},[39,68916,56356],{"class":45},[39,68918,1174],{"class":52354},[39,68920,62106],{"class":45},[39,68922,46],{"class":52354},[39,68924,62111],{"class":3021},[39,68926,50],{"class":45},[39,68928,65290],{"class":1319},[39,68930,55005],{"class":3021},[39,68932,50],{"class":45},[39,68934,4759],{"class":1319},[39,68936,65347],{"class":45},[39,68938,46],{"class":52354},[39,68940,56368],{"class":45},[39,68942,1174],{"class":52354},[39,68944,52361],{"class":45},[39,68946,68947,68949,68951,68953,68955,68957,68959,68961,68963,68965,68967,68969,68971,68973,68975],{"class":41,"line":17852},[39,68948,56356],{"class":45},[39,68950,1174],{"class":52354},[39,68952,62106],{"class":45},[39,68954,46],{"class":52354},[39,68956,62111],{"class":3021},[39,68958,50],{"class":45},[39,68960,65290],{"class":1319},[39,68962,55005],{"class":3021},[39,68964,50],{"class":45},[39,68966,4772],{"class":1319},[39,68968,65374],{"class":45},[39,68970,46],{"class":52354},[39,68972,56368],{"class":45},[39,68974,1174],{"class":52354},[39,68976,52361],{"class":45},[39,68978,68979,68981,68983,68985,68987,68989,68991,68993,68995,68997,68999,69001,69003,69005,69007],{"class":41,"line":17857},[39,68980,56356],{"class":45},[39,68982,1174],{"class":52354},[39,68984,62106],{"class":45},[39,68986,46],{"class":52354},[39,68988,62111],{"class":3021},[39,68990,50],{"class":45},[39,68992,65290],{"class":1319},[39,68994,55005],{"class":3021},[39,68996,50],{"class":45},[39,68998,4785],{"class":1319},[39,69000,65401],{"class":45},[39,69002,46],{"class":52354},[39,69004,56368],{"class":45},[39,69006,1174],{"class":52354},[39,69008,52361],{"class":45},[39,69010,69011,69013,69015],{"class":41,"line":17871},[39,69012,56461],{"class":45},[39,69014,2205],{"class":52354},[39,69016,52361],{"class":45},[39,69018,69019,69021,69023],{"class":41,"line":17876},[39,69020,52830],{"class":45},[39,69022,52665],{"class":52354},[39,69024,52361],{"class":45},[39,69026,69027,69029,69031,69033,69035,69037],{"class":41,"line":17882},[39,69028,52395],{"class":45},[39,69030,52665],{"class":52354},[39,69032,54540],{"class":3021},[39,69034,50],{"class":45},[39,69036,65438],{"class":1319},[39,69038,52361],{"class":45},[39,69040,69041,69043,69045,69047,69049,69051,69053,69055,69057,69059,69061,69063,69065,69067,69069,69071],{"class":41,"line":17887},[39,69042,56288],{"class":45},[39,69044,52665],{"class":52354},[39,69046,54540],{"class":3021},[39,69048,50],{"class":45},[39,69050,65453],{"class":1319},[39,69052,62106],{"class":45},[39,69054,269],{"class":52354},[39,69056,56293],{"class":3021},[39,69058,50],{"class":45},[39,69060,65464],{"class":1319},[39,69062,56301],{"class":3021},[39,69064,50],{"class":45},[39,69066,8708],{"class":1319},[39,69068,65473],{"class":45},[39,69070,52665],{"class":52354},[39,69072,52361],{"class":45},[39,69074,69075,69077,69079,69081,69083,69085,69087,69089,69091,69093,69095,69097,69099,69101,69103,69105],{"class":41,"line":17901},[39,69076,56288],{"class":45},[39,69078,52665],{"class":52354},[39,69080,54540],{"class":3021},[39,69082,50],{"class":45},[39,69084,63677],{"class":1319},[39,69086,62106],{"class":45},[39,69088,269],{"class":52354},[39,69090,56293],{"class":3021},[39,69092,50],{"class":45},[39,69094,65500],{"class":1319},[39,69096,56301],{"class":3021},[39,69098,50],{"class":45},[39,69100,8708],{"class":1319},[39,69102,65473],{"class":45},[39,69104,52665],{"class":52354},[39,69106,52361],{"class":45},[39,69108,69109,69111,69113,69115,69117,69119,69121,69123,69125,69127,69129,69131,69133,69135,69137,69139],{"class":41,"line":17906},[39,69110,56288],{"class":45},[39,69112,52665],{"class":52354},[39,69114,54540],{"class":3021},[39,69116,50],{"class":45},[39,69118,63677],{"class":1319},[39,69120,62106],{"class":45},[39,69122,269],{"class":52354},[39,69124,56293],{"class":3021},[39,69126,50],{"class":45},[39,69128,65535],{"class":1319},[39,69130,56301],{"class":3021},[39,69132,50],{"class":45},[39,69134,8708],{"class":1319},[39,69136,65473],{"class":45},[39,69138,52665],{"class":52354},[39,69140,52361],{"class":45},[39,69142,69143,69145,69147,69149,69151,69153,69155,69157,69159,69161,69163,69165,69167,69169,69171,69173],{"class":41,"line":17911},[39,69144,56288],{"class":45},[39,69146,52665],{"class":52354},[39,69148,54540],{"class":3021},[39,69150,50],{"class":45},[39,69152,63677],{"class":1319},[39,69154,62106],{"class":45},[39,69156,269],{"class":52354},[39,69158,56293],{"class":3021},[39,69160,50],{"class":45},[39,69162,65570],{"class":1319},[39,69164,56301],{"class":3021},[39,69166,50],{"class":45},[39,69168,8708],{"class":1319},[39,69170,65473],{"class":45},[39,69172,52665],{"class":52354},[39,69174,52361],{"class":45},[39,69176,69177,69179,69181,69183,69185,69187,69189,69191,69193,69195,69197,69199,69201,69203,69205,69207],{"class":41,"line":17925},[39,69178,56288],{"class":45},[39,69180,52665],{"class":52354},[39,69182,54540],{"class":3021},[39,69184,50],{"class":45},[39,69186,63677],{"class":1319},[39,69188,62106],{"class":45},[39,69190,269],{"class":52354},[39,69192,56293],{"class":3021},[39,69194,50],{"class":45},[39,69196,65605],{"class":1319},[39,69198,56301],{"class":3021},[39,69200,50],{"class":45},[39,69202,8708],{"class":1319},[39,69204,65473],{"class":45},[39,69206,52665],{"class":52354},[39,69208,52361],{"class":45},[39,69210,69211,69213,69215],{"class":41,"line":17937},[39,69212,52830],{"class":45},[39,69214,52665],{"class":52354},[39,69216,52361],{"class":45},[39,69218,69219,69221,69223],{"class":41,"line":17942},[39,69220,53471],{"class":45},[39,69222,52665],{"class":52354},[39,69224,52361],{"class":45},[39,69226,69227,69229,69231],{"class":41,"line":17955},[39,69228,53198],{"class":45},[39,69230,52867],{"class":52354},[39,69232,52361],{"class":45},[39,69234,69235],{"class":41,"line":17960},[39,69236,69237],{"class":102},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[39,69239,69240],{"class":41,"line":17965},[39,69241,69242],{"class":102},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[39,69244,69245,69247,69249,69251,69253,69255,69257,69260],{"class":41,"line":17970},[39,69246,12277],{"class":49},[39,69248,62346],{"class":56},[39,69250,14620],{"class":49},[39,69252,55450],{"class":45},[39,69254,55453],{"class":3021},[39,69256,1221],{"class":45},[39,69258,69259],{"class":1319},"'.tab-nav ul'",[39,69261,209],{"class":45},[39,69263,69264],{"class":41,"line":17983},[39,69265,69266],{"class":102},"    \u002F\u002F 2.添加事件\n",[39,69268,69269,69271,69273,69275,69277,69279,69281,69283,69285],{"class":41,"line":17988},[39,69270,68008],{"class":45},[39,69272,58867],{"class":3021},[39,69274,1221],{"class":45},[39,69276,58872],{"class":1319},[39,69278,13491],{"class":45},[39,69280,55503],{"class":49},[39,69282,2716],{"class":45},[39,69284,1290],{"class":254},[39,69286,13498],{"class":45},[39,69288,69289,69291,69293],{"class":41,"line":33688},[39,69290,59298],{"class":45},[39,69292,68064],{"class":3021},[39,69294,68067],{"class":45},[39,69296,69297],{"class":41,"line":33694},[39,69298,69299],{"class":102},"      \u002F\u002Fe.targer是我们点击的对象\n",[39,69301,69302,69304,69306,69308,69311],{"class":41,"line":33700},[39,69303,55534],{"class":49},[39,69305,68088],{"class":45},[39,69307,55540],{"class":49},[39,69309,69310],{"class":1319}," 'A'",[39,69312,13498],{"class":45},[39,69314,69315,69317,69319,69321,69324,69326,69328,69330,69332],{"class":41,"line":33706},[39,69316,52979],{"class":45},[39,69318,55453],{"class":3021},[39,69320,1221],{"class":45},[39,69322,69323],{"class":1319},"'.active'",[39,69325,58057],{"class":45},[39,69327,58060],{"class":3021},[39,69329,1221],{"class":45},[39,69331,65768],{"class":1319},[39,69333,209],{"class":45},[39,69335,69336,69339,69341,69343,69345],{"class":41,"line":33712},[39,69337,69338],{"class":45},"        e.target.classList.",[39,69340,6390],{"class":3021},[39,69342,1221],{"class":45},[39,69344,65768],{"class":1319},[39,69346,209],{"class":45},[39,69348,69349],{"class":41,"line":33723},[39,69350,3458],{"emptyLinePlaceholder":1145},[39,69352,69353],{"class":41,"line":33729},[39,69354,69355],{"class":102},"        \u002F\u002F 下面大盒子模块\n",[39,69357,69358],{"class":41,"line":33749},[39,69359,69360],{"class":102},"        \u002F\u002F console.log(e.target.dataset.id)\n",[39,69362,69363,69365,69367,69369,69371],{"class":41,"line":33755},[39,69364,62324],{"class":49},[39,69366,4090],{"class":56},[39,69368,14620],{"class":49},[39,69370,46621],{"class":49},[39,69372,69373],{"class":45},"e.target.dataset.id\n",[39,69375,69376,69378,69380,69382,69384,69386,69388,69390,69392],{"class":41,"line":33766},[39,69377,52979],{"class":45},[39,69379,55453],{"class":3021},[39,69381,1221],{"class":45},[39,69383,65816],{"class":1319},[39,69385,58057],{"class":45},[39,69387,58060],{"class":3021},[39,69389,1221],{"class":45},[39,69391,65768],{"class":1319},[39,69393,209],{"class":45},[39,69395,69396,69398,69400,69402,69404,69406,69408,69410,69412,69414,69416,69418,69420],{"class":41,"line":33772},[39,69397,52979],{"class":45},[39,69399,55453],{"class":3021},[39,69401,1221],{"class":45},[39,69403,65842],{"class":1319},[39,69405,1644],{"class":45},[39,69407,46621],{"class":49},[39,69409,26175],{"class":56},[39,69411,58086],{"class":1319},[39,69413,58057],{"class":45},[39,69415,6390],{"class":3021},[39,69417,1221],{"class":45},[39,69419,65768],{"class":1319},[39,69421,209],{"class":45},[39,69423,69424],{"class":41,"line":33778},[39,69425,3458],{"emptyLinePlaceholder":1145},[39,69427,69428],{"class":41,"line":33784},[39,69429,53452],{"class":45},[39,69431,69432],{"class":41,"line":33790},[39,69433,34516],{"class":45},[39,69435,69436,69438,69440],{"class":41,"line":33796},[39,69437,53471],{"class":45},[39,69439,52867],{"class":52354},[39,69441,52361],{"class":45},[39,69443,69444,69446,69448],{"class":41,"line":33802},[39,69445,52839],{"class":45},[39,69447,52854],{"class":52354},[39,69449,52361],{"class":45},[39,69451,69452],{"class":41,"line":33808},[39,69453,3458],{"emptyLinePlaceholder":1145},[39,69455,69456,69458,69460],{"class":41,"line":33828},[39,69457,52839],{"class":45},[39,69459,51689],{"class":52354},[39,69461,52361],{"class":45},[1188,69463,69465],{"id":69464},"_333-页面加载事件","3.3.3 页面加载事件",[1171,69467,69468],{},[1174,69469,69470],{},"load",[19,69472,69473],{},[269,69474],{"alt":34,"src":69475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,69477,69478],{},"window代表整个窗口，比document还要大",[19,69480,69481],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,69483,69484],{},"img.addEventListener('load', function () {",[19,69486,69487],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,69489,53518],{},[1171,69491,69492],{"start":74},[1174,69493,69494],{},"DOMContentLoaded",[19,69496,69497],{},[269,69498],{"alt":34,"src":69499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,69501,69502],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[1188,69504,69506],{"id":69505},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,69508,69509],{},[269,69510],{"alt":34,"src":69511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,69513,69514],{},[269,69515],{"alt":34,"src":69516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,69518,69519],{},[269,69520],{"alt":34,"src":69521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,69523,69524],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,69526,69527],{},"获得的是数字型数据，不带单位",[19,69529,69530],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,69532,69533],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,69535,69536],{},"它是通过document.documentElement来获取",[19,69538,69539],{},[269,69540],{"alt":34,"src":69541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,69543,69544],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[1188,69546,69548],{"id":69547},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,69550,69551],{},[269,69552],{"alt":34,"src":69553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,69555,69556],{},[269,69557],{"alt":34,"src":69558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[1188,69560,69562],{"id":69561},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,69564,69565],{},[269,69566],{"alt":34,"src":69567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,69569,69570],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,69572,69573],{},[269,69574],{"alt":34,"src":69575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,69577,69578],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,69580,69581],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,69583,69584],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,69586,69587],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,69589,69590],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,69592,69593],{},[269,69594],{"alt":34,"src":69595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,69597,69598],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,69600,69601],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,69603,69604],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,69606,69607],{},"e.pageX-box.getBoundingClientRect()",[1188,69609,69611],{"id":69610},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,69613,69614],{},[269,69615],{"alt":34,"src":69616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,69618,69619],{},"这个是相对于视口来说的，它是个方法，不是属性值",[1188,69621,69623],{"id":69622},"_338-总结","3.3.8 总结",[19,69625,69626],{},[269,69627],{"alt":34,"src":69628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,69630,69631],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,69633,69634],{},"修改盒子的宽高只能通过width和height来实现",[1188,69636,69638],{"id":69637},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[29,69640,69642],{"className":51687,"code":69641,"language":51689,"meta":34,"style":34},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[36,69643,69644,69649,69654,69659,69664],{"__ignoreMap":34},[39,69645,69646],{"class":41,"line":42},[39,69647,69648],{"class":45},"\u002F* 页面滑动 *\u002F\n",[39,69650,69651],{"class":41,"line":74},[39,69652,69653],{"class":45},"html {\n",[39,69655,69656],{"class":41,"line":99},[39,69657,69658],{"class":45},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[39,69660,69661],{"class":41,"line":106},[39,69662,69663],{"class":45},"  scroll-behavior: smooth;\n",[39,69665,69666],{"class":41,"line":112},[39,69667,2630],{"class":45},[19,69669,69670],{},"默认是auto",[1188,69672,69674],{"id":69673},"_3310-日期对象","3.3.10 日期对象",[23054,69676,69678],{"id":69677},"_33101-实例化","3.3.10.1 实例化",[19,69680,69681],{},[269,69682],{"alt":34,"src":69683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23054,69685,69687],{"id":69686},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,69689,69690],{},[269,69691],{"alt":34,"src":69692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,69694,69695],{},"月份+1",[19,69697,69698],{},"老外认为第一天为0，星期天",[19,69700,69701],{},"方法使用的时候必须要跟括号",[19,69703,69704],{},"快速获得日期",[19,69706,69707],{},"\u002F\u002F 得到年月日",[19,69709,69710],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,69712,69713],{},"\u002F\u002F 得到当地日期",[19,69715,69716],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,69718,69719],{},"\u002F\u002F 得到当地时间",[19,69721,69722],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,69724,69725],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,69727,69728],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52867,69730,69731],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[19,69733,69734],{},"学会去封装函数！",[23054,69736,69738],{"id":69737},"_33103-时间戳","3.3.10.3 时间戳",[19,69740,69741],{},[269,69742],{"alt":34,"src":69743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,69745,69746],{},[269,69747],{"alt":34,"src":69748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,69750,69751],{},"三种方法记住一个就可以",[1188,69753,69755],{"id":69754},"_3311-节点操作","3.3.11 节点操作",[23054,69757,69759],{"id":69758},"_33111-dom节点","3.3.11.1 DOM节点",[19,69761,69762],{},[269,69763],{"alt":34,"src":69764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,69766,69767],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23054,69769,69771],{"id":69770},"_33112-查找节点","3.3.11.2 查找节点",[19,69773,69774],{},"前边的document.querySelector()是获取的元素",[19,69776,69777],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,69779,69780],{},[269,69781],{"alt":34,"src":69782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[1171,69784,69785],{},[1174,69786,69787],{},"父节点",[19,69789,69790],{},[269,69791],{"alt":34,"src":69792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[1171,69794,69795],{"start":74},[1174,69796,69797],{},"子节点",[19,69799,69800],{},[269,69801],{"alt":34,"src":69802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,69804,69805],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,69807,69808],{},"children获得的是伪数组，是亲儿子",[1171,69810,69811],{"start":99},[1174,69812,69813],{},"兄弟节点",[19,69815,69816],{},[269,69817],{"alt":34,"src":69818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23054,69820,69822],{"id":69821},"_33113-增加节点","3.3.11.3 增加节点",[19,69824,69825],{},[269,69826],{"alt":34,"src":69827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,69829,69830],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,69832,69833],{},[269,69834],{"alt":34,"src":69835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,69837,69838],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,69840,69841],{},"下面是写法的部分展示，就按照下边的格式来写",[19,69843,69844],{},"例：",[52867,69846,69847],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[19,69849,69850],{},[269,69851],{"alt":34,"src":69852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,69854,69855],{},"false只克隆标签，里边的内容不会克隆过来",[29,69857,69859],{"className":51687,"code":69858,"language":51689,"meta":34,"style":34},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[36,69860,69861],{"__ignoreMap":34},[39,69862,69863],{"class":41,"line":42},[39,69864,69858],{"class":45},[23054,69866,69868],{"id":69867},"_33114-删除节点","3.3.11.4 删除节点",[19,69870,69871],{},[269,69872],{"alt":34,"src":69873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,69875,69876],{},"父亲删儿子",[19,69878,69879],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[1188,69881,69883],{"id":69882},"_3312-m端事件","3.3.12 M端事件",[19,69885,69886],{},"M端就是移动端",[19,69888,69889],{},[269,69890],{"alt":34,"src":69891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[1188,69893,69895],{"id":69894},"_3313-插件","3.3.13 插件",[19,69897,69898],{},"要熟悉官网！！！",[19,69900,69901],{},[46,69902,69903],{"href":69903,"rel":69904},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24921],[19,69906,69907],{},[46,69908,69909],{"href":69909,"rel":69910},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24921],[1188,69912,69914],{"id":69913},"_3314-学生信息表","3.3.14 学生信息表",[1171,69916,69917,69920,69923,69926,69929,69932,69935,69938],{},[1174,69918,69919],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[1174,69921,69922],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[1174,69924,69925],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[1174,69927,69928],{},"用好表单元素自带的属性，value,name等",[1174,69930,69931],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[1174,69933,69934],{},"不要忘记事件对象",[1174,69936,69937],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[1174,69939,69940],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69942,69943],{},"结构：",[29,69945,69947],{"className":51687,"code":69946,"language":51689,"meta":34,"style":34},"\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",[36,69948,69949,69959,69973,69977,69985,69999,70019,70040,70053,70077,70085,70089,70097,70110,70131,70159,70187,70192,70214,70234,70253,70261,70289,70311,70331,70351,70371,70391,70411,70419,70439,70447,70451,70464,70472,70480,70488,70501,70514,70527,70540,70553,70566,70579,70587,70595,70603,70608,70613,70618,70623,70628,70633,70638,70643,70648,70653,70658,70663,70668,70676,70684,70692,70696,70716,70735,70755,70775,70795,70815,70819,70824,70844,70849,70859,70864,70869,70889,70911,70916,70926,70930,70934,70939,70944,70973,70987,71002,71006,71010,71014,71019,71030,71043,71048,71053,71058,71063,71068,71072,71077,71082,71091,71096,71101,71113,71118,71125,71129,71134,71144,71149,71159,71164,71192,71213,71223,71243,71261,71278,71295,71312,71329,71333,71343,71348,71353,71358,71369,71373,71377,71381,71386,71391,71412,71424,71429,71434,71439,71453,71458,71465,71469,71473,71481,71485,71493,71497],{"__ignoreMap":34},[39,69950,69951,69953,69955,69957],{"class":41,"line":42},[39,69952,52351],{"class":45},[39,69954,52355],{"class":52354},[39,69956,52358],{"class":3021},[39,69958,52361],{"class":45},[39,69960,69961,69963,69965,69967,69969,69971],{"class":41,"line":74},[39,69962,2108],{"class":45},[39,69964,51689],{"class":52354},[39,69966,52370],{"class":3021},[39,69968,50],{"class":45},[39,69970,52375],{"class":1319},[39,69972,52361],{"class":45},[39,69974,69975],{"class":41,"line":99},[39,69976,3458],{"emptyLinePlaceholder":1145},[39,69978,69979,69981,69983],{"class":41,"line":106},[39,69980,2108],{"class":45},[39,69982,52388],{"class":52354},[39,69984,52361],{"class":45},[39,69986,69987,69989,69991,69993,69995,69997],{"class":41,"line":112},[39,69988,53198],{"class":45},[39,69990,52398],{"class":52354},[39,69992,52401],{"class":3021},[39,69994,50],{"class":45},[39,69996,52406],{"class":1319},[39,69998,60181],{"class":45},[39,70000,70001,70003,70005,70007,70009,70011,70013,70015,70017],{"class":41,"line":118},[39,70002,53198],{"class":45},[39,70004,52398],{"class":52354},[39,70006,15976],{"class":3021},[39,70008,50],{"class":45},[39,70010,52445],{"class":1319},[39,70012,52425],{"class":3021},[39,70014,50],{"class":45},[39,70016,52452],{"class":1319},[39,70018,60181],{"class":45},[39,70020,70021,70023,70025,70027,70029,70031,70033,70035,70038],{"class":41,"line":413},[39,70022,53198],{"class":45},[39,70024,52398],{"class":52354},[39,70026,52417],{"class":3021},[39,70028,50],{"class":45},[39,70030,52422],{"class":1319},[39,70032,52425],{"class":3021},[39,70034,50],{"class":45},[39,70036,70037],{"class":1319},"\"ie=edge\"",[39,70039,60181],{"class":45},[39,70041,70042,70044,70046,70049,70051],{"class":41,"line":419},[39,70043,53198],{"class":45},[39,70045,52461],{"class":52354},[39,70047,70048],{"class":45},">学生信息管理\u003C\u002F",[39,70050,52461],{"class":52354},[39,70052,52361],{"class":45},[39,70054,70055,70057,70060,70063,70065,70068,70070,70072,70075],{"class":41,"line":425},[39,70056,53198],{"class":45},[39,70058,70059],{"class":52354},"link",[39,70061,70062],{"class":3021}," rel",[39,70064,50],{"class":45},[39,70066,70067],{"class":1319},"\"stylesheet\"",[39,70069,62111],{"class":3021},[39,70071,50],{"class":45},[39,70073,70074],{"class":1319},"\"css\u002Findex.css\"",[39,70076,60181],{"class":45},[39,70078,70079,70081,70083],{"class":41,"line":443},[39,70080,52839],{"class":45},[39,70082,52388],{"class":52354},[39,70084,52361],{"class":45},[39,70086,70087],{"class":41,"line":449},[39,70088,3458],{"emptyLinePlaceholder":1145},[39,70090,70091,70093,70095],{"class":41,"line":455},[39,70092,2108],{"class":45},[39,70094,52854],{"class":52354},[39,70096,52361],{"class":45},[39,70098,70099,70101,70103,70106,70108],{"class":41,"line":461},[39,70100,53198],{"class":45},[39,70102,10],{"class":52354},[39,70104,70105],{"class":45},">新增学员\u003C\u002F",[39,70107,10],{"class":52354},[39,70109,52361],{"class":45},[39,70111,70112,70114,70116,70118,70120,70122,70125,70127,70129],{"class":41,"line":475},[39,70113,53198],{"class":45},[39,70115,67679],{"class":52354},[39,70117,54540],{"class":3021},[39,70119,50],{"class":45},[39,70121,63718],{"class":1319},[39,70123,70124],{"class":3021}," autocomplete",[39,70126,50],{"class":45},[39,70128,32831],{"class":1319},[39,70130,52361],{"class":45},[39,70132,70133,70136,70138,70140,70142,70144,70146,70148,70151,70153,70155,70157],{"class":41,"line":665},[39,70134,70135],{"class":45},"    姓名：\u003C",[39,70137,54875],{"class":52354},[39,70139,54878],{"class":3021},[39,70141,50],{"class":45},[39,70143,63753],{"class":1319},[39,70145,54540],{"class":3021},[39,70147,50],{"class":45},[39,70149,70150],{"class":1319},"\"uname\"",[39,70152,15976],{"class":3021},[39,70154,50],{"class":45},[39,70156,70150],{"class":1319},[39,70158,60181],{"class":45},[39,70160,70161,70164,70166,70168,70170,70172,70174,70176,70179,70181,70183,70185],{"class":41,"line":671},[39,70162,70163],{"class":45},"    年龄：\u003C",[39,70165,54875],{"class":52354},[39,70167,54878],{"class":3021},[39,70169,50],{"class":45},[39,70171,63753],{"class":1319},[39,70173,54540],{"class":3021},[39,70175,50],{"class":45},[39,70177,70178],{"class":1319},"\"age\"",[39,70180,15976],{"class":3021},[39,70182,50],{"class":45},[39,70184,70178],{"class":1319},[39,70186,60181],{"class":45},[39,70188,70189],{"class":41,"line":684},[39,70190,70191],{"class":45},"    性别:\n",[39,70193,70194,70196,70199,70201,70203,70206,70208,70210,70212],{"class":41,"line":2732},[39,70195,52395],{"class":45},[39,70197,70198],{"class":52354},"select",[39,70200,15976],{"class":3021},[39,70202,50],{"class":45},[39,70204,70205],{"class":1319},"\"gender\"",[39,70207,54540],{"class":3021},[39,70209,50],{"class":45},[39,70211,70205],{"class":1319},[39,70213,52361],{"class":45},[39,70215,70216,70218,70221,70223,70225,70227,70230,70232],{"class":41,"line":2737},[39,70217,56288],{"class":45},[39,70219,70220],{"class":52354},"option",[39,70222,67705],{"class":3021},[39,70224,50],{"class":45},[39,70226,11017],{"class":1319},[39,70228,70229],{"class":45},">男\u003C\u002F",[39,70231,70220],{"class":52354},[39,70233,52361],{"class":45},[39,70235,70236,70238,70240,70242,70244,70246,70249,70251],{"class":41,"line":2751},[39,70237,56288],{"class":45},[39,70239,70220],{"class":52354},[39,70241,67705],{"class":3021},[39,70243,50],{"class":45},[39,70245,11086],{"class":1319},[39,70247,70248],{"class":45},">女\u003C\u002F",[39,70250,70220],{"class":52354},[39,70252,52361],{"class":45},[39,70254,70255,70257,70259],{"class":41,"line":2756},[39,70256,52830],{"class":45},[39,70258,70198],{"class":52354},[39,70260,52361],{"class":45},[39,70262,70263,70266,70268,70270,70272,70274,70276,70278,70281,70283,70285,70287],{"class":41,"line":2785},[39,70264,70265],{"class":45},"    薪资：\u003C",[39,70267,54875],{"class":52354},[39,70269,54878],{"class":3021},[39,70271,50],{"class":45},[39,70273,63753],{"class":1319},[39,70275,54540],{"class":3021},[39,70277,50],{"class":45},[39,70279,70280],{"class":1319},"\"salary\"",[39,70282,15976],{"class":3021},[39,70284,50],{"class":45},[39,70286,70280],{"class":1319},[39,70288,60181],{"class":45},[39,70290,70291,70294,70296,70298,70300,70303,70305,70307,70309],{"class":41,"line":2790},[39,70292,70293],{"class":45},"    就业城市：\u003C",[39,70295,70198],{"class":52354},[39,70297,15976],{"class":3021},[39,70299,50],{"class":45},[39,70301,70302],{"class":1319},"\"city\"",[39,70304,54540],{"class":3021},[39,70306,50],{"class":45},[39,70308,70302],{"class":1319},[39,70310,52361],{"class":45},[39,70312,70313,70315,70317,70319,70321,70324,70327,70329],{"class":41,"line":2807},[39,70314,56288],{"class":45},[39,70316,70220],{"class":52354},[39,70318,67705],{"class":3021},[39,70320,50],{"class":45},[39,70322,70323],{"class":1319},"\"北京\"",[39,70325,70326],{"class":45},">北京\u003C\u002F",[39,70328,70220],{"class":52354},[39,70330,52361],{"class":45},[39,70332,70333,70335,70337,70339,70341,70344,70347,70349],{"class":41,"line":2812},[39,70334,56288],{"class":45},[39,70336,70220],{"class":52354},[39,70338,67705],{"class":3021},[39,70340,50],{"class":45},[39,70342,70343],{"class":1319},"\"上海\"",[39,70345,70346],{"class":45},">上海\u003C\u002F",[39,70348,70220],{"class":52354},[39,70350,52361],{"class":45},[39,70352,70353,70355,70357,70359,70361,70364,70367,70369],{"class":41,"line":2817},[39,70354,56288],{"class":45},[39,70356,70220],{"class":52354},[39,70358,67705],{"class":3021},[39,70360,50],{"class":45},[39,70362,70363],{"class":1319},"\"广州\"",[39,70365,70366],{"class":45},">广州\u003C\u002F",[39,70368,70220],{"class":52354},[39,70370,52361],{"class":45},[39,70372,70373,70375,70377,70379,70381,70384,70387,70389],{"class":41,"line":2822},[39,70374,56288],{"class":45},[39,70376,70220],{"class":52354},[39,70378,67705],{"class":3021},[39,70380,50],{"class":45},[39,70382,70383],{"class":1319},"\"深圳\"",[39,70385,70386],{"class":45},">深圳\u003C\u002F",[39,70388,70220],{"class":52354},[39,70390,52361],{"class":45},[39,70392,70393,70395,70397,70399,70401,70404,70407,70409],{"class":41,"line":2836},[39,70394,56288],{"class":45},[39,70396,70220],{"class":52354},[39,70398,67705],{"class":3021},[39,70400,50],{"class":45},[39,70402,70403],{"class":1319},"\"曹县\"",[39,70405,70406],{"class":45},">曹县\u003C\u002F",[39,70408,70220],{"class":52354},[39,70410,52361],{"class":45},[39,70412,70413,70415,70417],{"class":41,"line":2841},[39,70414,52830],{"class":45},[39,70416,70198],{"class":52354},[39,70418,52361],{"class":45},[39,70420,70421,70423,70425,70427,70429,70432,70435,70437],{"class":41,"line":3635},[39,70422,52395],{"class":45},[39,70424,54941],{"class":52354},[39,70426,54540],{"class":3021},[39,70428,50],{"class":45},[39,70430,70431],{"class":1319},"\"add\"",[39,70433,70434],{"class":45},">录入\u003C\u002F",[39,70436,54941],{"class":52354},[39,70438,52361],{"class":45},[39,70440,70441,70443,70445],{"class":41,"line":3649},[39,70442,53471],{"class":45},[39,70444,67679],{"class":52354},[39,70446,52361],{"class":45},[39,70448,70449],{"class":41,"line":3657},[39,70450,3458],{"emptyLinePlaceholder":1145},[39,70452,70453,70455,70457,70460,70462],{"class":41,"line":3662},[39,70454,53198],{"class":45},[39,70456,10],{"class":52354},[39,70458,70459],{"class":45},">就业榜\u003C\u002F",[39,70461,10],{"class":52354},[39,70463,52361],{"class":45},[39,70465,70466,70468,70470],{"class":41,"line":3668},[39,70467,53198],{"class":45},[39,70469,1352],{"class":52354},[39,70471,52361],{"class":45},[39,70473,70474,70476,70478],{"class":41,"line":3674},[39,70475,52395],{"class":45},[39,70477,1355],{"class":52354},[39,70479,52361],{"class":45},[39,70481,70482,70484,70486],{"class":41,"line":3679},[39,70483,56288],{"class":45},[39,70485,1358],{"class":52354},[39,70487,52361],{"class":45},[39,70489,70490,70492,70494,70497,70499],{"class":41,"line":9004},[39,70491,56356],{"class":45},[39,70493,1361],{"class":52354},[39,70495,70496],{"class":45},">序号\u003C\u002F",[39,70498,1361],{"class":52354},[39,70500,52361],{"class":45},[39,70502,70503,70505,70507,70510,70512],{"class":41,"line":9028},[39,70504,56356],{"class":45},[39,70506,1361],{"class":52354},[39,70508,70509],{"class":45},">姓名\u003C\u002F",[39,70511,1361],{"class":52354},[39,70513,52361],{"class":45},[39,70515,70516,70518,70520,70523,70525],{"class":41,"line":9033},[39,70517,56356],{"class":45},[39,70519,1361],{"class":52354},[39,70521,70522],{"class":45},">年龄\u003C\u002F",[39,70524,1361],{"class":52354},[39,70526,52361],{"class":45},[39,70528,70529,70531,70533,70536,70538],{"class":41,"line":9039},[39,70530,56356],{"class":45},[39,70532,1361],{"class":52354},[39,70534,70535],{"class":45},">性别\u003C\u002F",[39,70537,1361],{"class":52354},[39,70539,52361],{"class":45},[39,70541,70542,70544,70546,70549,70551],{"class":41,"line":9066},[39,70543,56356],{"class":45},[39,70545,1361],{"class":52354},[39,70547,70548],{"class":45},">薪资\u003C\u002F",[39,70550,1361],{"class":52354},[39,70552,52361],{"class":45},[39,70554,70555,70557,70559,70562,70564],{"class":41,"line":9071},[39,70556,56356],{"class":45},[39,70558,1361],{"class":52354},[39,70560,70561],{"class":45},">就业城市\u003C\u002F",[39,70563,1361],{"class":52354},[39,70565,52361],{"class":45},[39,70567,70568,70570,70572,70575,70577],{"class":41,"line":9077},[39,70569,56356],{"class":45},[39,70571,1361],{"class":52354},[39,70573,70574],{"class":45},">操作\u003C\u002F",[39,70576,1361],{"class":52354},[39,70578,52361],{"class":45},[39,70580,70581,70583,70585],{"class":41,"line":9089},[39,70582,56461],{"class":45},[39,70584,1358],{"class":52354},[39,70586,52361],{"class":45},[39,70588,70589,70591,70593],{"class":41,"line":9101},[39,70590,52830],{"class":45},[39,70592,1355],{"class":52354},[39,70594,52361],{"class":45},[39,70596,70597,70599,70601],{"class":41,"line":9113},[39,70598,52395],{"class":45},[39,70600,1398],{"class":52354},[39,70602,52361],{"class":45},[39,70604,70605],{"class":41,"line":10772},[39,70606,70607],{"class":102},"      \u003C!-- \n",[39,70609,70610],{"class":41,"line":10797},[39,70611,70612],{"class":102},"        \u003Ctr>\n",[39,70614,70615],{"class":41,"line":10820},[39,70616,70617],{"class":102},"          \u003Ctd>1001\u003C\u002Ftd>\n",[39,70619,70620],{"class":41,"line":10844},[39,70621,70622],{"class":102},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[39,70624,70625],{"class":41,"line":10849},[39,70626,70627],{"class":102},"          \u003Ctd>19\u003C\u002Ftd>\n",[39,70629,70630],{"class":41,"line":10854},[39,70631,70632],{"class":102},"          \u003Ctd>男\u003C\u002Ftd>\n",[39,70634,70635],{"class":41,"line":10859},[39,70636,70637],{"class":102},"          \u003Ctd>15000\u003C\u002Ftd>\n",[39,70639,70640],{"class":41,"line":10868},[39,70641,70642],{"class":102},"          \u003Ctd>上海\u003C\u002Ftd>\n",[39,70644,70645],{"class":41,"line":10873},[39,70646,70647],{"class":102},"          \u003Ctd>\n",[39,70649,70650],{"class":41,"line":10879},[39,70651,70652],{"class":102},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[39,70654,70655],{"class":41,"line":10900},[39,70656,70657],{"class":102},"          \u003C\u002Ftd>\n",[39,70659,70660],{"class":41,"line":10906},[39,70661,70662],{"class":102},"        \u003C\u002Ftr> \n",[39,70664,70665],{"class":41,"line":10920},[39,70666,70667],{"class":102},"        -->\n",[39,70669,70670,70672,70674],{"class":41,"line":10926},[39,70671,52830],{"class":45},[39,70673,1398],{"class":52354},[39,70675,52361],{"class":45},[39,70677,70678,70680,70682],{"class":41,"line":10953},[39,70679,53471],{"class":45},[39,70681,1352],{"class":52354},[39,70683,52361],{"class":45},[39,70685,70686,70688,70690],{"class":41,"line":10962},[39,70687,53198],{"class":45},[39,70689,52867],{"class":52354},[39,70691,52361],{"class":45},[39,70693,70694],{"class":41,"line":10968},[39,70695,61012],{"class":102},[39,70697,70698,70700,70703,70705,70707,70709,70711,70714],{"class":41,"line":10976},[39,70699,12277],{"class":49},[39,70701,70702],{"class":56}," uname",[39,70704,14620],{"class":49},[39,70706,55450],{"class":45},[39,70708,55453],{"class":3021},[39,70710,1221],{"class":45},[39,70712,70713],{"class":1319},"'.uname'",[39,70715,209],{"class":45},[39,70717,70718,70720,70722,70724,70726,70728,70730,70733],{"class":41,"line":10981},[39,70719,12277],{"class":49},[39,70721,16745],{"class":56},[39,70723,14620],{"class":49},[39,70725,55450],{"class":45},[39,70727,55453],{"class":3021},[39,70729,1221],{"class":45},[39,70731,70732],{"class":1319},"'.age'",[39,70734,209],{"class":45},[39,70736,70737,70739,70742,70744,70746,70748,70750,70753],{"class":41,"line":17660},[39,70738,12277],{"class":49},[39,70740,70741],{"class":56}," gender",[39,70743,14620],{"class":49},[39,70745,55450],{"class":45},[39,70747,55453],{"class":3021},[39,70749,1221],{"class":45},[39,70751,70752],{"class":1319},"'.gender'",[39,70754,209],{"class":45},[39,70756,70757,70759,70762,70764,70766,70768,70770,70773],{"class":41,"line":17666},[39,70758,12277],{"class":49},[39,70760,70761],{"class":56}," salary",[39,70763,14620],{"class":49},[39,70765,55450],{"class":45},[39,70767,55453],{"class":3021},[39,70769,1221],{"class":45},[39,70771,70772],{"class":1319},"'.salary'",[39,70774,209],{"class":45},[39,70776,70777,70779,70782,70784,70786,70788,70790,70793],{"class":41,"line":17689},[39,70778,12277],{"class":49},[39,70780,70781],{"class":56}," city",[39,70783,14620],{"class":49},[39,70785,55450],{"class":45},[39,70787,55453],{"class":3021},[39,70789,1221],{"class":45},[39,70791,70792],{"class":1319},"'.city'",[39,70794,209],{"class":45},[39,70796,70797,70799,70802,70804,70806,70808,70810,70813],{"class":41,"line":17695},[39,70798,12277],{"class":49},[39,70800,70801],{"class":56}," tbody",[39,70803,14620],{"class":49},[39,70805,55450],{"class":45},[39,70807,55453],{"class":3021},[39,70809,1221],{"class":45},[39,70811,70812],{"class":1319},"'tbody'",[39,70814,209],{"class":45},[39,70816,70817],{"class":41,"line":17718},[39,70818,3458],{"emptyLinePlaceholder":1145},[39,70820,70821],{"class":41,"line":17732},[39,70822,70823],{"class":102},"    \u002F\u002F 获取所有带有name属性的元素\n",[39,70825,70826,70828,70831,70833,70835,70837,70839,70842],{"class":41,"line":17752},[39,70827,12277],{"class":49},[39,70829,70830],{"class":56}," items",[39,70832,14620],{"class":49},[39,70834,55450],{"class":45},[39,70836,56735],{"class":3021},[39,70838,1221],{"class":45},[39,70840,70841],{"class":1319},"'[name]'",[39,70843,209],{"class":45},[39,70845,70846],{"class":41,"line":17758},[39,70847,70848],{"class":102},"    \u002F\u002F 声明一个空的数组\n",[39,70850,70851,70853,70855,70857],{"class":41,"line":17769},[39,70852,12277],{"class":49},[39,70854,58749],{"class":56},[39,70856,14620],{"class":49},[39,70858,52892],{"class":45},[39,70860,70861],{"class":41,"line":17792},[39,70862,70863],{"class":102},"    \u002F\u002F 1.录入模块\n",[39,70865,70866],{"class":41,"line":17814},[39,70867,70868],{"class":102},"    \u002F\u002F 1.1这是一个表单提交事件\n",[39,70870,70871,70873,70876,70878,70880,70882,70884,70887],{"class":41,"line":17819},[39,70872,12277],{"class":49},[39,70874,70875],{"class":56}," info",[39,70877,14620],{"class":49},[39,70879,55450],{"class":45},[39,70881,55453],{"class":3021},[39,70883,1221],{"class":45},[39,70885,70886],{"class":1319},"'.info'",[39,70888,209],{"class":45},[39,70890,70891,70894,70896,70898,70901,70903,70905,70907,70909],{"class":41,"line":17825},[39,70892,70893],{"class":45},"    info.",[39,70895,58867],{"class":3021},[39,70897,1221],{"class":45},[39,70899,70900],{"class":1319},"'submit'",[39,70902,13491],{"class":45},[39,70904,55503],{"class":49},[39,70906,2716],{"class":45},[39,70908,1290],{"class":254},[39,70910,13498],{"class":45},[39,70912,70913],{"class":41,"line":17839},[39,70914,70915],{"class":102},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[39,70917,70918,70921,70924],{"class":41,"line":17852},[39,70919,70920],{"class":45},"      e.",[39,70922,70923],{"class":3021},"preventDefault",[39,70925,3034],{"class":45},[39,70927,70928],{"class":41,"line":17857},[39,70929,61066],{"class":102},[39,70931,70932],{"class":41,"line":17871},[39,70933,3458],{"emptyLinePlaceholder":1145},[39,70935,70936],{"class":41,"line":17876},[39,70937,70938],{"class":102},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[39,70940,70941],{"class":41,"line":17882},[39,70942,70943],{"class":102},"      \u002F\u002F 先遍历循环\n",[39,70945,70946,70948,70950,70952,70954,70956,70958,70960,70962,70965,70967,70969,70971],{"class":41,"line":17887},[39,70947,53338],{"class":49},[39,70949,2716],{"class":45},[39,70951,52901],{"class":49},[39,70953,10494],{"class":45},[39,70955,50],{"class":49},[39,70957,5151],{"class":56},[39,70959,10501],{"class":45},[39,70961,2108],{"class":49},[39,70963,70964],{"class":45}," items.",[39,70966,53022],{"class":56},[39,70968,4272],{"class":45},[39,70970,3350],{"class":49},[39,70972,13498],{"class":45},[39,70974,70975,70977,70980,70982,70985],{"class":41,"line":17901},[39,70976,3555],{"class":49},[39,70978,70979],{"class":45}," (items[i].value ",[39,70981,55540],{"class":49},[39,70983,70984],{"class":1319}," ''",[39,70986,13498],{"class":45},[39,70988,70989,70992,70995,70997,71000],{"class":41,"line":17906},[39,70990,70991],{"class":49},"          return",[39,70993,70994],{"class":3021}," alert",[39,70996,1221],{"class":45},[39,70998,70999],{"class":1319},"'输入内容不能为空'",[39,71001,209],{"class":45},[39,71003,71004],{"class":41,"line":17911},[39,71005,3587],{"class":45},[39,71007,71008],{"class":41,"line":17925},[39,71009,53452],{"class":45},[39,71011,71012],{"class":41,"line":17937},[39,71013,3458],{"emptyLinePlaceholder":1145},[39,71015,71016],{"class":41,"line":17942},[39,71017,71018],{"class":102},"      \u002F\u002F 创建新的对象\n",[39,71020,71021,71023,71026,71028],{"class":41,"line":17955},[39,71022,59282],{"class":49},[39,71024,71025],{"class":56}," obj",[39,71027,14620],{"class":49},[39,71029,16628],{"class":45},[39,71031,71032,71035,71037,71039,71041],{"class":41,"line":17960},[39,71033,71034],{"class":45},"        stuID: arr.",[39,71036,53022],{"class":56},[39,71038,46621],{"class":49},[39,71040,26175],{"class":56},[39,71042,32521],{"class":45},[39,71044,71045],{"class":41,"line":17965},[39,71046,71047],{"class":45},"        uname: uname.value,\n",[39,71049,71050],{"class":41,"line":17970},[39,71051,71052],{"class":45},"        age: age.value,\n",[39,71054,71055],{"class":41,"line":17983},[39,71056,71057],{"class":45},"        gender: gender.value,\n",[39,71059,71060],{"class":41,"line":17988},[39,71061,71062],{"class":45},"        salary: salary.value,\n",[39,71064,71065],{"class":41,"line":33688},[39,71066,71067],{"class":45},"        city: city.value\n",[39,71069,71070],{"class":41,"line":33694},[39,71071,53452],{"class":45},[39,71073,71074],{"class":41,"line":33700},[39,71075,71076],{"class":102},"      \u002F\u002F console.log(obj);\n",[39,71078,71079],{"class":41,"line":33706},[39,71080,71081],{"class":102},"      \u002F\u002F 追加到数组里面\n",[39,71083,71084,71086,71088],{"class":41,"line":33712},[39,71085,59061],{"class":45},[39,71087,52938],{"class":3021},[39,71089,71090],{"class":45},"(obj)\n",[39,71092,71093],{"class":41,"line":33723},[39,71094,71095],{"class":102},"      \u002F\u002F console.log(arr);\n",[39,71097,71098],{"class":41,"line":33729},[39,71099,71100],{"class":102},"      \u002F\u002F 清空表单  reset重置表单\n",[39,71102,71103,71106,71108,71111],{"class":41,"line":33749},[39,71104,71105],{"class":56},"      this",[39,71107,1758],{"class":45},[39,71109,71110],{"class":3021},"reset",[39,71112,3034],{"class":45},[39,71114,71115],{"class":41,"line":33755},[39,71116,71117],{"class":102},"      \u002F\u002F 调用渲染函数\n",[39,71119,71120,71123],{"class":41,"line":33766},[39,71121,71122],{"class":3021},"      render",[39,71124,3034],{"class":45},[39,71126,71127],{"class":41,"line":33772},[39,71128,34516],{"class":45},[39,71130,71131],{"class":41,"line":33778},[39,71132,71133],{"class":102},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[39,71135,71136,71139,71142],{"class":41,"line":33784},[39,71137,71138],{"class":49},"    function",[39,71140,71141],{"class":3021}," render",[39,71143,11909],{"class":45},[39,71145,71146],{"class":41,"line":33790},[39,71147,71148],{"class":102},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[39,71150,71151,71154,71156],{"class":41,"line":33796},[39,71152,71153],{"class":45},"      tbody.innerHTML ",[39,71155,50],{"class":49},[39,71157,71158],{"class":1319}," ''\n",[39,71160,71161],{"class":41,"line":33802},[39,71162,71163],{"class":102},"      \u002F\u002F 遍历数组\n",[39,71165,71166,71168,71170,71172,71174,71176,71178,71180,71182,71184,71186,71188,71190],{"class":41,"line":33808},[39,71167,53338],{"class":49},[39,71169,2716],{"class":45},[39,71171,52901],{"class":49},[39,71173,10494],{"class":45},[39,71175,50],{"class":49},[39,71177,5151],{"class":56},[39,71179,10501],{"class":45},[39,71181,2108],{"class":49},[39,71183,53019],{"class":45},[39,71185,53022],{"class":56},[39,71187,4272],{"class":45},[39,71189,3350],{"class":49},[39,71191,13498],{"class":45},[39,71193,71194,71196,71199,71201,71203,71206,71208,71211],{"class":41,"line":33828},[39,71195,62324],{"class":49},[39,71197,71198],{"class":56}," tr",[39,71200,14620],{"class":49},[39,71202,55450],{"class":45},[39,71204,71205],{"class":3021},"createElement",[39,71207,1221],{"class":45},[39,71209,71210],{"class":1319},"'tr'",[39,71212,209],{"class":45},[39,71214,71215,71218,71220],{"class":41,"line":33834},[39,71216,71217],{"class":45},"        tr.innerHTML ",[39,71219,50],{"class":49},[39,71221,71222],{"class":1319}," `\n",[39,71224,71225,71228,71230,71232,71234,71237,71240],{"class":41,"line":33850},[39,71226,71227],{"class":1319},"        \u003Ctd>${",[39,71229,4938],{"class":45},[39,71231,2088],{"class":1319},[39,71233,1644],{"class":45},[39,71235,71236],{"class":1319},"].",[39,71238,71239],{"class":45},"stuID",[39,71241,71242],{"class":1319},"}\u003C\u002Ftd>\n",[39,71244,71245,71248,71250,71252,71254,71256,71259],{"class":41,"line":33856},[39,71246,71247],{"class":1319},"          \u003Ctd>${",[39,71249,4938],{"class":45},[39,71251,2088],{"class":1319},[39,71253,1644],{"class":45},[39,71255,71236],{"class":1319},[39,71257,71258],{"class":45},"uname",[39,71260,71242],{"class":1319},[39,71262,71263,71265,71267,71269,71271,71273,71276],{"class":41,"line":33870},[39,71264,71247],{"class":1319},[39,71266,4938],{"class":45},[39,71268,2088],{"class":1319},[39,71270,1644],{"class":45},[39,71272,71236],{"class":1319},[39,71274,71275],{"class":45},"age",[39,71277,71242],{"class":1319},[39,71279,71280,71282,71284,71286,71288,71290,71293],{"class":41,"line":33876},[39,71281,71247],{"class":1319},[39,71283,4938],{"class":45},[39,71285,2088],{"class":1319},[39,71287,1644],{"class":45},[39,71289,71236],{"class":1319},[39,71291,71292],{"class":45},"gender",[39,71294,71242],{"class":1319},[39,71296,71297,71299,71301,71303,71305,71307,71310],{"class":41,"line":33891},[39,71298,71247],{"class":1319},[39,71300,4938],{"class":45},[39,71302,2088],{"class":1319},[39,71304,1644],{"class":45},[39,71306,71236],{"class":1319},[39,71308,71309],{"class":45},"salary",[39,71311,71242],{"class":1319},[39,71313,71314,71316,71318,71320,71322,71324,71327],{"class":41,"line":33897},[39,71315,71247],{"class":1319},[39,71317,4938],{"class":45},[39,71319,2088],{"class":1319},[39,71321,1644],{"class":45},[39,71323,71236],{"class":1319},[39,71325,71326],{"class":45},"city",[39,71328,71242],{"class":1319},[39,71330,71331],{"class":41,"line":33906},[39,71332,70647],{"class":1319},[39,71334,71335,71338,71340],{"class":41,"line":33912},[39,71336,71337],{"class":1319},"            \u003Ca href=\"javascript:\" data-id=${",[39,71339,1644],{"class":45},[39,71341,71342],{"class":1319},"}>删除\u003C\u002Fa>\n",[39,71344,71345],{"class":41,"line":33921},[39,71346,71347],{"class":1319},"          \u003C\u002Ftd> \n",[39,71349,71350],{"class":41,"line":33927},[39,71351,71352],{"class":1319},"          `\n",[39,71354,71355],{"class":41,"line":33933},[39,71356,71357],{"class":102},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[39,71359,71360,71363,71366],{"class":41,"line":33942},[39,71361,71362],{"class":45},"        tbody.",[39,71364,71365],{"class":3021},"appendChild",[39,71367,71368],{"class":45},"(tr)\n",[39,71370,71371],{"class":41,"line":33948},[39,71372,53452],{"class":45},[39,71374,71375],{"class":41,"line":33959},[39,71376,3245],{"class":45},[39,71378,71379],{"class":41,"line":33965},[39,71380,3458],{"emptyLinePlaceholder":1145},[39,71382,71383],{"class":41,"line":33984},[39,71384,71385],{"class":102},"    \u002F\u002F 3.删除委托\n",[39,71387,71388],{"class":41,"line":33990},[39,71389,71390],{"class":102},"    \u002F\u002F 3.1 事件委托 tbody\n",[39,71392,71393,71396,71398,71400,71402,71404,71406,71408,71410],{"class":41,"line":34001},[39,71394,71395],{"class":45},"    tbody.",[39,71397,58867],{"class":3021},[39,71399,1221],{"class":45},[39,71401,58872],{"class":1319},[39,71403,13491],{"class":45},[39,71405,55503],{"class":49},[39,71407,2716],{"class":45},[39,71409,1290],{"class":254},[39,71411,13498],{"class":45},[39,71413,71414,71416,71418,71420,71422],{"class":41,"line":34007},[39,71415,55534],{"class":49},[39,71417,68088],{"class":45},[39,71419,55540],{"class":49},[39,71421,69310],{"class":1319},[39,71423,13498],{"class":45},[39,71425,71426],{"class":41,"line":34027},[39,71427,71428],{"class":102},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[39,71430,71431],{"class":41,"line":34043},[39,71432,71433],{"class":102},"        \u002F\u002F console.log(e.target.dataset.id);\n",[39,71435,71436],{"class":41,"line":34049},[39,71437,71438],{"class":102},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[39,71440,71441,71444,71446,71449,71451],{"class":41,"line":34063},[39,71442,71443],{"class":45},"        arr.",[39,71445,59064],{"class":3021},[39,71447,71448],{"class":45},"(e.target.dataset.id, ",[39,71450,57],{"class":56},[39,71452,209],{"class":45},[39,71454,71455],{"class":41,"line":34069},[39,71456,71457],{"class":102},"        \u002F\u002F 重新渲染一次\n",[39,71459,71460,71463],{"class":41,"line":34075},[39,71461,71462],{"class":3021},"        render",[39,71464,3034],{"class":45},[39,71466,71467],{"class":41,"line":34086},[39,71468,53452],{"class":45},[39,71470,71471],{"class":41,"line":34092},[39,71472,34516],{"class":45},[39,71474,71475,71477,71479],{"class":41,"line":34098},[39,71476,53471],{"class":45},[39,71478,52867],{"class":52354},[39,71480,52361],{"class":45},[39,71482,71483],{"class":41,"line":34108},[39,71484,3458],{"emptyLinePlaceholder":1145},[39,71486,71487,71489,71491],{"class":41,"line":34114},[39,71488,52839],{"class":45},[39,71490,52854],{"class":52354},[39,71492,52361],{"class":45},[39,71494,71495],{"class":41,"line":34125},[39,71496,3458],{"emptyLinePlaceholder":1145},[39,71498,71499,71501,71503],{"class":41,"line":34131},[39,71500,52839],{"class":45},[39,71502,51689],{"class":52354},[39,71504,52361],{"class":45},[19,71506,71507],{},"样式：",[29,71509,71513],{"className":71510,"code":71511,"language":71512,"meta":34,"style":34},"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",[36,71514,71515,71520,71530,71539,71543,71547,71552,71562,71567,71571,71576,71586,71591,71600,71604,71608,71613,71618,71628,71638,71643,71647,71652,71661,71671,71676,71686,71696,71700,71705,71713,71717,71722,71727,71732,71740,71749,71753,71758,71767,71771,71776,71785,71789,71794,71803,71812,71820,71824,71829,71838,71848,71857,71867,71873,71882,71892,71902,71906,71911,71920,71928,71938,71946,71955,71964,71974,71982,71986,71991,72000],{"__ignoreMap":34},[39,71516,71517],{"class":41,"line":42},[39,71518,71519],{"class":45},"* {\n",[39,71521,71522,71525,71527],{"class":41,"line":74},[39,71523,71524],{"class":52354},"  margin",[39,71526,52491],{"class":45},[39,71528,71529],{"class":1319},"0;\n",[39,71531,71532,71535,71537],{"class":41,"line":99},[39,71533,71534],{"class":1319},"  padding",[39,71536,52491],{"class":45},[39,71538,71529],{"class":1319},[39,71540,71541],{"class":41,"line":106},[39,71542,2630],{"class":45},[39,71544,71545],{"class":41,"line":112},[39,71546,3458],{"emptyLinePlaceholder":1145},[39,71548,71549],{"class":41,"line":118},[39,71550,71551],{"class":1319},"a {\n",[39,71553,71554,71557,71559],{"class":41,"line":413},[39,71555,71556],{"class":52354},"  text-decoration",[39,71558,52491],{"class":45},[39,71560,71561],{"class":1319},"none;\n",[39,71563,71564],{"class":41,"line":419},[39,71565,71566],{"class":1319},"  color:#721c24;\n",[39,71568,71569],{"class":41,"line":425},[39,71570,2630],{"class":45},[39,71572,71573],{"class":41,"line":443},[39,71574,71575],{"class":1319},"h1 {\n",[39,71577,71578,71581,71583],{"class":41,"line":449},[39,71579,71580],{"class":52354},"  text-align",[39,71582,52491],{"class":45},[39,71584,71585],{"class":1319},"center;\n",[39,71587,71588],{"class":41,"line":455},[39,71589,71590],{"class":1319},"  color:#333;\n",[39,71592,71593,71595,71597],{"class":41,"line":461},[39,71594,71524],{"class":52354},[39,71596,52491],{"class":45},[39,71598,71599],{"class":1319},"20px 0;\n",[39,71601,71602],{"class":41,"line":475},[39,71603,3732],{"class":45},[39,71605,71606],{"class":41,"line":665},[39,71607,2630],{"class":45},[39,71609,71610],{"class":41,"line":671},[39,71611,71612],{"class":1319},"table {\n",[39,71614,71615],{"class":41,"line":684},[39,71616,71617],{"class":1319},"  margin:0 auto;\n",[39,71619,71620,71623,71625],{"class":41,"line":2732},[39,71621,71622],{"class":52354},"  width",[39,71624,52491],{"class":45},[39,71626,71627],{"class":1319},"800px;\n",[39,71629,71630,71633,71635],{"class":41,"line":2737},[39,71631,71632],{"class":52354},"  border-collapse",[39,71634,52491],{"class":45},[39,71636,71637],{"class":1319},"collapse;\n",[39,71639,71640],{"class":41,"line":2751},[39,71641,71642],{"class":1319},"  color:#004085;\n",[39,71644,71645],{"class":41,"line":2756},[39,71646,2630],{"class":45},[39,71648,71649],{"class":41,"line":2785},[39,71650,71651],{"class":1319},"th {\n",[39,71653,71654,71656,71658],{"class":41,"line":2790},[39,71655,71534],{"class":52354},[39,71657,52491],{"class":45},[39,71659,71660],{"class":1319},"10px;\n",[39,71662,71663,71666,71668],{"class":41,"line":2807},[39,71664,71665],{"class":52354},"  background",[39,71667,52491],{"class":45},[39,71669,71670],{"class":102},"#cfe5ff;\n",[39,71672,71673],{"class":41,"line":2812},[39,71674,71675],{"class":45},"  \n",[39,71677,71678,71681,71683],{"class":41,"line":2817},[39,71679,71680],{"class":52354},"  font-size",[39,71682,52491],{"class":45},[39,71684,71685],{"class":1319},"20px;\n",[39,71687,71688,71691,71693],{"class":41,"line":2822},[39,71689,71690],{"class":52354},"  font-weight",[39,71692,52491],{"class":45},[39,71694,71695],{"class":1319},"400;\n",[39,71697,71698],{"class":41,"line":2836},[39,71699,2630],{"class":45},[39,71701,71702],{"class":41,"line":2841},[39,71703,71704],{"class":1319},"td,th {\n",[39,71706,71707,71710],{"class":41,"line":3635},[39,71708,71709],{"class":1319},"  border:1px solid",[39,71711,71712],{"class":102}," #b8daff;\n",[39,71714,71715],{"class":41,"line":3649},[39,71716,2630],{"class":45},[39,71718,71719],{"class":41,"line":3657},[39,71720,71721],{"class":1319},"td {\n",[39,71723,71724],{"class":41,"line":3662},[39,71725,71726],{"class":1319},"  padding:10px;\n",[39,71728,71729],{"class":41,"line":3668},[39,71730,71731],{"class":1319},"  color:#666;\n",[39,71733,71734,71736,71738],{"class":41,"line":3674},[39,71735,71580],{"class":52354},[39,71737,52491],{"class":45},[39,71739,71585],{"class":1319},[39,71741,71742,71744,71746],{"class":41,"line":3679},[39,71743,71680],{"class":52354},[39,71745,52491],{"class":45},[39,71747,71748],{"class":1319},"16px;\n",[39,71750,71751],{"class":41,"line":9004},[39,71752,2630],{"class":45},[39,71754,71755],{"class":41,"line":9028},[39,71756,71757],{"class":1319},"tbody tr {\n",[39,71759,71760,71762,71764],{"class":41,"line":9033},[39,71761,71665],{"class":52354},[39,71763,52491],{"class":45},[39,71765,71766],{"class":102},"#fff;\n",[39,71768,71769],{"class":41,"line":9039},[39,71770,2630],{"class":45},[39,71772,71773],{"class":41,"line":9066},[39,71774,71775],{"class":1319},"tbody tr:hover {\n",[39,71777,71778,71780,71782],{"class":41,"line":9071},[39,71779,71665],{"class":52354},[39,71781,52491],{"class":45},[39,71783,71784],{"class":102},"#e1ecf8;\n",[39,71786,71787],{"class":41,"line":9077},[39,71788,2630],{"class":45},[39,71790,71791],{"class":41,"line":9089},[39,71792,71793],{"class":1319},".info {\n",[39,71795,71796,71798,71800],{"class":41,"line":9101},[39,71797,71622],{"class":52354},[39,71799,52491],{"class":45},[39,71801,71802],{"class":1319},"900px;\n",[39,71804,71805,71807,71809],{"class":41,"line":9113},[39,71806,71524],{"class":52354},[39,71808,52491],{"class":45},[39,71810,71811],{"class":1319},"50px auto;\n",[39,71813,71814,71816,71818],{"class":41,"line":10772},[39,71815,71580],{"class":52354},[39,71817,52491],{"class":45},[39,71819,71585],{"class":1319},[39,71821,71822],{"class":41,"line":10797},[39,71823,2630],{"class":45},[39,71825,71826],{"class":41,"line":10820},[39,71827,71828],{"class":1319},".info  input, .info select {\n",[39,71830,71831,71833,71835],{"class":41,"line":10844},[39,71832,71622],{"class":52354},[39,71834,52491],{"class":45},[39,71836,71837],{"class":1319},"80px;\n",[39,71839,71840,71843,71845],{"class":41,"line":10849},[39,71841,71842],{"class":52354},"  height",[39,71844,52491],{"class":45},[39,71846,71847],{"class":1319},"27px;\n",[39,71849,71850,71853,71855],{"class":41,"line":10854},[39,71851,71852],{"class":52354},"  outline",[39,71854,52491],{"class":45},[39,71856,71561],{"class":1319},[39,71858,71859,71862,71864],{"class":41,"line":10859},[39,71860,71861],{"class":52354},"  border-radius",[39,71863,52491],{"class":45},[39,71865,71866],{"class":1319},"5px;\n",[39,71868,71869,71871],{"class":41,"line":10868},[39,71870,71709],{"class":1319},[39,71872,71712],{"class":102},[39,71874,71875,71878,71880],{"class":41,"line":10873},[39,71876,71877],{"class":52354},"  padding-left",[39,71879,52491],{"class":45},[39,71881,71866],{"class":1319},[39,71883,71884,71887,71889],{"class":41,"line":10879},[39,71885,71886],{"class":52354},"  box-sizing",[39,71888,52491],{"class":45},[39,71890,71891],{"class":1319},"border-box;\n",[39,71893,71894,71897,71899],{"class":41,"line":10900},[39,71895,71896],{"class":52354},"  margin-right",[39,71898,52491],{"class":45},[39,71900,71901],{"class":1319},"15px;\n",[39,71903,71904],{"class":41,"line":10906},[39,71905,2630],{"class":45},[39,71907,71908],{"class":41,"line":10920},[39,71909,71910],{"class":1319},".info button {\n",[39,71912,71913,71915,71917],{"class":41,"line":10926},[39,71914,71622],{"class":52354},[39,71916,52491],{"class":45},[39,71918,71919],{"class":1319},"60px;\n",[39,71921,71922,71924,71926],{"class":41,"line":10953},[39,71923,71842],{"class":52354},[39,71925,52491],{"class":45},[39,71927,71847],{"class":1319},[39,71929,71930,71933,71935],{"class":41,"line":10962},[39,71931,71932],{"class":52354},"  background-color",[39,71934,52491],{"class":45},[39,71936,71937],{"class":102},"#004085;\n",[39,71939,71940,71942,71944],{"class":41,"line":10968},[39,71941,71852],{"class":52354},[39,71943,52491],{"class":45},[39,71945,71561],{"class":1319},[39,71947,71948,71951,71953],{"class":41,"line":10976},[39,71949,71950],{"class":52354},"  border",[39,71952,52491],{"class":45},[39,71954,71529],{"class":1319},[39,71956,71957,71960,71962],{"class":41,"line":10981},[39,71958,71959],{"class":52354},"  color",[39,71961,52491],{"class":45},[39,71963,71766],{"class":102},[39,71965,71966,71969,71971],{"class":41,"line":17660},[39,71967,71968],{"class":52354},"  cursor",[39,71970,52491],{"class":45},[39,71972,71973],{"class":1319},"pointer;\n",[39,71975,71976,71978,71980],{"class":41,"line":17666},[39,71977,71861],{"class":52354},[39,71979,52491],{"class":45},[39,71981,71866],{"class":1319},[39,71983,71984],{"class":41,"line":17689},[39,71985,2630],{"class":45},[39,71987,71988],{"class":41,"line":17695},[39,71989,71990],{"class":1319},".info .age {\n",[39,71992,71993,71995,71997],{"class":41,"line":17718},[39,71994,71622],{"class":52354},[39,71996,52491],{"class":45},[39,71998,71999],{"class":1319},"50px;\n",[39,72001,72002],{"class":41,"line":17732},[39,72003,2630],{"class":45},[19,72005,72006],{},"思路：",[19,72008,72009],{},[269,72010],{"alt":34,"src":72011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72013,72014],{},[269,72015],{"alt":34,"src":72016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72018,72019],{},[269,72020],{"alt":34,"src":72021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[1188,72023,72025],{"id":72024},"_3315-重绘回流","3.3.15 重绘回流",[19,72027,72028],{},[269,72029],{"alt":34,"src":72030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72032,72033],{},[269,72034],{"alt":34,"src":72035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72037,72038],{},[269,72039],{"alt":34,"src":72040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72042,72044],{"id":72043},"_34-bom","3.4 BOM",[19,72046,72047],{},[269,72048],{"alt":34,"src":72049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72051,72052],{},"平时写的document省略了window而已，实际上是window.document",[19,72054,72055],{},"函数也是这样，调用的时候实际为window.fn()",[19,72057,72058],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72060,72061],{},"window大部分情况下可以省略",[1188,72063,72065],{"id":72064},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,72067,72068],{},"只执行一次",[19,72070,72071],{},[269,72072],{"alt":34,"src":72073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,72075,72076],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,72078,72079],{},[269,72080],{"alt":34,"src":72081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[1188,72083,72085],{"id":72084},"_342-js执行机制","3.4.2 JS执行机制",[19,72087,72088],{},[269,72089],{"alt":34,"src":72090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,72092,72093],{},"两个的结果都是1111 3333 2222",[19,72095,72096],{},[269,72097],{"alt":34,"src":72098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,72100,72101],{},[269,72102],{"alt":34,"src":72103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,72105,72106],{},[269,72107],{"alt":34,"src":72108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,72110,72111],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,72113,72114],{},"工作流程：",[19,72116,72117],{},[269,72118],{"alt":34,"src":72119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,72121,72122],{},[269,72123],{"alt":34,"src":72124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,72126,72127],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,72129,72130],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[1188,72132,72134],{"id":72133},"_343-location对象","3.4.3 location对象",[19,72136,72137],{},"location对象属于window这个全局对象下的，可以 省略window",[19,72139,72140],{},[269,72141],{"alt":34,"src":72142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,72144,72145],{},"href可以跳转页面",[1171,72147,72148],{},[1174,72149,72150],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,72152,72153],{},"search得到提交信息之后网站后边的地址",[19,72155,72156],{},[269,72157],{"alt":34,"src":72158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,72160,72161],{},[269,72162],{"alt":34,"src":72163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[1171,72165,72166],{"start":74},[1174,72167,72168],{},"hash:这个获取单页面应用#后边的地址",[19,72170,72171],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,72173,72174],{},[269,72175],{"alt":34,"src":72176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[29,72178,72180],{"className":54121,"code":72179,"language":54123,"meta":34,"style":34},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[36,72181,72182,72202,72222],{"__ignoreMap":34},[39,72183,72184,72186,72188,72190,72192,72195,72198,72200],{"class":41,"line":42},[39,72185,53198],{"class":45},[39,72187,46],{"class":52354},[39,72189,62111],{"class":3021},[39,72191,50],{"class":45},[39,72193,72194],{"class":1319},"\"#\u002Fmy\"",[39,72196,72197],{"class":45},">我的\u003C\u002F",[39,72199,46],{"class":52354},[39,72201,52361],{"class":45},[39,72203,72204,72206,72208,72210,72212,72215,72218,72220],{"class":41,"line":74},[39,72205,53198],{"class":45},[39,72207,46],{"class":52354},[39,72209,62111],{"class":3021},[39,72211,50],{"class":45},[39,72213,72214],{"class":1319},"\"#\u002Ffriend\"",[39,72216,72217],{"class":45},">关注\u003C\u002F",[39,72219,46],{"class":52354},[39,72221,52361],{"class":45},[39,72223,72224,72226,72228,72230,72232,72235,72238,72240],{"class":41,"line":99},[39,72225,53198],{"class":45},[39,72227,46],{"class":52354},[39,72229,62111],{"class":3021},[39,72231,50],{"class":45},[39,72233,72234],{"class":1319},"\"#\u002Fdownload\"",[39,72236,72237],{"class":45},">下载\u003C\u002F",[39,72239,46],{"class":52354},[39,72241,52361],{"class":45},[19,72243,72244],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[1171,72246,72247],{"start":99},[1174,72248,72249,72250,72252,72253,72255],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54770,72251],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54770,72254],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[1188,72257,72259],{"id":72258},"_345-navigator对象","3.4.5 navigator对象",[19,72261,72262],{},[269,72263],{"alt":34,"src":72264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[29,72266,72270],{"className":72267,"code":72268,"language":72269,"meta":34,"style":34},"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",[36,72271,72272,72277,72288,72300,72305,72356,72397,72402,72415,72427,72432],{"__ignoreMap":34},[39,72273,72274],{"class":41,"line":42},[39,72275,72276],{"class":102},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[39,72278,72279,72281,72283,72285],{"class":41,"line":74},[39,72280,1438],{"class":49},[39,72282,1221],{"class":45},[39,72284,55503],{"class":49},[39,72286,72287],{"class":45}," () { \n",[39,72289,72290,72292,72295,72297],{"class":41,"line":99},[39,72291,7848],{"class":49},[39,72293,72294],{"class":56}," userAgent",[39,72296,14620],{"class":49},[39,72298,72299],{"class":45}," navigator.userAgent \n",[39,72301,72302],{"class":41,"line":106},[39,72303,72304],{"class":102},"\u002F\u002F 验证是否为Android或iPhone \n",[39,72306,72307,72309,72312,72314,72317,72320,72322,72324,72327,72329,72332,72336,72338,72340,72342,72345,72347,72349,72351,72353],{"class":41,"line":112},[39,72308,7848],{"class":49},[39,72310,72311],{"class":56}," android",[39,72313,14620],{"class":49},[39,72315,72316],{"class":45}," userAgent.",[39,72318,72319],{"class":3021},"match",[39,72321,1221],{"class":45},[39,72323,1784],{"class":1319},[39,72325,72326],{"class":49031},"(Android);",[39,72328,2184],{"class":49},[39,72330,72331],{"class":56},"[\\s",[39,72333,72335],{"class":72334},"snhLl","\\\u002F",[39,72337,2138],{"class":56},[39,72339,1682],{"class":49},[39,72341,1221],{"class":49031},[39,72343,72344],{"class":56},"[\\d.]",[39,72346,1682],{"class":49},[39,72348,1632],{"class":49031},[39,72350,2184],{"class":49},[39,72352,1784],{"class":1319},[39,72354,72355],{"class":45},") \n",[39,72357,72358,72360,72363,72365,72367,72369,72371,72373,72376,72379,72382,72384,72386,72389,72391,72393,72395],{"class":41,"line":118},[39,72359,7848],{"class":49},[39,72361,72362],{"class":56}," iphone",[39,72364,14620],{"class":49},[39,72366,72316],{"class":45},[39,72368,72319],{"class":3021},[39,72370,1221],{"class":45},[39,72372,1784],{"class":1319},[39,72374,72375],{"class":49031},"(iPhone",[39,72377,72378],{"class":56},"\\s",[39,72380,72381],{"class":49031},"OS)",[39,72383,72378],{"class":56},[39,72385,1221],{"class":49031},[39,72387,72388],{"class":56},"[\\d_]",[39,72390,1682],{"class":49},[39,72392,1632],{"class":49031},[39,72394,1784],{"class":1319},[39,72396,72355],{"class":45},[39,72398,72399],{"class":41,"line":413},[39,72400,72401],{"class":102},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[39,72403,72404,72406,72409,72412],{"class":41,"line":419},[39,72405,2596],{"class":49},[39,72407,72408],{"class":45}," (android ",[39,72410,72411],{"class":49},"||",[39,72413,72414],{"class":45}," iphone) { \n",[39,72416,72417,72420,72422,72425],{"class":41,"line":425},[39,72418,72419],{"class":45},"location.href ",[39,72421,50],{"class":49},[39,72423,72424],{"class":1319}," 'http:\u002F\u002Fm.itcast.cn'",[39,72426,3732],{"class":45},[39,72428,72429],{"class":41,"line":443},[39,72430,72431],{"class":45},"} \n",[39,72433,72434],{"class":41,"line":449},[39,72435,72436],{"class":45},"})()\n",[1188,72438,72440],{"id":72439},"_346-histroy对象","3.4.6 histroy对象",[19,72442,72443],{},[269,72444],{"alt":34,"src":72445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,72447,72448],{},"浏览器地址的前进与后退!!!",[19,72450,72451],{},"history.back() 等效于 history.go(-1)",[19,72453,72454],{},"history.forward() 等效于 history.go(1)",[14,72456,72458],{"id":72457},"_35-本地存储","3.5 本地存储",[1171,72460,72461,72464,72467],{},[1174,72462,72463],{},"数据存储在用户浏览器中",[1174,72465,72466],{},"设置、读取方便、甚至页面刷新不丢失数据",[1174,72468,72469],{},"容量较大，sessionStorage和localStorage约 5M 左右",[1188,72471,72473],{"id":72472},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,72475,72476],{},"只能存储字符串",[19,72478,72479],{},[269,72480],{"alt":34,"src":72481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,72483,72484],{},[269,72485],{"alt":34,"src":72486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,72488,72489],{},"键值对要加引号,不然就会当变量来看了",[19,72491,72492],{},"localStorage.setItem('uname', 'pink')",[19,72494,72495],{},"刷新之后信息不再丢失",[19,72497,72498],{},"操作key,value会跟着变",[19,72500,72501],{},"删除只删除键就可以,即名字",[19,72503,72492],{},[19,72505,72506],{},"改:",[19,72508,72509],{},"localStorage.setItem('uname','red')",[19,72511,72512],{},"有这个键就是改,没有这个键就是改",[19,72514,72515],{},[269,72516],{"alt":34,"src":72517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,72519,72520],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,72522,72523],{},[269,72524],{"alt":34,"src":72525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,72527,72528],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[1188,72530,72532],{"id":72531},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,72534,72535],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,72537,72538],{},"特性:",[1171,72540,72541,72544,72547,72550],{},[1174,72542,72543],{},"生命周期为关闭浏览器窗口",[1174,72545,72546],{},"在同一个窗口(页面)下数据可以共享",[1174,72548,72549],{},"以键值对的形式存储使用",[1174,72551,72552],{},"用法跟localStorage 基本相同",[1188,72554,72556],{"id":72555},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,72558,72559],{},"本地只能存储字符串,无法直接存储复杂数据类型",[29,72561,72563],{"className":54121,"code":72562,"language":54123,"meta":34,"style":34},"\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",[36,72564,72565,72573,72578,72583,72588,72593,72597,72602,72607],{"__ignoreMap":34},[39,72566,72567,72569,72571],{"class":41,"line":42},[39,72568,2108],{"class":45},[39,72570,52867],{"class":52354},[39,72572,52361],{"class":45},[39,72574,72575],{"class":41,"line":74},[39,72576,72577],{"class":45},"    const obj = {\n",[39,72579,72580],{"class":41,"line":99},[39,72581,72582],{"class":45},"      uname: 'pink老师',\n",[39,72584,72585],{"class":41,"line":106},[39,72586,72587],{"class":45},"      age: 18,\n",[39,72589,72590],{"class":41,"line":112},[39,72591,72592],{"class":45},"      gender: '女'\n",[39,72594,72595],{"class":41,"line":118},[39,72596,3245],{"class":45},[39,72598,72599],{"class":41,"line":413},[39,72600,72601],{"class":45},"    \u002F\u002F 存储复杂数据类型\n",[39,72603,72604],{"class":41,"line":419},[39,72605,72606],{"class":45},"    localStorage.setItem('obj', obj)\n",[39,72608,72609,72611,72613],{"class":41,"line":425},[39,72610,53471],{"class":45},[39,72612,52867],{"class":52354},[39,72614,52361],{"class":45},[19,72616,72617],{},[269,72618],{"alt":34,"src":72619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,72621,72622],{},"如果获取一下数据:",[19,72624,72625],{},"log(localStorage.getItem('obj'))",[19,72627,72628],{},[269,72629],{"alt":34,"src":72630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,72632,72633],{},"发现直接存对象是使用不了的!!!",[23054,72635,72637],{"id":72636},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,72639,72640],{},[269,72641],{"alt":34,"src":72642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[29,72644,72646],{"className":51687,"code":72645,"language":51689,"meta":34,"style":34},"\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",[36,72647,72648,72656,72666,72676,72685,72693,72697,72701,72727,72746,72754,72758,72763,72768],{"__ignoreMap":34},[39,72649,72650,72652,72654],{"class":41,"line":42},[39,72651,2108],{"class":45},[39,72653,52867],{"class":52354},[39,72655,52361],{"class":45},[39,72657,72658,72660,72662,72664],{"class":41,"line":74},[39,72659,12277],{"class":49},[39,72661,71025],{"class":56},[39,72663,14620],{"class":49},[39,72665,16628],{"class":45},[39,72667,72668,72671,72674],{"class":41,"line":99},[39,72669,72670],{"class":45},"      uname: ",[39,72672,72673],{"class":1319},"'pink老师'",[39,72675,32521],{"class":45},[39,72677,72678,72681,72683],{"class":41,"line":106},[39,72679,72680],{"class":45},"      age: ",[39,72682,1849],{"class":56},[39,72684,32521],{"class":45},[39,72686,72687,72690],{"class":41,"line":112},[39,72688,72689],{"class":45},"      gender: ",[39,72691,72692],{"class":1319},"'女'\n",[39,72694,72695],{"class":41,"line":118},[39,72696,3245],{"class":45},[39,72698,72699],{"class":41,"line":413},[39,72700,72601],{"class":102},[39,72702,72703,72706,72709,72711,72714,72716,72719,72721,72724],{"class":41,"line":419},[39,72704,72705],{"class":45},"  localStorage.",[39,72707,72708],{"class":3021},"setItem",[39,72710,1221],{"class":45},[39,72712,72713],{"class":1319},"'obj'",[39,72715,13491],{"class":45},[39,72717,72718],{"class":56},"JSON",[39,72720,1758],{"class":45},[39,72722,72723],{"class":3021},"stringify",[39,72725,72726],{"class":45},"(obj))\n",[39,72728,72729,72732,72734,72737,72740,72742,72744],{"class":41,"line":425},[39,72730,72731],{"class":45},"  console.",[39,72733,59301],{"class":3021},[39,72735,72736],{"class":45},"(localStorage.",[39,72738,72739],{"class":3021},"getItem",[39,72741,1221],{"class":45},[39,72743,72713],{"class":1319},[39,72745,31552],{"class":45},[39,72747,72748,72750,72752],{"class":41,"line":443},[39,72749,53471],{"class":45},[39,72751,52867],{"class":52354},[39,72753,52361],{"class":45},[39,72755,72756],{"class":41,"line":449},[39,72757,71675],{"class":45},[39,72759,72760],{"class":41,"line":455},[39,72761,72762],{"class":45},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[39,72764,72765],{"class":41,"line":461},[39,72766,72767],{"class":45},"  类型是字符串的\n",[39,72769,72770],{"class":41,"line":475},[39,72771,72772],{"class":45},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23054,72774,72776],{"id":72775},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,72778,72779],{},[269,72780],{"alt":34,"src":72781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,72783,72784],{},[269,72785],{"alt":34,"src":72786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[29,72788,72790],{"className":54121,"code":72789,"language":54123,"meta":34,"style":34},"  \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",[36,72791,72792,72800,72804,72808,72812,72816,72820,72825,72830,72835,72840,72845,72850,72855,72860],{"__ignoreMap":34},[39,72793,72794,72796,72798],{"class":41,"line":42},[39,72795,53198],{"class":45},[39,72797,52867],{"class":52354},[39,72799,52361],{"class":45},[39,72801,72802],{"class":41,"line":74},[39,72803,72577],{"class":45},[39,72805,72806],{"class":41,"line":99},[39,72807,72582],{"class":45},[39,72809,72810],{"class":41,"line":106},[39,72811,72587],{"class":45},[39,72813,72814],{"class":41,"line":112},[39,72815,72592],{"class":45},[39,72817,72818],{"class":41,"line":118},[39,72819,3245],{"class":45},[39,72821,72822],{"class":41,"line":413},[39,72823,72824],{"class":45},"    \u002F\u002F 1.存储复杂数据类型\n",[39,72826,72827],{"class":41,"line":419},[39,72828,72829],{"class":45},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[39,72831,72832],{"class":41,"line":425},[39,72833,72834],{"class":45},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[39,72836,72837],{"class":41,"line":443},[39,72838,72839],{"class":45},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[39,72841,72842],{"class":41,"line":449},[39,72843,72844],{"class":45},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[39,72846,72847],{"class":41,"line":455},[39,72848,72849],{"class":45},"    \u002F\u002F 取\n",[39,72851,72852],{"class":41,"line":461},[39,72853,72854],{"class":45},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[39,72856,72857],{"class":41,"line":475},[39,72858,72859],{"class":45},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[39,72861,72862,72864,72866],{"class":41,"line":665},[39,72863,53471],{"class":45},[39,72865,52867],{"class":52354},[39,72867,52361],{"class":45},[19,72869,72870],{},[269,72871],{"alt":34,"src":72872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[1188,72874,72876],{"id":72875},"_356-数组map方法","3.5.6 数组map方法",[19,72878,72879],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,72881,72882],{},[269,72883],{"alt":34,"src":72884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,72886,72887],{},[269,72888],{"alt":34,"src":72889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,72891,72892,72895],{},[304,72893,72894],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,72897,72898],{},"map有返回值，但是forEach没有返回值",[19,72900,72901],{},"map是个方法。用的时候要加 ()",[19,72903,72904],{},"map返回的是一个数组",[1188,72906,72908],{"id":72907},"_357-数组中join方法","3.5.7 数组中join方法",[19,72910,72911],{},[269,72912],{"alt":34,"src":72913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72915,72916],{},"类似于python中拼接字符串一样！",[1171,72918,72919,72922,72925],{},[1174,72920,72921],{},"小括号为空则逗号分开",[1174,72923,72924],{},"小括号为空字符串 ''，则元素之间没有分隔符",[1174,72926,72927],{},"小括号用啥符号就用进行分割",[1188,72929,72931],{"id":72930},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[1171,72933,72934,72937,72940,72943,72946],{},[1174,72935,72936],{},"记住本地时间获取快速方式：new Date().toDateString()",[1174,72938,72939],{},"尽量减少DOM操作，用好map+join的渲染方式",[1174,72941,72942],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[1174,72944,72945],{},"return可以实现函数的结束",[1174,72947,72948],{},"禁止跳转是 preventDefault() 不要忘记",[29,72950,72952],{"className":51687,"code":72951,"language":51689,"meta":34,"style":34},"\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",[36,72953,72954,72964,72978,72982,72990,73004,73024,73036,73044,73050,73060,73070,73074,73078,73084,73094,73106,73110,73114,73121,73133,73147,73157,73161,73165,73172,73179,73186,73198,73210,73220,73232,73236,73240,73247,73254,73266,73278,73288,73300,73330,73334,73338,73345,73357,73369,73393,73403,73413,73417,73421,73429,73440,73452,73464,73476,73493,73505,73517,73521,73525,73532,73544,73556,73568,73579,73597,73610,73622,73646,73657,73661,73665,73673,73683,73687,73691,73697,73709,73720,73730,73734,73738,73744,73766,73770,73774,73780,73786,73798,73808,73820,73850,73863,73880,73884,73888,73899,73921,73931,73935,73939,73952,73962,73974,73986,73998,74010,74020,74030,74040,74051,74064,74068,74076,74084,74088,74096,74109,74129,74162,74195,74228,74254,74272,74290,74298,74324,74342,74360,74378,74396,74414,74422,74430,74448,74456,74485,74493,74501,74509,74522,74534,74546,74558,74570,74582,74595,74607,74615,74623,74631,74636,74641,74645,74649,74653,74657,74661,74665,74670,74675,74680,74685,74693,74701,74709,74714,74719,74724,74729,74734,74739,74744,74749,74754,74759,74764,74769,74774,74779,74783,74788,74793,74803,74812,74816,74821,74830,74846,74888,74928,74967,75032,75040,75044,75049,75067,75075,75080,75085,75115,75121,75126,75139,75151,75163,75175,75187,75199,75211,75215,75225,75229,75234,75239,75243,75252,75256,75261,75266,75285,75290,75310,75314,75319,75323,75328,75346,75364,75382,75401,75420,75439,75444,75450,75471,75477,75486,75492,75498,75504,75531,75544,75549,75559,75565,75571,75577,75583,75588,75594,75600,75606,75612,75645,75650,75655,75660,75665,75671,75677,75683,75694,75699,75705,75712,75726,75732,75756,75761,75766,75772,75778,75799,75805,75818,75824,75830,75836,75842,75847,75853,75859,75865,75883,75897,75903,75911,75917,75939,75944,75949,75954,75959,75964,75973,75982,75987],{"__ignoreMap":34},[39,72955,72956,72958,72960,72962],{"class":41,"line":42},[39,72957,52351],{"class":45},[39,72959,52355],{"class":52354},[39,72961,52358],{"class":3021},[39,72963,52361],{"class":45},[39,72965,72966,72968,72970,72972,72974,72976],{"class":41,"line":74},[39,72967,2108],{"class":45},[39,72969,51689],{"class":52354},[39,72971,52370],{"class":3021},[39,72973,50],{"class":45},[39,72975,52375],{"class":1319},[39,72977,52361],{"class":45},[39,72979,72980],{"class":41,"line":99},[39,72981,3458],{"emptyLinePlaceholder":1145},[39,72983,72984,72986,72988],{"class":41,"line":106},[39,72985,2108],{"class":45},[39,72987,52388],{"class":52354},[39,72989,52361],{"class":45},[39,72991,72992,72994,72996,72998,73000,73002],{"class":41,"line":112},[39,72993,53198],{"class":45},[39,72995,52398],{"class":52354},[39,72997,52401],{"class":3021},[39,72999,50],{"class":45},[39,73001,52406],{"class":1319},[39,73003,52361],{"class":45},[39,73005,73006,73008,73010,73012,73014,73016,73018,73020,73022],{"class":41,"line":118},[39,73007,53198],{"class":45},[39,73009,52398],{"class":52354},[39,73011,15976],{"class":3021},[39,73013,50],{"class":45},[39,73015,52445],{"class":1319},[39,73017,52425],{"class":3021},[39,73019,50],{"class":45},[39,73021,52452],{"class":1319},[39,73023,52361],{"class":45},[39,73025,73026,73028,73030,73032,73034],{"class":41,"line":413},[39,73027,53198],{"class":45},[39,73029,52461],{"class":52354},[39,73031,52464],{"class":45},[39,73033,52461],{"class":52354},[39,73035,52361],{"class":45},[39,73037,73038,73040,73042],{"class":41,"line":419},[39,73039,53198],{"class":45},[39,73041,1133],{"class":52354},[39,73043,52361],{"class":45},[39,73045,73046,73048],{"class":41,"line":425},[39,73047,7459],{"class":52354},[39,73049,16628],{"class":45},[39,73051,73052,73054,73056,73058],{"class":41,"line":443},[39,73053,55749],{"class":56},[39,73055,52491],{"class":45},[39,73057,260],{"class":56},[39,73059,2359],{"class":45},[39,73061,73062,73064,73066,73068],{"class":41,"line":449},[39,73063,55760],{"class":56},[39,73065,52491],{"class":45},[39,73067,260],{"class":56},[39,73069,2359],{"class":45},[39,73071,73072],{"class":41,"line":455},[39,73073,3245],{"class":45},[39,73075,73076],{"class":41,"line":461},[39,73077,3458],{"emptyLinePlaceholder":1145},[39,73079,73080,73082],{"class":41,"line":475},[39,73081,58333],{"class":52354},[39,73083,16628],{"class":45},[39,73085,73086,73088,73090,73092],{"class":41,"line":665},[39,73087,58340],{"class":56},[39,73089,52491],{"class":45},[39,73091,52646],{"class":56},[39,73093,2359],{"class":45},[39,73095,73096,73098,73100,73102,73104],{"class":41,"line":671},[39,73097,63131],{"class":56},[39,73099,52491],{"class":45},[39,73101,1898],{"class":56},[39,73103,52546],{"class":49},[39,73105,2359],{"class":45},[39,73107,73108],{"class":41,"line":684},[39,73109,3245],{"class":45},[39,73111,73112],{"class":41,"line":2732},[39,73113,3458],{"emptyLinePlaceholder":1145},[39,73115,73116,73119],{"class":41,"line":2737},[39,73117,73118],{"class":3021},"    .info",[39,73120,16628],{"class":45},[39,73122,73123,73125,73127,73129,73131],{"class":41,"line":2751},[39,73124,55825],{"class":56},[39,73126,52491],{"class":45},[39,73128,52543],{"class":56},[39,73130,52546],{"class":49},[39,73132,2359],{"class":45},[39,73134,73135,73137,73139,73141,73143,73145],{"class":41,"line":2756},[39,73136,55760],{"class":56},[39,73138,52491],{"class":45},[39,73140,146],{"class":56},[39,73142,52546],{"class":49},[39,73144,52610],{"class":56},[39,73146,2359],{"class":45},[39,73148,73149,73151,73153,73155],{"class":41,"line":2785},[39,73150,58340],{"class":56},[39,73152,52491],{"class":45},[39,73154,52646],{"class":56},[39,73156,2359],{"class":45},[39,73158,73159],{"class":41,"line":2790},[39,73160,3245],{"class":45},[39,73162,73163],{"class":41,"line":2807},[39,73164,3458],{"emptyLinePlaceholder":1145},[39,73166,73167,73170],{"class":41,"line":2812},[39,73168,73169],{"class":3021},"    .uname",[39,73171,32521],{"class":45},[39,73173,73174,73177],{"class":41,"line":2817},[39,73175,73176],{"class":3021},"    .age",[39,73178,32521],{"class":45},[39,73180,73181,73184],{"class":41,"line":2822},[39,73182,73183],{"class":3021},"    .salary",[39,73185,16628],{"class":45},[39,73187,73188,73190,73192,73194,73196],{"class":41,"line":2836},[39,73189,55825],{"class":56},[39,73191,52491],{"class":45},[39,73193,1519],{"class":56},[39,73195,52546],{"class":49},[39,73197,2359],{"class":45},[39,73199,73200,73202,73204,73206,73208],{"class":41,"line":2841},[39,73201,55839],{"class":56},[39,73203,52491],{"class":45},[39,73205,1898],{"class":56},[39,73207,52546],{"class":49},[39,73209,2359],{"class":45},[39,73211,73212,73214,73216,73218],{"class":41,"line":3635},[39,73213,62834],{"class":56},[39,73215,52491],{"class":45},[39,73217,55791],{"class":56},[39,73219,2359],{"class":45},[39,73221,73222,73224,73226,73228,73230],{"class":41,"line":3649},[39,73223,62804],{"class":56},[39,73225,52491],{"class":45},[39,73227,1775],{"class":56},[39,73229,52546],{"class":49},[39,73231,2359],{"class":45},[39,73233,73234],{"class":41,"line":3657},[39,73235,3245],{"class":45},[39,73237,73238],{"class":41,"line":3662},[39,73239,3458],{"emptyLinePlaceholder":1145},[39,73241,73242,73245],{"class":41,"line":3668},[39,73243,73244],{"class":3021},"    .gender",[39,73246,32521],{"class":45},[39,73248,73249,73252],{"class":41,"line":3674},[39,73250,73251],{"class":3021},"    .city",[39,73253,16628],{"class":45},[39,73255,73256,73258,73260,73262,73264],{"class":41,"line":3679},[39,73257,55825],{"class":56},[39,73259,52491],{"class":45},[39,73261,1519],{"class":56},[39,73263,52546],{"class":49},[39,73265,2359],{"class":45},[39,73267,73268,73270,73272,73274,73276],{"class":41,"line":9004},[39,73269,55839],{"class":56},[39,73271,52491],{"class":45},[39,73273,2023],{"class":56},[39,73275,52546],{"class":49},[39,73277,2359],{"class":45},[39,73279,73280,73282,73284,73286],{"class":41,"line":9028},[39,73281,62834],{"class":56},[39,73283,52491],{"class":45},[39,73285,55791],{"class":56},[39,73287,2359],{"class":45},[39,73289,73290,73292,73294,73296,73298],{"class":41,"line":9033},[39,73291,62804],{"class":56},[39,73293,52491],{"class":45},[39,73295,1775],{"class":56},[39,73297,52546],{"class":49},[39,73299,2359],{"class":45},[39,73301,73302,73304,73306,73308,73310,73312,73315,73317,73319,73321,73324,73326,73328],{"class":41,"line":9039},[39,73303,63031],{"class":56},[39,73305,52491],{"class":45},[39,73307,57],{"class":56},[39,73309,52546],{"class":49},[39,73311,52575],{"class":56},[39,73313,73314],{"class":56}," rgb",[39,73316,1221],{"class":45},[39,73318,2780],{"class":56},[39,73320,13491],{"class":45},[39,73322,73323],{"class":56},"197",[39,73325,13491],{"class":45},[39,73327,73323],{"class":56},[39,73329,3777],{"class":45},[39,73331,73332],{"class":41,"line":9066},[39,73333,3245],{"class":45},[39,73335,73336],{"class":41,"line":9071},[39,73337,3458],{"emptyLinePlaceholder":1145},[39,73339,73340,73343],{"class":41,"line":9077},[39,73341,73342],{"class":52354},"    button",[39,73344,16628],{"class":45},[39,73346,73347,73349,73351,73353,73355],{"class":41,"line":9089},[39,73348,55839],{"class":56},[39,73350,52491],{"class":45},[39,73352,2023],{"class":56},[39,73354,52546],{"class":49},[39,73356,2359],{"class":45},[39,73358,73359,73361,73363,73365,73367],{"class":41,"line":9101},[39,73360,55825],{"class":56},[39,73362,52491],{"class":45},[39,73364,1685],{"class":56},[39,73366,52546],{"class":49},[39,73368,2359],{"class":45},[39,73370,73371,73373,73375,73378,73380,73382,73384,73387,73389,73391],{"class":41,"line":9113},[39,73372,55938],{"class":56},[39,73374,52491],{"class":45},[39,73376,73377],{"class":56},"rgb",[39,73379,1221],{"class":45},[39,73381,2167],{"class":56},[39,73383,13491],{"class":45},[39,73385,73386],{"class":56},"187",[39,73388,13491],{"class":45},[39,73390,1507],{"class":56},[39,73392,3777],{"class":45},[39,73394,73395,73397,73399,73401],{"class":41,"line":10772},[39,73396,58470],{"class":56},[39,73398,52491],{"class":45},[39,73400,61896],{"class":56},[39,73402,2359],{"class":45},[39,73404,73405,73407,73409,73411],{"class":41,"line":10797},[39,73406,63031],{"class":56},[39,73408,52491],{"class":45},[39,73410,260],{"class":56},[39,73412,2359],{"class":45},[39,73414,73415],{"class":41,"line":10820},[39,73416,3245],{"class":45},[39,73418,73419],{"class":41,"line":10844},[39,73420,3458],{"emptyLinePlaceholder":1145},[39,73422,73423,73425,73427],{"class":41,"line":10849},[39,73424,73342],{"class":52354},[39,73426,52742],{"class":52354},[39,73428,16628],{"class":45},[39,73430,73431,73433,73435,73438],{"class":41,"line":10854},[39,73432,56063],{"class":56},[39,73434,52491],{"class":45},[39,73436,73437],{"class":56},"inline-block",[39,73439,2359],{"class":45},[39,73441,73442,73444,73446,73448,73450],{"class":41,"line":10859},[39,73443,55825],{"class":56},[39,73445,52491],{"class":45},[39,73447,146],{"class":56},[39,73449,52546],{"class":49},[39,73451,2359],{"class":45},[39,73453,73454,73456,73458,73460,73462],{"class":41,"line":10868},[39,73455,55839],{"class":56},[39,73457,52491],{"class":45},[39,73459,146],{"class":56},[39,73461,52546],{"class":49},[39,73463,2359],{"class":45},[39,73465,73466,73468,73470,73472,73474],{"class":41,"line":10873},[39,73467,58413],{"class":56},[39,73469,52491],{"class":45},[39,73471,151],{"class":56},[39,73473,52546],{"class":49},[39,73475,2359],{"class":45},[39,73477,73478,73480,73482,73484,73486,73488,73491],{"class":41,"line":10879},[39,73479,63031],{"class":56},[39,73481,52491],{"class":45},[39,73483,57],{"class":56},[39,73485,52546],{"class":49},[39,73487,52575],{"class":56},[39,73489,73490],{"class":56}," #fff",[39,73492,2359],{"class":45},[39,73494,73495,73497,73499,73501,73503],{"class":41,"line":10900},[39,73496,56188],{"class":56},[39,73498,52491],{"class":45},[39,73500,89],{"class":56},[39,73502,52546],{"class":49},[39,73504,2359],{"class":45},[39,73506,73507,73509,73511,73513,73515],{"class":41,"line":10906},[39,73508,62804],{"class":56},[39,73510,52491],{"class":45},[39,73512,57],{"class":56},[39,73514,52546],{"class":49},[39,73516,2359],{"class":45},[39,73518,73519],{"class":41,"line":10920},[39,73520,3245],{"class":45},[39,73522,73523],{"class":41,"line":10926},[39,73524,3458],{"emptyLinePlaceholder":1145},[39,73526,73527,73530],{"class":41,"line":10953},[39,73528,73529],{"class":3021},"    .total",[39,73531,16628],{"class":45},[39,73533,73534,73536,73538,73540,73542],{"class":41,"line":10962},[39,73535,55825],{"class":56},[39,73537,52491],{"class":45},[39,73539,62683],{"class":56},[39,73541,52546],{"class":49},[39,73543,2359],{"class":45},[39,73545,73546,73548,73550,73552,73554],{"class":41,"line":10968},[39,73547,55839],{"class":56},[39,73549,52491],{"class":45},[39,73551,1604],{"class":56},[39,73553,52546],{"class":49},[39,73555,2359],{"class":45},[39,73557,73558,73560,73562,73564,73566],{"class":41,"line":10976},[39,73559,58413],{"class":56},[39,73561,52491],{"class":45},[39,73563,1604],{"class":56},[39,73565,52546],{"class":49},[39,73567,2359],{"class":45},[39,73569,73570,73572,73574,73577],{"class":41,"line":10981},[39,73571,58340],{"class":56},[39,73573,52491],{"class":45},[39,73575,73576],{"class":56},"right",[39,73578,2359],{"class":45},[39,73580,73581,73583,73585,73587,73589,73591,73593,73595],{"class":41,"line":17660},[39,73582,55760],{"class":56},[39,73584,52491],{"class":45},[39,73586,1604],{"class":56},[39,73588,52546],{"class":49},[39,73590,52610],{"class":56},[39,73592,3096],{"class":56},[39,73594,52546],{"class":49},[39,73596,2359],{"class":45},[39,73598,73599,73602,73604,73606,73608],{"class":41,"line":17666},[39,73600,73601],{"class":56},"      padding-right",[39,73603,52491],{"class":45},[39,73605,146],{"class":56},[39,73607,52546],{"class":49},[39,73609,2359],{"class":45},[39,73611,73612,73614,73616,73618,73620],{"class":41,"line":17689},[39,73613,55976],{"class":56},[39,73615,52491],{"class":45},[39,73617,156],{"class":56},[39,73619,52546],{"class":49},[39,73621,2359],{"class":45},[39,73623,73624,73626,73628,73630,73632,73635,73637,73640,73642,73644],{"class":41,"line":17695},[39,73625,55938],{"class":56},[39,73627,52491],{"class":45},[39,73629,73377],{"class":56},[39,73631,1221],{"class":45},[39,73633,73634],{"class":56},"237",[39,73636,13491],{"class":45},[39,73638,73639],{"class":56},"235",[39,73641,13491],{"class":45},[39,73643,73639],{"class":56},[39,73645,3777],{"class":45},[39,73647,73648,73651,73653,73655],{"class":41,"line":17718},[39,73649,73650],{"class":56},"      box-sizing",[39,73652,52491],{"class":45},[39,73654,61559],{"class":56},[39,73656,2359],{"class":45},[39,73658,73659],{"class":41,"line":17732},[39,73660,3245],{"class":45},[39,73662,73663],{"class":41,"line":17752},[39,73664,3458],{"emptyLinePlaceholder":1145},[39,73666,73667,73669,73671],{"class":41,"line":17758},[39,73668,73529],{"class":3021},[39,73670,52742],{"class":52354},[39,73672,16628],{"class":45},[39,73674,73675,73677,73679,73681],{"class":41,"line":17769},[39,73676,58470],{"class":56},[39,73678,52491],{"class":45},[39,73680,58475],{"class":56},[39,73682,2359],{"class":45},[39,73684,73685],{"class":41,"line":17792},[39,73686,3245],{"class":45},[39,73688,73689],{"class":41,"line":17814},[39,73690,3458],{"emptyLinePlaceholder":1145},[39,73692,73693,73695],{"class":41,"line":17819},[39,73694,66077],{"class":52354},[39,73696,16628],{"class":45},[39,73698,73699,73701,73703,73705,73707],{"class":41,"line":17825},[39,73700,55825],{"class":56},[39,73702,52491],{"class":45},[39,73704,62683],{"class":56},[39,73706,52546],{"class":49},[39,73708,2359],{"class":45},[39,73710,73711,73713,73715,73718],{"class":41,"line":17839},[39,73712,55760],{"class":56},[39,73714,52491],{"class":45},[39,73716,73717],{"class":56},"auto",[39,73719,2359],{"class":45},[39,73721,73722,73724,73726,73728],{"class":41,"line":17852},[39,73723,66084],{"class":56},[39,73725,52491],{"class":45},[39,73727,66089],{"class":56},[39,73729,2359],{"class":45},[39,73731,73732],{"class":41,"line":17857},[39,73733,3245],{"class":45},[39,73735,73736],{"class":41,"line":17871},[39,73737,3458],{"emptyLinePlaceholder":1145},[39,73739,73740,73742],{"class":41,"line":17876},[39,73741,66169],{"class":52354},[39,73743,16628],{"class":45},[39,73745,73746,73748,73750,73752,73754,73756,73758,73760,73762,73764],{"class":41,"line":17882},[39,73747,55938],{"class":56},[39,73749,52491],{"class":45},[39,73751,73377],{"class":56},[39,73753,1221],{"class":45},[39,73755,73634],{"class":56},[39,73757,13491],{"class":45},[39,73759,73639],{"class":56},[39,73761,13491],{"class":45},[39,73763,73639],{"class":56},[39,73765,3777],{"class":45},[39,73767,73768],{"class":41,"line":17887},[39,73769,3245],{"class":45},[39,73771,73772],{"class":41,"line":17901},[39,73773,3458],{"emptyLinePlaceholder":1145},[39,73775,73776,73778],{"class":41,"line":17906},[39,73777,66169],{"class":52354},[39,73779,32521],{"class":45},[39,73781,73782,73784],{"class":41,"line":17911},[39,73783,66235],{"class":52354},[39,73785,16628],{"class":45},[39,73787,73788,73790,73792,73794,73796],{"class":41,"line":17925},[39,73789,55839],{"class":56},[39,73791,52491],{"class":45},[39,73793,1483],{"class":56},[39,73795,52546],{"class":49},[39,73797,2359],{"class":45},[39,73799,73800,73802,73804,73806],{"class":41,"line":17937},[39,73801,58340],{"class":56},[39,73803,52491],{"class":45},[39,73805,24792],{"class":56},[39,73807,2359],{"class":45},[39,73809,73810,73812,73814,73816,73818],{"class":41,"line":17942},[39,73811,55976],{"class":56},[39,73813,52491],{"class":45},[39,73815,1749],{"class":56},[39,73817,52546],{"class":49},[39,73819,2359],{"class":45},[39,73821,73822,73824,73826,73828,73830,73832,73834,73836,73839,73841,73844,73846,73848],{"class":41,"line":17955},[39,73823,63031],{"class":56},[39,73825,52491],{"class":45},[39,73827,57],{"class":56},[39,73829,52546],{"class":49},[39,73831,52575],{"class":56},[39,73833,73314],{"class":56},[39,73835,1221],{"class":45},[39,73837,73838],{"class":56},"228",[39,73840,13491],{"class":45},[39,73842,73843],{"class":56},"225",[39,73845,13491],{"class":45},[39,73847,73843],{"class":56},[39,73849,3777],{"class":45},[39,73851,73852,73855,73857,73859,73861],{"class":41,"line":17960},[39,73853,73854],{"class":56},"      padding-left",[39,73856,52491],{"class":45},[39,73858,89],{"class":56},[39,73860,52546],{"class":49},[39,73862,2359],{"class":45},[39,73864,73865,73867,73869,73871,73874,73876,73878],{"class":41,"line":17965},[39,73866,62914],{"class":56},[39,73868,52491],{"class":45},[39,73870,29178],{"class":56},[39,73872,73873],{"class":56}," linear",[39,73875,62921],{"class":56},[39,73877,392],{"class":49},[39,73879,2359],{"class":45},[39,73881,73882],{"class":41,"line":17970},[39,73883,3245],{"class":45},[39,73885,73886],{"class":41,"line":17983},[39,73887,3458],{"emptyLinePlaceholder":1145},[39,73889,73890,73893,73895,73897],{"class":41,"line":17988},[39,73891,73892],{"class":52354},"    tbody",[39,73894,71198],{"class":52354},[39,73896,61994],{"class":3021},[39,73898,16628],{"class":45},[39,73900,73901,73903,73905,73907,73909,73911,73913,73915,73917,73919],{"class":41,"line":33688},[39,73902,55938],{"class":56},[39,73904,52491],{"class":45},[39,73906,73377],{"class":56},[39,73908,1221],{"class":45},[39,73910,73634],{"class":56},[39,73912,13491],{"class":45},[39,73914,73639],{"class":56},[39,73916,13491],{"class":45},[39,73918,73639],{"class":56},[39,73920,3777],{"class":45},[39,73922,73923,73925,73927,73929],{"class":41,"line":33694},[39,73924,63079],{"class":56},[39,73926,52491],{"class":45},[39,73928,63084],{"class":56},[39,73930,2359],{"class":45},[39,73932,73933],{"class":41,"line":33700},[39,73934,3245],{"class":45},[39,73936,73937],{"class":41,"line":33706},[39,73938,3458],{"emptyLinePlaceholder":1145},[39,73940,73941,73943,73945,73948,73950],{"class":41,"line":33712},[39,73942,73892],{"class":52354},[39,73944,71198],{"class":52354},[39,73946,73947],{"class":52354}," td",[39,73949,2464],{"class":52354},[39,73951,16628],{"class":45},[39,73953,73954,73956,73958,73960],{"class":41,"line":33723},[39,73955,56063],{"class":56},[39,73957,52491],{"class":45},[39,73959,61923],{"class":56},[39,73961,2359],{"class":45},[39,73963,73964,73966,73968,73970,73972],{"class":41,"line":33729},[39,73965,55825],{"class":56},[39,73967,52491],{"class":45},[39,73969,2105],{"class":56},[39,73971,52546],{"class":49},[39,73973,2359],{"class":45},[39,73975,73976,73978,73980,73982,73984],{"class":41,"line":33749},[39,73977,55839],{"class":56},[39,73979,52491],{"class":45},[39,73981,2023],{"class":56},[39,73983,52546],{"class":49},[39,73985,2359],{"class":45},[39,73987,73988,73990,73992,73994,73996],{"class":41,"line":33755},[39,73989,58413],{"class":56},[39,73991,52491],{"class":45},[39,73993,2023],{"class":56},[39,73995,52546],{"class":49},[39,73997,2359],{"class":45},[39,73999,74000,74002,74004,74006,74008],{"class":41,"line":33766},[39,74001,63131],{"class":56},[39,74003,52491],{"class":45},[39,74005,63],{"class":56},[39,74007,52546],{"class":49},[39,74009,2359],{"class":45},[39,74011,74012,74014,74016,74018],{"class":41,"line":33772},[39,74013,58470],{"class":56},[39,74015,52491],{"class":45},[39,74017,61896],{"class":56},[39,74019,2359],{"class":45},[39,74021,74022,74024,74026,74028],{"class":41,"line":33778},[39,74023,58340],{"class":56},[39,74025,52491],{"class":45},[39,74027,52646],{"class":56},[39,74029,2359],{"class":45},[39,74031,74032,74034,74036,74038],{"class":41,"line":33784},[39,74033,65024],{"class":56},[39,74035,52491],{"class":45},[39,74037,55791],{"class":56},[39,74039,2359],{"class":45},[39,74041,74042,74044,74046,74049],{"class":41,"line":33790},[39,74043,55938],{"class":56},[39,74045,52491],{"class":45},[39,74047,74048],{"class":56},"orange",[39,74050,2359],{"class":45},[39,74052,74053,74055,74057,74060,74062],{"class":41,"line":33796},[39,74054,56188],{"class":56},[39,74056,52491],{"class":45},[39,74058,74059],{"class":56},"12.5",[39,74061,52546],{"class":49},[39,74063,2359],{"class":45},[39,74065,74066],{"class":41,"line":33802},[39,74067,3245],{"class":45},[39,74069,74070,74072,74074],{"class":41,"line":33808},[39,74071,53471],{"class":45},[39,74073,1133],{"class":52354},[39,74075,52361],{"class":45},[39,74077,74078,74080,74082],{"class":41,"line":33828},[39,74079,52839],{"class":45},[39,74081,52388],{"class":52354},[39,74083,52361],{"class":45},[39,74085,74086],{"class":41,"line":33834},[39,74087,3458],{"emptyLinePlaceholder":1145},[39,74089,74090,74092,74094],{"class":41,"line":33850},[39,74091,2108],{"class":45},[39,74093,52854],{"class":52354},[39,74095,52361],{"class":45},[39,74097,74098,74100,74102,74105,74107],{"class":41,"line":33856},[39,74099,53198],{"class":45},[39,74101,14],{"class":52354},[39,74103,74104],{"class":45},">学生就业统计表\u003C\u002F",[39,74106,14],{"class":52354},[39,74108,52361],{"class":45},[39,74110,74111,74113,74115,74117,74119,74121,74123,74125,74127],{"class":41,"line":33870},[39,74112,53198],{"class":45},[39,74114,67679],{"class":52354},[39,74116,54540],{"class":3021},[39,74118,50],{"class":45},[39,74120,63718],{"class":1319},[39,74122,70124],{"class":3021},[39,74124,50],{"class":45},[39,74126,32831],{"class":1319},[39,74128,52361],{"class":45},[39,74130,74131,74133,74135,74137,74139,74141,74143,74145,74147,74149,74151,74154,74156,74158,74160],{"class":41,"line":33876},[39,74132,52395],{"class":45},[39,74134,54875],{"class":52354},[39,74136,54878],{"class":3021},[39,74138,50],{"class":45},[39,74140,63753],{"class":1319},[39,74142,15976],{"class":3021},[39,74144,50],{"class":45},[39,74146,70150],{"class":1319},[39,74148,62074],{"class":3021},[39,74150,50],{"class":45},[39,74152,74153],{"class":1319},"\"姓名\"",[39,74155,54540],{"class":3021},[39,74157,50],{"class":45},[39,74159,70150],{"class":1319},[39,74161,52361],{"class":45},[39,74163,74164,74166,74168,74170,74172,74174,74176,74178,74180,74182,74184,74187,74189,74191,74193],{"class":41,"line":33891},[39,74165,52395],{"class":45},[39,74167,54875],{"class":52354},[39,74169,54878],{"class":3021},[39,74171,50],{"class":45},[39,74173,63753],{"class":1319},[39,74175,15976],{"class":3021},[39,74177,50],{"class":45},[39,74179,70178],{"class":1319},[39,74181,62074],{"class":3021},[39,74183,50],{"class":45},[39,74185,74186],{"class":1319},"\"年龄\"",[39,74188,54540],{"class":3021},[39,74190,50],{"class":45},[39,74192,70178],{"class":1319},[39,74194,52361],{"class":45},[39,74196,74197,74199,74201,74203,74205,74207,74209,74211,74213,74215,74217,74220,74222,74224,74226],{"class":41,"line":33897},[39,74198,52395],{"class":45},[39,74200,54875],{"class":52354},[39,74202,54878],{"class":3021},[39,74204,50],{"class":45},[39,74206,63753],{"class":1319},[39,74208,15976],{"class":3021},[39,74210,50],{"class":45},[39,74212,70280],{"class":1319},[39,74214,62074],{"class":3021},[39,74216,50],{"class":45},[39,74218,74219],{"class":1319},"\"薪资\"",[39,74221,54540],{"class":3021},[39,74223,50],{"class":45},[39,74225,70280],{"class":1319},[39,74227,52361],{"class":45},[39,74229,74230,74232,74234,74236,74238,74240,74242,74244,74246,74248,74250,74252],{"class":41,"line":33906},[39,74231,52395],{"class":45},[39,74233,70198],{"class":52354},[39,74235,15976],{"class":3021},[39,74237,50],{"class":45},[39,74239,70205],{"class":1319},[39,74241,16015],{"class":3021},[39,74243,50],{"class":45},[39,74245,8708],{"class":1319},[39,74247,54540],{"class":3021},[39,74249,50],{"class":45},[39,74251,70205],{"class":1319},[39,74253,52361],{"class":45},[39,74255,74256,74258,74260,74262,74264,74266,74268,74270],{"class":41,"line":33912},[39,74257,56288],{"class":45},[39,74259,70220],{"class":52354},[39,74261,67705],{"class":3021},[39,74263,50],{"class":45},[39,74265,11017],{"class":1319},[39,74267,70229],{"class":45},[39,74269,70220],{"class":52354},[39,74271,52361],{"class":45},[39,74273,74274,74276,74278,74280,74282,74284,74286,74288],{"class":41,"line":33921},[39,74275,56288],{"class":45},[39,74277,70220],{"class":52354},[39,74279,67705],{"class":3021},[39,74281,50],{"class":45},[39,74283,11086],{"class":1319},[39,74285,70248],{"class":45},[39,74287,70220],{"class":52354},[39,74289,52361],{"class":45},[39,74291,74292,74294,74296],{"class":41,"line":33927},[39,74293,52830],{"class":45},[39,74295,70198],{"class":52354},[39,74297,52361],{"class":45},[39,74299,74300,74302,74304,74306,74308,74310,74312,74314,74316,74318,74320,74322],{"class":41,"line":33933},[39,74301,52395],{"class":45},[39,74303,70198],{"class":52354},[39,74305,15976],{"class":3021},[39,74307,50],{"class":45},[39,74309,70302],{"class":1319},[39,74311,16015],{"class":3021},[39,74313,50],{"class":45},[39,74315,8708],{"class":1319},[39,74317,54540],{"class":3021},[39,74319,50],{"class":45},[39,74321,70302],{"class":1319},[39,74323,52361],{"class":45},[39,74325,74326,74328,74330,74332,74334,74336,74338,74340],{"class":41,"line":33942},[39,74327,56288],{"class":45},[39,74329,70220],{"class":52354},[39,74331,67705],{"class":3021},[39,74333,50],{"class":45},[39,74335,70323],{"class":1319},[39,74337,70326],{"class":45},[39,74339,70220],{"class":52354},[39,74341,52361],{"class":45},[39,74343,74344,74346,74348,74350,74352,74354,74356,74358],{"class":41,"line":33948},[39,74345,56288],{"class":45},[39,74347,70220],{"class":52354},[39,74349,67705],{"class":3021},[39,74351,50],{"class":45},[39,74353,70343],{"class":1319},[39,74355,70346],{"class":45},[39,74357,70220],{"class":52354},[39,74359,52361],{"class":45},[39,74361,74362,74364,74366,74368,74370,74372,74374,74376],{"class":41,"line":33959},[39,74363,56288],{"class":45},[39,74365,70220],{"class":52354},[39,74367,67705],{"class":3021},[39,74369,50],{"class":45},[39,74371,70363],{"class":1319},[39,74373,70366],{"class":45},[39,74375,70220],{"class":52354},[39,74377,52361],{"class":45},[39,74379,74380,74382,74384,74386,74388,74390,74392,74394],{"class":41,"line":33965},[39,74381,56288],{"class":45},[39,74383,70220],{"class":52354},[39,74385,67705],{"class":3021},[39,74387,50],{"class":45},[39,74389,70383],{"class":1319},[39,74391,70386],{"class":45},[39,74393,70220],{"class":52354},[39,74395,52361],{"class":45},[39,74397,74398,74400,74402,74404,74406,74408,74410,74412],{"class":41,"line":33984},[39,74399,56288],{"class":45},[39,74401,70220],{"class":52354},[39,74403,67705],{"class":3021},[39,74405,50],{"class":45},[39,74407,70403],{"class":1319},[39,74409,70406],{"class":45},[39,74411,70220],{"class":52354},[39,74413,52361],{"class":45},[39,74415,74416,74418,74420],{"class":41,"line":33990},[39,74417,52830],{"class":45},[39,74419,70198],{"class":52354},[39,74421,52361],{"class":45},[39,74423,74424,74426,74428],{"class":41,"line":34001},[39,74425,52395],{"class":45},[39,74427,54941],{"class":52354},[39,74429,52361],{"class":45},[39,74431,74432,74434,74436,74439,74441,74444,74446],{"class":41,"line":34007},[39,74433,56288],{"class":45},[39,74435,39],{"class":52354},[39,74437,74438],{"class":45},">+\u003C\u002F",[39,74440,39],{"class":52354},[39,74442,74443],{"class":45},">添加\u003C\u002F",[39,74445,54941],{"class":52354},[39,74447,52361],{"class":45},[39,74449,74450,74452,74454],{"class":41,"line":34027},[39,74451,53471],{"class":45},[39,74453,67679],{"class":52354},[39,74455,52361],{"class":45},[39,74457,74458,74460,74462,74464,74466,74468,74471,74473,74476,74478,74481,74483],{"class":41,"line":34043},[39,74459,53198],{"class":45},[39,74461,52665],{"class":52354},[39,74463,54540],{"class":3021},[39,74465,50],{"class":45},[39,74467,63634],{"class":1319},[39,74469,74470],{"class":45},">共有数据 \u003C",[39,74472,39],{"class":52354},[39,74474,74475],{"class":45},">0\u003C\u002F",[39,74477,39],{"class":52354},[39,74479,74480],{"class":45},"> 条\u003C\u002F",[39,74482,52665],{"class":52354},[39,74484,52361],{"class":45},[39,74486,74487,74489,74491],{"class":41,"line":34049},[39,74488,53198],{"class":45},[39,74490,1352],{"class":52354},[39,74492,52361],{"class":45},[39,74494,74495,74497,74499],{"class":41,"line":34063},[39,74496,52395],{"class":45},[39,74498,1355],{"class":52354},[39,74500,52361],{"class":45},[39,74502,74503,74505,74507],{"class":41,"line":34069},[39,74504,56288],{"class":45},[39,74506,1358],{"class":52354},[39,74508,52361],{"class":45},[39,74510,74511,74513,74515,74518,74520],{"class":41,"line":34075},[39,74512,56356],{"class":45},[39,74514,1361],{"class":52354},[39,74516,74517],{"class":45},">ID\u003C\u002F",[39,74519,1361],{"class":52354},[39,74521,52361],{"class":45},[39,74523,74524,74526,74528,74530,74532],{"class":41,"line":34086},[39,74525,56356],{"class":45},[39,74527,1361],{"class":52354},[39,74529,70509],{"class":45},[39,74531,1361],{"class":52354},[39,74533,52361],{"class":45},[39,74535,74536,74538,74540,74542,74544],{"class":41,"line":34092},[39,74537,56356],{"class":45},[39,74539,1361],{"class":52354},[39,74541,70522],{"class":45},[39,74543,1361],{"class":52354},[39,74545,52361],{"class":45},[39,74547,74548,74550,74552,74554,74556],{"class":41,"line":34098},[39,74549,56356],{"class":45},[39,74551,1361],{"class":52354},[39,74553,70535],{"class":45},[39,74555,1361],{"class":52354},[39,74557,52361],{"class":45},[39,74559,74560,74562,74564,74566,74568],{"class":41,"line":34108},[39,74561,56356],{"class":45},[39,74563,1361],{"class":52354},[39,74565,70548],{"class":45},[39,74567,1361],{"class":52354},[39,74569,52361],{"class":45},[39,74571,74572,74574,74576,74578,74580],{"class":41,"line":34114},[39,74573,56356],{"class":45},[39,74575,1361],{"class":52354},[39,74577,70561],{"class":45},[39,74579,1361],{"class":52354},[39,74581,52361],{"class":45},[39,74583,74584,74586,74588,74591,74593],{"class":41,"line":34125},[39,74585,56356],{"class":45},[39,74587,1361],{"class":52354},[39,74589,74590],{"class":45},">录入时间\u003C\u002F",[39,74592,1361],{"class":52354},[39,74594,52361],{"class":45},[39,74596,74597,74599,74601,74603,74605],{"class":41,"line":34131},[39,74598,56356],{"class":45},[39,74600,1361],{"class":52354},[39,74602,70574],{"class":45},[39,74604,1361],{"class":52354},[39,74606,52361],{"class":45},[39,74608,74609,74611,74613],{"class":41,"line":34141},[39,74610,56461],{"class":45},[39,74612,1358],{"class":52354},[39,74614,52361],{"class":45},[39,74616,74617,74619,74621],{"class":41,"line":34146},[39,74618,52830],{"class":45},[39,74620,1355],{"class":52354},[39,74622,52361],{"class":45},[39,74624,74625,74627,74629],{"class":41,"line":34152},[39,74626,52395],{"class":45},[39,74628,1398],{"class":52354},[39,74630,52361],{"class":45},[39,74632,74633],{"class":41,"line":34201},[39,74634,74635],{"class":102},"      \u003C!-- \u003Ctr>\n",[39,74637,74638],{"class":41,"line":34248},[39,74639,74640],{"class":102},"        \u003Ctd>1\u003C\u002Ftd>\n",[39,74642,74643],{"class":41,"line":34253},[39,74644,74640],{"class":102},[39,74646,74647],{"class":41,"line":34259},[39,74648,74640],{"class":102},[39,74650,74651],{"class":41,"line":34278},[39,74652,74640],{"class":102},[39,74654,74655],{"class":41,"line":34284},[39,74656,74640],{"class":102},[39,74658,74659],{"class":41,"line":34304},[39,74660,74640],{"class":102},[39,74662,74663],{"class":41,"line":34310},[39,74664,74640],{"class":102},[39,74666,74667],{"class":41,"line":34316},[39,74668,74669],{"class":102},"        \u003Ctd>\n",[39,74671,74672],{"class":41,"line":34326},[39,74673,74674],{"class":102},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[39,74676,74677],{"class":41,"line":34331},[39,74678,74679],{"class":102},"        \u003C\u002Ftd>\n",[39,74681,74682],{"class":41,"line":34337},[39,74683,74684],{"class":102},"      \u003C\u002Ftr> -->\n",[39,74686,74687,74689,74691],{"class":41,"line":34353},[39,74688,52830],{"class":45},[39,74690,1398],{"class":52354},[39,74692,52361],{"class":45},[39,74694,74695,74697,74699],{"class":41,"line":34398},[39,74696,53471],{"class":45},[39,74698,1352],{"class":52354},[39,74700,52361],{"class":45},[39,74702,74703,74705,74707],{"class":41,"line":34404},[39,74704,53198],{"class":45},[39,74706,52867],{"class":52354},[39,74708,52361],{"class":45},[39,74710,74711],{"class":41,"line":34410},[39,74712,74713],{"class":102},"    \u002F\u002F const initData = [{\n",[39,74715,74716],{"class":41,"line":34416},[39,74717,74718],{"class":102},"    \u002F\u002F   unameId: 1,\n",[39,74720,74721],{"class":41,"line":34427},[39,74722,74723],{"class":102},"    \u002F\u002F   uname: '华晨宇',\n",[39,74725,74726],{"class":41,"line":34433},[39,74727,74728],{"class":102},"    \u002F\u002F   age: 22,\n",[39,74730,74731],{"class":41,"line":34439},[39,74732,74733],{"class":102},"    \u002F\u002F   salary: 12000,\n",[39,74735,74736],{"class":41,"line":34445},[39,74737,74738],{"class":102},"    \u002F\u002F   gender: '男',\n",[39,74740,74741],{"class":41,"line":34463},[39,74742,74743],{"class":102},"    \u002F\u002F   city: '北京',\n",[39,74745,74746],{"class":41,"line":34477},[39,74747,74748],{"class":102},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[39,74750,74751],{"class":41,"line":34486},[39,74752,74753],{"class":102},"    \u002F\u002F }]\n",[39,74755,74756],{"class":41,"line":34495},[39,74757,74758],{"class":102},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[39,74760,74761],{"class":41,"line":34504},[39,74762,74763],{"class":102},"    \u002F\u002F 1.渲染业务\n",[39,74765,74766],{"class":41,"line":34513},[39,74767,74768],{"class":102},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[39,74770,74771],{"class":41,"line":34519},[39,74772,74773],{"class":102},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[39,74775,74776],{"class":41,"line":34525},[39,74777,74778],{"class":102},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[39,74780,74781],{"class":41,"line":34533},[39,74782,3458],{"emptyLinePlaceholder":1145},[39,74784,74785],{"class":41,"line":34538},[39,74786,74787],{"class":102},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[39,74789,74790],{"class":41,"line":34544},[39,74791,74792],{"class":102},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[39,74794,74795,74797,74799,74801],{"class":41,"line":34555},[39,74796,12277],{"class":49},[39,74798,58749],{"class":56},[39,74800,14620],{"class":49},[39,74802,52892],{"class":45},[39,74804,74805,74808,74810],{"class":41,"line":34561},[39,74806,74807],{"class":45},"    console.",[39,74809,59301],{"class":3021},[39,74811,53466],{"class":45},[39,74813,74814],{"class":41,"line":34581},[39,74815,3458],{"emptyLinePlaceholder":1145},[39,74817,74818],{"class":41,"line":34587},[39,74819,74820],{"class":102},"    \u002F\u002F 时间函数\n",[39,74822,74823,74825,74828],{"class":41,"line":34593},[39,74824,71138],{"class":49},[39,74826,74827],{"class":3021}," getTime",[39,74829,11909],{"class":45},[39,74831,74832,74834,74837,74839,74841,74844],{"class":41,"line":34599},[39,74833,59282],{"class":49},[39,74835,74836],{"class":56}," date",[39,74838,14620],{"class":49},[39,74840,12634],{"class":49},[39,74842,74843],{"class":3021}," Date",[39,74845,3034],{"class":45},[39,74847,74848,74850,74852,74854,74857,74860,74862,74864,74866,74869,74872,74874,74876,74878,74880,74882,74884,74886],{"class":41,"line":34616},[39,74849,59282],{"class":49},[39,74851,17147],{"class":56},[39,74853,14620],{"class":49},[39,74855,74856],{"class":45}," date.",[39,74858,74859],{"class":3021},"getHours",[39,74861,14106],{"class":45},[39,74863,2108],{"class":49},[39,74865,3096],{"class":56},[39,74867,74868],{"class":49}," ?",[39,74870,74871],{"class":1319}," '0'",[39,74873,46621],{"class":49},[39,74875,74856],{"class":45},[39,74877,74859],{"class":3021},[39,74879,14106],{"class":45},[39,74881,2057],{"class":49},[39,74883,74856],{"class":45},[39,74885,74859],{"class":3021},[39,74887,3034],{"class":45},[39,74889,74890,74892,74895,74897,74899,74902,74904,74906,74908,74910,74912,74914,74916,74918,74920,74922,74924,74926],{"class":41,"line":34622},[39,74891,59282],{"class":49},[39,74893,74894],{"class":56}," m",[39,74896,14620],{"class":49},[39,74898,74856],{"class":45},[39,74900,74901],{"class":3021},"getMinutes",[39,74903,14106],{"class":45},[39,74905,2108],{"class":49},[39,74907,3096],{"class":56},[39,74909,74868],{"class":49},[39,74911,74871],{"class":1319},[39,74913,46621],{"class":49},[39,74915,74856],{"class":45},[39,74917,74901],{"class":3021},[39,74919,14106],{"class":45},[39,74921,2057],{"class":49},[39,74923,74856],{"class":45},[39,74925,74901],{"class":3021},[39,74927,3034],{"class":45},[39,74929,74930,74932,74934,74936,74938,74941,74943,74945,74947,74949,74951,74953,74955,74957,74959,74961,74963,74965],{"class":41,"line":34628},[39,74931,59282],{"class":49},[39,74933,9484],{"class":56},[39,74935,14620],{"class":49},[39,74937,74856],{"class":45},[39,74939,74940],{"class":3021},"getSeconds",[39,74942,14106],{"class":45},[39,74944,2108],{"class":49},[39,74946,3096],{"class":56},[39,74948,74868],{"class":49},[39,74950,74871],{"class":1319},[39,74952,46621],{"class":49},[39,74954,74856],{"class":45},[39,74956,74940],{"class":3021},[39,74958,14106],{"class":45},[39,74960,2057],{"class":49},[39,74962,74856],{"class":45},[39,74964,74940],{"class":3021},[39,74966,3034],{"class":45},[39,74968,74969,74971,74974,74976,74978,74981,74983,74986,74988,74991,74993,74995,74998,75000,75002,75004,75006,75008,75010,75013,75015,75018,75020,75023,75025,75027,75029],{"class":41,"line":34634},[39,74970,59282],{"class":49},[39,74972,74973],{"class":56}," str",[39,74975,14620],{"class":49},[39,74977,63957],{"class":1319},[39,74979,74980],{"class":45},"date",[39,74982,1758],{"class":1319},[39,74984,74985],{"class":3021},"getFullYear",[39,74987,3485],{"class":1319},[39,74989,74990],{"class":1319},"}\u002F${",[39,74992,74980],{"class":45},[39,74994,1758],{"class":1319},[39,74996,74997],{"class":3021},"getMonth",[39,74999,14106],{"class":1319},[39,75001,1682],{"class":49},[39,75003,26175],{"class":56},[39,75005,74990],{"class":1319},[39,75007,74980],{"class":45},[39,75009,1758],{"class":1319},[39,75011,75012],{"class":3021},"getDate",[39,75014,3485],{"class":1319},[39,75016,75017],{"class":1319},"} ${",[39,75019,1618],{"class":45},[39,75021,75022],{"class":1319},"}:${",[39,75024,1744],{"class":45},[39,75026,75022],{"class":1319},[39,75028,392],{"class":45},[39,75030,75031],{"class":1319},"}`\n",[39,75033,75034,75037],{"class":41,"line":34640},[39,75035,75036],{"class":49},"      return",[39,75038,75039],{"class":45}," str\n",[39,75041,75042],{"class":41,"line":34646},[39,75043,3245],{"class":45},[39,75045,75046],{"class":41,"line":34673},[39,75047,75048],{"class":102},"    \u002F\u002F 渲染函数\n",[39,75050,75051,75053,75055,75057,75059,75061,75063,75065],{"class":41,"line":34697},[39,75052,12277],{"class":49},[39,75054,70801],{"class":56},[39,75056,14620],{"class":49},[39,75058,55450],{"class":45},[39,75060,55453],{"class":3021},[39,75062,1221],{"class":45},[39,75064,70812],{"class":1319},[39,75066,209],{"class":45},[39,75068,75069,75071,75073],{"class":41,"line":34703},[39,75070,71138],{"class":49},[39,75072,71141],{"class":3021},[39,75074,11909],{"class":45},[39,75076,75077],{"class":41,"line":34709},[39,75078,75079],{"class":102},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[39,75081,75082],{"class":41,"line":34715},[39,75083,75084],{"class":102},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[39,75086,75087,75089,75092,75094,75096,75099,75101,75103,75105,75108,75110,75113],{"class":41,"line":34726},[39,75088,59282],{"class":49},[39,75090,75091],{"class":56}," trArr",[39,75093,14620],{"class":49},[39,75095,53019],{"class":45},[39,75097,75098],{"class":3021},"map",[39,75100,1221],{"class":45},[39,75102,55503],{"class":49},[39,75104,2716],{"class":45},[39,75106,75107],{"class":254},"ele",[39,75109,13491],{"class":45},[39,75111,75112],{"class":254},"index",[39,75114,13498],{"class":45},[39,75116,75117,75119],{"class":41,"line":34737},[39,75118,15808],{"class":49},[39,75120,71222],{"class":1319},[39,75122,75123],{"class":41,"line":34743},[39,75124,75125],{"class":1319},"      \u003Ctr>\n",[39,75127,75128,75130,75132,75134,75137],{"class":41,"line":34760},[39,75129,71227],{"class":1319},[39,75131,75107],{"class":45},[39,75133,1758],{"class":1319},[39,75135,75136],{"class":45},"unameId",[39,75138,71242],{"class":1319},[39,75140,75141,75143,75145,75147,75149],{"class":41,"line":34783},[39,75142,71227],{"class":1319},[39,75144,75107],{"class":45},[39,75146,1758],{"class":1319},[39,75148,71258],{"class":45},[39,75150,71242],{"class":1319},[39,75152,75153,75155,75157,75159,75161],{"class":41,"line":34806},[39,75154,71227],{"class":1319},[39,75156,75107],{"class":45},[39,75158,1758],{"class":1319},[39,75160,71275],{"class":45},[39,75162,71242],{"class":1319},[39,75164,75165,75167,75169,75171,75173],{"class":41,"line":34812},[39,75166,71227],{"class":1319},[39,75168,75107],{"class":45},[39,75170,1758],{"class":1319},[39,75172,71292],{"class":45},[39,75174,71242],{"class":1319},[39,75176,75177,75179,75181,75183,75185],{"class":41,"line":34817},[39,75178,71227],{"class":1319},[39,75180,75107],{"class":45},[39,75182,1758],{"class":1319},[39,75184,71309],{"class":45},[39,75186,71242],{"class":1319},[39,75188,75189,75191,75193,75195,75197],{"class":41,"line":34826},[39,75190,71227],{"class":1319},[39,75192,75107],{"class":45},[39,75194,1758],{"class":1319},[39,75196,71326],{"class":45},[39,75198,71242],{"class":1319},[39,75200,75201,75203,75205,75207,75209],{"class":41,"line":34836},[39,75202,71227],{"class":1319},[39,75204,75107],{"class":45},[39,75206,1758],{"class":1319},[39,75208,3445],{"class":45},[39,75210,71242],{"class":1319},[39,75212,75213],{"class":41,"line":34842},[39,75214,74669],{"class":1319},[39,75216,75217,75220,75222],{"class":41,"line":34847},[39,75218,75219],{"class":1319},"          \u003Ca href=\"#\" data-id=\"${",[39,75221,75112],{"class":45},[39,75223,75224],{"class":1319},"}\">删除\u003C\u002Fa>\n",[39,75226,75227],{"class":41,"line":34853},[39,75228,74679],{"class":1319},[39,75230,75231],{"class":41,"line":34866},[39,75232,75233],{"class":1319},"      \u003C\u002Ftr>\n",[39,75235,75236],{"class":41,"line":34872},[39,75237,75238],{"class":1319},"  `\n",[39,75240,75241],{"class":41,"line":34883},[39,75242,65869],{"class":45},[39,75244,75245,75247,75249],{"class":41,"line":34894},[39,75246,59298],{"class":45},[39,75248,59301],{"class":3021},[39,75250,75251],{"class":45},"(trArr)\n",[39,75253,75254],{"class":41,"line":34913},[39,75255,3458],{"emptyLinePlaceholder":1145},[39,75257,75258],{"class":41,"line":50572},[39,75259,75260],{"class":102},"      \u002F\u002F (2) 把数组转换为字符串join\n",[39,75262,75263],{"class":41,"line":50577},[39,75264,75265],{"class":102},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[39,75267,75268,75270,75272,75275,75278,75280,75283],{"class":41,"line":50586},[39,75269,71153],{"class":45},[39,75271,50],{"class":49},[39,75273,75274],{"class":45}," trArr.",[39,75276,75277],{"class":3021},"join",[39,75279,1221],{"class":45},[39,75281,75282],{"class":1319},"''",[39,75284,209],{"class":45},[39,75286,75287],{"class":41,"line":50595},[39,75288,75289],{"class":102},"      \u002F\u002F 显示共有几条\n",[39,75291,75292,75294,75296,75298,75301,75304,75306,75308],{"class":41,"line":50600},[39,75293,56825],{"class":45},[39,75295,55453],{"class":3021},[39,75297,1221],{"class":45},[39,75299,75300],{"class":1319},"'.total span'",[39,75302,75303],{"class":45},").innerHTML ",[39,75305,50],{"class":49},[39,75307,53019],{"class":45},[39,75309,56885],{"class":56},[39,75311,75312],{"class":41,"line":50605},[39,75313,3245],{"class":45},[39,75315,75316],{"class":41,"line":50610},[39,75317,75318],{"class":102},"    \u002F\u002F render()\n",[39,75320,75321],{"class":41,"line":50623},[39,75322,3458],{"emptyLinePlaceholder":1145},[39,75324,75325],{"class":41,"line":50628},[39,75326,75327],{"class":102},"    \u002F\u002F 获取DOM对象\n",[39,75329,75330,75332,75334,75336,75338,75340,75342,75344],{"class":41,"line":50637},[39,75331,12277],{"class":49},[39,75333,70875],{"class":56},[39,75335,14620],{"class":49},[39,75337,55450],{"class":45},[39,75339,55453],{"class":3021},[39,75341,1221],{"class":45},[39,75343,70886],{"class":1319},[39,75345,209],{"class":45},[39,75347,75348,75350,75352,75354,75356,75358,75360,75362],{"class":41,"line":50646},[39,75349,12277],{"class":49},[39,75351,70702],{"class":56},[39,75353,14620],{"class":49},[39,75355,55450],{"class":45},[39,75357,55453],{"class":3021},[39,75359,1221],{"class":45},[39,75361,70713],{"class":1319},[39,75363,209],{"class":45},[39,75365,75366,75368,75370,75372,75374,75376,75378,75380],{"class":41,"line":50663},[39,75367,12277],{"class":49},[39,75369,16745],{"class":56},[39,75371,14620],{"class":49},[39,75373,55450],{"class":45},[39,75375,55453],{"class":3021},[39,75377,1221],{"class":45},[39,75379,70732],{"class":1319},[39,75381,209],{"class":45},[39,75383,75385,75387,75389,75391,75393,75395,75397,75399],{"class":41,"line":75384},231,[39,75386,12277],{"class":49},[39,75388,70761],{"class":56},[39,75390,14620],{"class":49},[39,75392,55450],{"class":45},[39,75394,55453],{"class":3021},[39,75396,1221],{"class":45},[39,75398,70772],{"class":1319},[39,75400,209],{"class":45},[39,75402,75404,75406,75408,75410,75412,75414,75416,75418],{"class":41,"line":75403},232,[39,75405,12277],{"class":49},[39,75407,70741],{"class":56},[39,75409,14620],{"class":49},[39,75411,55450],{"class":45},[39,75413,55453],{"class":3021},[39,75415,1221],{"class":45},[39,75417,70752],{"class":1319},[39,75419,209],{"class":45},[39,75421,75423,75425,75427,75429,75431,75433,75435,75437],{"class":41,"line":75422},233,[39,75424,12277],{"class":49},[39,75426,70781],{"class":56},[39,75428,14620],{"class":49},[39,75430,55450],{"class":45},[39,75432,55453],{"class":3021},[39,75434,1221],{"class":45},[39,75436,70792],{"class":1319},[39,75438,209],{"class":45},[39,75440,75442],{"class":41,"line":75441},234,[39,75443,3458],{"emptyLinePlaceholder":1145},[39,75445,75447],{"class":41,"line":75446},235,[39,75448,75449],{"class":102},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[39,75451,75453,75455,75457,75459,75461,75463,75465,75467,75469],{"class":41,"line":75452},236,[39,75454,70893],{"class":45},[39,75456,58867],{"class":3021},[39,75458,1221],{"class":45},[39,75460,70900],{"class":1319},[39,75462,13491],{"class":45},[39,75464,55503],{"class":49},[39,75466,2716],{"class":45},[39,75468,1290],{"class":254},[39,75470,13498],{"class":45},[39,75472,75474],{"class":41,"line":75473},237,[39,75475,75476],{"class":102},"      \u002F\u002F 禁止浏览器跳转\n",[39,75478,75480,75482,75484],{"class":41,"line":75479},238,[39,75481,70920],{"class":45},[39,75483,70923],{"class":3021},[39,75485,3034],{"class":45},[39,75487,75489],{"class":41,"line":75488},239,[39,75490,75491],{"class":102},"      \u002F\u002F 非空判断\n",[39,75493,75495],{"class":41,"line":75494},240,[39,75496,75497],{"class":102},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[39,75499,75501],{"class":41,"line":75500},241,[39,75502,75503],{"class":102},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[39,75505,75507,75509,75511,75513,75516,75518,75521,75524,75526,75528],{"class":41,"line":75506},242,[39,75508,55534],{"class":49},[39,75510,2716],{"class":45},[39,75512,1438],{"class":49},[39,75514,75515],{"class":45},"uname.value ",[39,75517,72411],{"class":49},[39,75519,75520],{"class":49}," !",[39,75522,75523],{"class":45},"age.value ",[39,75525,72411],{"class":49},[39,75527,75520],{"class":49},[39,75529,75530],{"class":45},"salary.value) {\n",[39,75532,75534,75536,75538,75540,75542],{"class":41,"line":75533},243,[39,75535,15808],{"class":49},[39,75537,70994],{"class":3021},[39,75539,1221],{"class":45},[39,75541,70999],{"class":1319},[39,75543,209],{"class":45},[39,75545,75547],{"class":41,"line":75546},244,[39,75548,53452],{"class":45},[39,75550,75552,75554,75556],{"class":41,"line":75551},245,[39,75553,59061],{"class":45},[39,75555,52938],{"class":3021},[39,75557,75558],{"class":45},"({\n",[39,75560,75562],{"class":41,"line":75561},246,[39,75563,75564],{"class":102},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[39,75566,75568],{"class":41,"line":75567},247,[39,75569,75570],{"class":102},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[39,75572,75574],{"class":41,"line":75573},248,[39,75575,75576],{"class":102},"        \u002F\u002F 对象的序号应为数组长度+1\n",[39,75578,75580],{"class":41,"line":75579},249,[39,75581,75582],{"class":102},"        \u002F\u002F unameId: arr.length + 1,\n",[39,75584,75586],{"class":41,"line":75585},250,[39,75587,3458],{"emptyLinePlaceholder":1145},[39,75589,75591],{"class":41,"line":75590},251,[39,75592,75593],{"class":102},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[39,75595,75597],{"class":41,"line":75596},252,[39,75598,75599],{"class":102},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[39,75601,75603],{"class":41,"line":75602},253,[39,75604,75605],{"class":102},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[39,75607,75609],{"class":41,"line":75608},254,[39,75610,75611],{"class":102},"        \u002F\u002F 0当假看\n",[39,75613,75615,75618,75620,75622,75625,75627,75629,75631,75634,75636,75638,75641,75643],{"class":41,"line":75614},255,[39,75616,75617],{"class":45},"        unameId: arr.",[39,75619,53022],{"class":56},[39,75621,74868],{"class":49},[39,75623,75624],{"class":45}," arr[arr.",[39,75626,53022],{"class":56},[39,75628,53325],{"class":49},[39,75630,26175],{"class":56},[39,75632,75633],{"class":45},"].unameId ",[39,75635,1682],{"class":49},[39,75637,26175],{"class":56},[39,75639,75640],{"class":49}," :",[39,75642,26175],{"class":56},[39,75644,32521],{"class":45},[39,75646,75648],{"class":41,"line":75647},256,[39,75649,71047],{"class":45},[39,75651,75653],{"class":41,"line":75652},257,[39,75654,71052],{"class":45},[39,75656,75658],{"class":41,"line":75657},258,[39,75659,71062],{"class":45},[39,75661,75663],{"class":41,"line":75662},259,[39,75664,71057],{"class":45},[39,75666,75668],{"class":41,"line":75667},260,[39,75669,75670],{"class":45},"        city: city.value,\n",[39,75672,75674],{"class":41,"line":75673},261,[39,75675,75676],{"class":102},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[39,75678,75680],{"class":41,"line":75679},262,[39,75681,75682],{"class":102},"        \u002F\u002F time: new Date().toDateString()\n",[39,75684,75686,75689,75692],{"class":41,"line":75685},263,[39,75687,75688],{"class":45},"        time: ",[39,75690,75691],{"class":3021},"getTime",[39,75693,3034],{"class":45},[39,75695,75697],{"class":41,"line":75696},264,[39,75698,65869],{"class":45},[39,75700,75702],{"class":41,"line":75701},265,[39,75703,75704],{"class":102},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[39,75706,75708,75710],{"class":41,"line":75707},266,[39,75709,71122],{"class":3021},[39,75711,3034],{"class":45},[39,75713,75715,75717,75719,75721,75723],{"class":41,"line":75714},267,[39,75716,71105],{"class":56},[39,75718,1758],{"class":45},[39,75720,71110],{"class":3021},[39,75722,14106],{"class":45},[39,75724,75725],{"class":102},"\u002F\u002F重置表单\n",[39,75727,75729],{"class":41,"line":75728},268,[39,75730,75731],{"class":102},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[39,75733,75735,75738,75740,75742,75745,75747,75749,75751,75753],{"class":41,"line":75734},269,[39,75736,75737],{"class":45},"      localStorage.",[39,75739,72708],{"class":3021},[39,75741,1221],{"class":45},[39,75743,75744],{"class":1319},"'data'",[39,75746,13491],{"class":45},[39,75748,72718],{"class":56},[39,75750,1758],{"class":45},[39,75752,72723],{"class":3021},[39,75754,75755],{"class":45},"(arr))\n",[39,75757,75759],{"class":41,"line":75758},270,[39,75760,34516],{"class":45},[39,75762,75764],{"class":41,"line":75763},271,[39,75765,3458],{"emptyLinePlaceholder":1145},[39,75767,75769],{"class":41,"line":75768},272,[39,75770,75771],{"class":102},"    \u002F\u002F 3.删除业务\n",[39,75773,75775],{"class":41,"line":75774},273,[39,75776,75777],{"class":102},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[39,75779,75781,75783,75785,75787,75789,75791,75793,75795,75797],{"class":41,"line":75780},274,[39,75782,71395],{"class":45},[39,75784,58867],{"class":3021},[39,75786,1221],{"class":45},[39,75788,58872],{"class":1319},[39,75790,13491],{"class":45},[39,75792,55503],{"class":49},[39,75794,2716],{"class":45},[39,75796,1290],{"class":254},[39,75798,13498],{"class":45},[39,75800,75802],{"class":41,"line":75801},275,[39,75803,75804],{"class":102},"      \u002F\u002F 判断是否点击的是删除按钮\n",[39,75806,75808,75810,75812,75814,75816],{"class":41,"line":75807},276,[39,75809,55534],{"class":49},[39,75811,68088],{"class":45},[39,75813,55540],{"class":49},[39,75815,69310],{"class":1319},[39,75817,13498],{"class":45},[39,75819,75821],{"class":41,"line":75820},277,[39,75822,75823],{"class":102},"        \u002F\u002F alert(1)\n",[39,75825,75827],{"class":41,"line":75826},278,[39,75828,75829],{"class":102},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[39,75831,75833],{"class":41,"line":75832},279,[39,75834,75835],{"class":102},"        \u002F\u002F console.log(e.target)\n",[39,75837,75839],{"class":41,"line":75838},280,[39,75840,75841],{"class":102},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[39,75843,75845],{"class":41,"line":75844},281,[39,75846,3458],{"emptyLinePlaceholder":1145},[39,75848,75850],{"class":41,"line":75849},282,[39,75851,75852],{"class":102},"        \u002F\u002F 确认框，确然是否真的要删除\n",[39,75854,75856],{"class":41,"line":75855},283,[39,75857,75858],{"class":102},"        \u002F\u002F confirm()为确认框\n",[39,75860,75862],{"class":41,"line":75861},284,[39,75863,75864],{"class":102},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[39,75866,75868,75870,75872,75875,75877,75880],{"class":41,"line":75867},285,[39,75869,3555],{"class":49},[39,75871,2716],{"class":45},[39,75873,75874],{"class":3021},"confirm",[39,75876,1221],{"class":45},[39,75878,75879],{"class":1319},"'您确定要删除这条数据吗？'",[39,75881,75882],{"class":45},")) {\n",[39,75884,75886,75889,75891,75893,75895],{"class":41,"line":75885},286,[39,75887,75888],{"class":45},"          arr.",[39,75890,59064],{"class":3021},[39,75892,71448],{"class":45},[39,75894,57],{"class":56},[39,75896,209],{"class":45},[39,75898,75900],{"class":41,"line":75899},287,[39,75901,75902],{"class":102},"          \u002F\u002F 3.4 重新渲染页面\n",[39,75904,75906,75909],{"class":41,"line":75905},288,[39,75907,75908],{"class":3021},"          render",[39,75910,3034],{"class":45},[39,75912,75914],{"class":41,"line":75913},289,[39,75915,75916],{"class":102},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[39,75918,75920,75923,75925,75927,75929,75931,75933,75935,75937],{"class":41,"line":75919},290,[39,75921,75922],{"class":45},"          localStorage.",[39,75924,72708],{"class":3021},[39,75926,1221],{"class":45},[39,75928,75744],{"class":1319},[39,75930,13491],{"class":45},[39,75932,72718],{"class":56},[39,75934,1758],{"class":45},[39,75936,72723],{"class":3021},[39,75938,75755],{"class":45},[39,75940,75942],{"class":41,"line":75941},291,[39,75943,3587],{"class":45},[39,75945,75947],{"class":41,"line":75946},292,[39,75948,53452],{"class":45},[39,75950,75952],{"class":41,"line":75951},293,[39,75953,3458],{"emptyLinePlaceholder":1145},[39,75955,75957],{"class":41,"line":75956},294,[39,75958,34516],{"class":45},[39,75960,75962],{"class":41,"line":75961},295,[39,75963,3458],{"emptyLinePlaceholder":1145},[39,75965,75967,75969,75971],{"class":41,"line":75966},296,[39,75968,53471],{"class":45},[39,75970,52867],{"class":52354},[39,75972,52361],{"class":45},[39,75974,75976,75978,75980],{"class":41,"line":75975},297,[39,75977,52839],{"class":45},[39,75979,52854],{"class":52354},[39,75981,52361],{"class":45},[39,75983,75985],{"class":41,"line":75984},298,[39,75986,3458],{"emptyLinePlaceholder":1145},[39,75988,75990,75992,75994],{"class":41,"line":75989},299,[39,75991,52839],{"class":45},[39,75993,51689],{"class":52354},[39,75995,52361],{"class":45},[14,75997,75999],{"id":75998},"_36-正则表达式","3.6 正则表达式",[19,76001,76002],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76004,76005],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76007,76008],{},"正则表达式的作用：",[2205,76010,76011,76018,76024],{},[1174,76012,76013,76014,76017],{},"表单验证（ ",[304,76015,76016],{},"匹配"," ）",[1174,76019,76020,76021,76017],{},"过滤敏感词（ ",[304,76022,76023],{},"替换",[1174,76025,76026,76027,76017],{},"字符串中提取我们想要的部分（ ",[304,76028,76029],{},"提取",[1188,76031,76033],{"id":76032},"_361-语法","3.6.1 语法",[19,76035,76036],{},"正则表达式使用步骤：",[1171,76038,76039,76042],{},[1174,76040,76041],{},"定义规则",[1174,76043,76044],{},"查找是否匹配",[19,76046,76047],{},"正则表达式里边不需要写引号",[19,76049,76050],{},[269,76051],{"alt":34,"src":76052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76054,76055],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76057,76058],{},"reg.test(str)",[19,76060,76061],{},[269,76062],{"alt":34,"src":76063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76065,76066],{},[269,76067],{"alt":34,"src":76068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[1188,76070,76072],{"id":76071},"_362-元字符","3.6.2 元字符",[1171,76074,76075,76078,76081,76084,76091],{},[1174,76076,76077],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[1174,76079,76080],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[1174,76082,76083],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[1174,76085,76086,76087],{},"正则验证工具：",[46,76088,76089],{"href":76089,"rel":76090},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24921],[1174,76092,76093],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23054,76095,76097],{"id":76096},"_3621-边界符","3.6.2.1 边界符",[19,76099,76100],{},[269,76101],{"alt":34,"src":76102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,76104,76105],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,76107,76108],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,76110,76111],{},"只匹配一次",[19,76113,76114],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23054,76116,76118],{"id":76117},"_3622-量词","3.6.2.2 量词",[19,76120,76121],{},[269,76122],{"alt":34,"src":76123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,76125,76126],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23054,76128,76130],{"id":76129},"_3623-元字符","3.6.2.3 元字符",[19,76132,76133],{},[269,76134],{"alt":34,"src":76135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,76137,76138],{},"匹配的是a或b或c []只选一个",[19,76140,76141],{},[269,76142],{"alt":34,"src":76143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,76145,76146],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,76148,76149],{},[269,76150],{"alt":34,"src":76151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,76153,76154],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,76156,76157],{},[269,76158],{"alt":34,"src":76159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[29,76161,76163],{"className":51687,"code":76162,"language":51689,"meta":34,"style":34},"\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",[36,76164,76165,76175,76189,76193,76201,76215,76235,76247,76255,76259,76267,76275,76280,76311,76338,76366,76370,76375,76403,76434,76439,76444,76475,76507,76539,76543,76548,76579,76609,76639,76643,76648,76679,76710,76740,76770,76774,76779,76812,76816,76821,76852,76883,76887,76892,76923,76953,76984,76988,76993,77025,77056,77087,77114,77145,77177,77210,77241,77272,77304,77335,77343,77351,77355],{"__ignoreMap":34},[39,76166,76167,76169,76171,76173],{"class":41,"line":42},[39,76168,52351],{"class":45},[39,76170,52355],{"class":52354},[39,76172,52358],{"class":3021},[39,76174,52361],{"class":45},[39,76176,76177,76179,76181,76183,76185,76187],{"class":41,"line":74},[39,76178,2108],{"class":45},[39,76180,51689],{"class":52354},[39,76182,52370],{"class":3021},[39,76184,50],{"class":45},[39,76186,52375],{"class":1319},[39,76188,52361],{"class":45},[39,76190,76191],{"class":41,"line":99},[39,76192,3458],{"emptyLinePlaceholder":1145},[39,76194,76195,76197,76199],{"class":41,"line":106},[39,76196,2108],{"class":45},[39,76198,52388],{"class":52354},[39,76200,52361],{"class":45},[39,76202,76203,76205,76207,76209,76211,76213],{"class":41,"line":112},[39,76204,53198],{"class":45},[39,76206,52398],{"class":52354},[39,76208,52401],{"class":3021},[39,76210,50],{"class":45},[39,76212,52406],{"class":1319},[39,76214,52361],{"class":45},[39,76216,76217,76219,76221,76223,76225,76227,76229,76231,76233],{"class":41,"line":118},[39,76218,53198],{"class":45},[39,76220,52398],{"class":52354},[39,76222,15976],{"class":3021},[39,76224,50],{"class":45},[39,76226,52445],{"class":1319},[39,76228,52425],{"class":3021},[39,76230,50],{"class":45},[39,76232,52452],{"class":1319},[39,76234,52361],{"class":45},[39,76236,76237,76239,76241,76243,76245],{"class":41,"line":413},[39,76238,53198],{"class":45},[39,76240,52461],{"class":52354},[39,76242,52464],{"class":45},[39,76244,52461],{"class":52354},[39,76246,52361],{"class":45},[39,76248,76249,76251,76253],{"class":41,"line":419},[39,76250,52839],{"class":45},[39,76252,52388],{"class":52354},[39,76254,52361],{"class":45},[39,76256,76257],{"class":41,"line":425},[39,76258,3458],{"emptyLinePlaceholder":1145},[39,76260,76261,76263,76265],{"class":41,"line":443},[39,76262,2108],{"class":45},[39,76264,52854],{"class":52354},[39,76266,52361],{"class":45},[39,76268,76269,76271,76273],{"class":41,"line":449},[39,76270,53198],{"class":45},[39,76272,52867],{"class":52354},[39,76274,52361],{"class":45},[39,76276,76277],{"class":41,"line":455},[39,76278,76279],{"class":102},"    \u002F\u002F 元字符中\n",[39,76281,76282,76284,76286,76288,76290,76293,76295,76297,76300,76302,76305,76308],{"class":41,"line":461},[39,76283,74807],{"class":45},[39,76285,59301],{"class":3021},[39,76287,1221],{"class":45},[39,76289,1784],{"class":1319},[39,76291,76292],{"class":49031},"哈",[39,76294,1784],{"class":1319},[39,76296,1758],{"class":45},[39,76298,76299],{"class":3021},"test",[39,76301,1221],{"class":45},[39,76303,76304],{"class":1319},"'哈'",[39,76306,76307],{"class":45},"))  ",[39,76309,76310],{"class":102},"\u002F\u002Ftrue\n",[39,76312,76313,76315,76317,76319,76321,76323,76325,76327,76329,76331,76334,76336],{"class":41,"line":475},[39,76314,74807],{"class":45},[39,76316,59301],{"class":3021},[39,76318,1221],{"class":45},[39,76320,1784],{"class":1319},[39,76322,76292],{"class":49031},[39,76324,1784],{"class":1319},[39,76326,1758],{"class":45},[39,76328,76299],{"class":3021},[39,76330,1221],{"class":45},[39,76332,76333],{"class":1319},"'哈哈'",[39,76335,76307],{"class":45},[39,76337,76310],{"class":102},[39,76339,76340,76342,76344,76346,76348,76350,76352,76354,76356,76358,76361,76364],{"class":41,"line":665},[39,76341,74807],{"class":45},[39,76343,59301],{"class":3021},[39,76345,1221],{"class":45},[39,76347,1784],{"class":1319},[39,76349,76292],{"class":49031},[39,76351,1784],{"class":1319},[39,76353,1758],{"class":45},[39,76355,76299],{"class":3021},[39,76357,1221],{"class":45},[39,76359,76360],{"class":1319},"'二哈'",[39,76362,76363],{"class":45},"))   ",[39,76365,76310],{"class":102},[39,76367,76368],{"class":41,"line":671},[39,76369,3458],{"emptyLinePlaceholder":1145},[39,76371,76372],{"class":41,"line":684},[39,76373,76374],{"class":102},"    \u002F\u002F 1.边界符\n",[39,76376,76377,76379,76381,76383,76385,76387,76389,76391,76393,76395,76397,76399,76401],{"class":41,"line":2732},[39,76378,74807],{"class":45},[39,76380,59301],{"class":3021},[39,76382,1221],{"class":45},[39,76384,1784],{"class":1319},[39,76386,2164],{"class":49},[39,76388,76292],{"class":49031},[39,76390,1784],{"class":1319},[39,76392,1758],{"class":45},[39,76394,76299],{"class":3021},[39,76396,1221],{"class":45},[39,76398,76304],{"class":1319},[39,76400,76307],{"class":45},[39,76402,76310],{"class":102},[39,76404,76405,76407,76409,76411,76413,76415,76417,76419,76421,76423,76425,76427,76429,76431],{"class":41,"line":2737},[39,76406,74807],{"class":45},[39,76408,59301],{"class":3021},[39,76410,1221],{"class":45},[39,76412,1784],{"class":1319},[39,76414,2164],{"class":49},[39,76416,76292],{"class":49031},[39,76418,1510],{"class":49},[39,76420,1784],{"class":1319},[39,76422,1758],{"class":45},[39,76424,76299],{"class":3021},[39,76426,1221],{"class":45},[39,76428,76333],{"class":1319},[39,76430,76307],{"class":45},[39,76432,76433],{"class":102},"\u002F\u002Ffalse\n",[39,76435,76436],{"class":41,"line":2751},[39,76437,76438],{"class":102},"    \u002F\u002F 2.量词\n",[39,76440,76441],{"class":41,"line":2756},[39,76442,76443],{"class":102},"    \u002F\u002F 量词 * 类似于 >= 0\n",[39,76445,76446,76448,76450,76452,76454,76456,76458,76461,76463,76465,76467,76469,76471,76473],{"class":41,"line":2785},[39,76447,74807],{"class":45},[39,76449,59301],{"class":3021},[39,76451,1221],{"class":45},[39,76453,1784],{"class":1319},[39,76455,2164],{"class":49},[39,76457,76292],{"class":49031},[39,76459,76460],{"class":49},"*$",[39,76462,1784],{"class":1319},[39,76464,1758],{"class":45},[39,76466,76299],{"class":3021},[39,76468,1221],{"class":45},[39,76470,76333],{"class":1319},[39,76472,76307],{"class":45},[39,76474,76310],{"class":102},[39,76476,76477,76479,76481,76483,76485,76487,76489,76491,76493,76495,76497,76499,76502,76504],{"class":41,"line":2790},[39,76478,74807],{"class":45},[39,76480,59301],{"class":3021},[39,76482,1221],{"class":45},[39,76484,1784],{"class":1319},[39,76486,2164],{"class":49},[39,76488,76292],{"class":49031},[39,76490,76460],{"class":49},[39,76492,1784],{"class":1319},[39,76494,1758],{"class":45},[39,76496,76299],{"class":3021},[39,76498,1221],{"class":45},[39,76500,76501],{"class":1319},"'二哈好傻'",[39,76503,76307],{"class":45},[39,76505,76506],{"class":102},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[39,76508,76509,76511,76513,76515,76517,76519,76521,76523,76525,76527,76529,76531,76534,76536],{"class":41,"line":2807},[39,76510,74807],{"class":45},[39,76512,59301],{"class":3021},[39,76514,1221],{"class":45},[39,76516,1784],{"class":1319},[39,76518,2164],{"class":49},[39,76520,76292],{"class":49031},[39,76522,76460],{"class":49},[39,76524,1784],{"class":1319},[39,76526,1758],{"class":45},[39,76528,76299],{"class":3021},[39,76530,1221],{"class":45},[39,76532,76533],{"class":1319},"'哈好哈'",[39,76535,76363],{"class":45},[39,76537,76538],{"class":102},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[39,76540,76541],{"class":41,"line":2812},[39,76542,3458],{"emptyLinePlaceholder":1145},[39,76544,76545],{"class":41,"line":2817},[39,76546,76547],{"class":102},"    \u002F\u002F +类似于>=1\n",[39,76549,76550,76552,76554,76556,76558,76560,76562,76565,76567,76569,76571,76573,76575,76577],{"class":41,"line":2822},[39,76551,74807],{"class":45},[39,76553,59301],{"class":3021},[39,76555,1221],{"class":45},[39,76557,1784],{"class":1319},[39,76559,2164],{"class":49},[39,76561,76292],{"class":49031},[39,76563,76564],{"class":49},"+$",[39,76566,1784],{"class":1319},[39,76568,1758],{"class":45},[39,76570,76299],{"class":3021},[39,76572,1221],{"class":45},[39,76574,76333],{"class":1319},[39,76576,76307],{"class":45},[39,76578,76310],{"class":102},[39,76580,76581,76583,76585,76587,76589,76591,76593,76595,76597,76599,76601,76603,76605,76607],{"class":41,"line":2836},[39,76582,74807],{"class":45},[39,76584,59301],{"class":3021},[39,76586,1221],{"class":45},[39,76588,1784],{"class":1319},[39,76590,2164],{"class":49},[39,76592,76292],{"class":49031},[39,76594,76564],{"class":49},[39,76596,1784],{"class":1319},[39,76598,1758],{"class":45},[39,76600,76299],{"class":3021},[39,76602,1221],{"class":45},[39,76604,76501],{"class":1319},[39,76606,76307],{"class":45},[39,76608,76506],{"class":102},[39,76610,76611,76613,76615,76617,76619,76621,76623,76625,76627,76629,76631,76633,76635,76637],{"class":41,"line":2841},[39,76612,74807],{"class":45},[39,76614,59301],{"class":3021},[39,76616,1221],{"class":45},[39,76618,1784],{"class":1319},[39,76620,2164],{"class":49},[39,76622,76292],{"class":49031},[39,76624,76564],{"class":49},[39,76626,1784],{"class":1319},[39,76628,1758],{"class":45},[39,76630,76299],{"class":3021},[39,76632,1221],{"class":45},[39,76634,76533],{"class":1319},[39,76636,76363],{"class":45},[39,76638,76433],{"class":102},[39,76640,76641],{"class":41,"line":3635},[39,76642,3458],{"emptyLinePlaceholder":1145},[39,76644,76645],{"class":41,"line":3649},[39,76646,76647],{"class":102},"    \u002F\u002F ?类似于0次或一次\n",[39,76649,76650,76652,76654,76656,76658,76660,76663,76665,76667,76669,76671,76673,76675,76677],{"class":41,"line":3657},[39,76651,74807],{"class":45},[39,76653,59301],{"class":3021},[39,76655,1221],{"class":45},[39,76657,1784],{"class":1319},[39,76659,2164],{"class":49},[39,76661,76662],{"class":49031},"哈？",[39,76664,1510],{"class":49},[39,76666,1784],{"class":1319},[39,76668,1758],{"class":45},[39,76670,76299],{"class":3021},[39,76672,1221],{"class":45},[39,76674,75282],{"class":1319},[39,76676,76363],{"class":45},[39,76678,76310],{"class":102},[39,76680,76681,76683,76685,76687,76689,76691,76693,76696,76698,76700,76702,76704,76706,76708],{"class":41,"line":3662},[39,76682,74807],{"class":45},[39,76684,59301],{"class":3021},[39,76686,1221],{"class":45},[39,76688,1784],{"class":1319},[39,76690,2164],{"class":49},[39,76692,76292],{"class":49031},[39,76694,76695],{"class":49},"?$",[39,76697,1784],{"class":1319},[39,76699,1758],{"class":45},[39,76701,76299],{"class":3021},[39,76703,1221],{"class":45},[39,76705,76333],{"class":1319},[39,76707,76307],{"class":45},[39,76709,76433],{"class":102},[39,76711,76712,76714,76716,76718,76720,76722,76724,76726,76728,76730,76732,76734,76736,76738],{"class":41,"line":3668},[39,76713,74807],{"class":45},[39,76715,59301],{"class":3021},[39,76717,1221],{"class":45},[39,76719,1784],{"class":1319},[39,76721,2164],{"class":49},[39,76723,76292],{"class":49031},[39,76725,76695],{"class":49},[39,76727,1784],{"class":1319},[39,76729,1758],{"class":45},[39,76731,76299],{"class":3021},[39,76733,1221],{"class":45},[39,76735,76501],{"class":1319},[39,76737,76307],{"class":45},[39,76739,76506],{"class":102},[39,76741,76742,76744,76746,76748,76750,76752,76754,76756,76758,76760,76762,76764,76766,76768],{"class":41,"line":3674},[39,76743,74807],{"class":45},[39,76745,59301],{"class":3021},[39,76747,1221],{"class":45},[39,76749,1784],{"class":1319},[39,76751,2164],{"class":49},[39,76753,76292],{"class":49031},[39,76755,76695],{"class":49},[39,76757,1784],{"class":1319},[39,76759,1758],{"class":45},[39,76761,76299],{"class":3021},[39,76763,1221],{"class":45},[39,76765,76533],{"class":1319},[39,76767,76307],{"class":45},[39,76769,76433],{"class":102},[39,76771,76772],{"class":41,"line":3679},[39,76773,3458],{"emptyLinePlaceholder":1145},[39,76775,76776],{"class":41,"line":9004},[39,76777,76778],{"class":102},"    \u002F\u002F {n}写几，就必须出现几次\n",[39,76780,76781,76783,76785,76787,76789,76791,76793,76796,76798,76800,76802,76804,76807,76810],{"class":41,"line":9028},[39,76782,74807],{"class":45},[39,76784,59301],{"class":3021},[39,76786,1221],{"class":45},[39,76788,1784],{"class":1319},[39,76790,2164],{"class":49},[39,76792,76292],{"class":49031},[39,76794,76795],{"class":49},"{4}$",[39,76797,1784],{"class":1319},[39,76799,1758],{"class":45},[39,76801,76299],{"class":3021},[39,76803,1221],{"class":45},[39,76805,76806],{"class":1319},"'哈哈哈哈'",[39,76808,76809],{"class":45},")) ",[39,76811,76310],{"class":102},[39,76813,76814],{"class":41,"line":9033},[39,76815,3458],{"emptyLinePlaceholder":1145},[39,76817,76818],{"class":41,"line":9039},[39,76819,76820],{"class":102},"    \u002F\u002F {n,}大于等于n次\n",[39,76822,76823,76825,76827,76829,76831,76833,76835,76838,76840,76842,76844,76846,76848,76850],{"class":41,"line":9066},[39,76824,74807],{"class":45},[39,76826,59301],{"class":3021},[39,76828,1221],{"class":45},[39,76830,1784],{"class":1319},[39,76832,2164],{"class":49},[39,76834,76292],{"class":49031},[39,76836,76837],{"class":49},"{4,}$",[39,76839,1784],{"class":1319},[39,76841,1758],{"class":45},[39,76843,76299],{"class":3021},[39,76845,1221],{"class":45},[39,76847,76806],{"class":1319},[39,76849,76809],{"class":45},[39,76851,76310],{"class":102},[39,76853,76854,76856,76858,76860,76862,76864,76866,76868,76870,76872,76874,76876,76879,76881],{"class":41,"line":9071},[39,76855,74807],{"class":45},[39,76857,59301],{"class":3021},[39,76859,1221],{"class":45},[39,76861,1784],{"class":1319},[39,76863,2164],{"class":49},[39,76865,76292],{"class":49031},[39,76867,76837],{"class":49},[39,76869,1784],{"class":1319},[39,76871,1758],{"class":45},[39,76873,76299],{"class":3021},[39,76875,1221],{"class":45},[39,76877,76878],{"class":1319},"'哈哈哈哈哈'",[39,76880,76809],{"class":45},[39,76882,76310],{"class":102},[39,76884,76885],{"class":41,"line":9077},[39,76886,3458],{"emptyLinePlaceholder":1145},[39,76888,76889],{"class":41,"line":9089},[39,76890,76891],{"class":102},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[39,76893,76894,76896,76898,76900,76902,76904,76906,76909,76911,76913,76915,76917,76919,76921],{"class":41,"line":9101},[39,76895,74807],{"class":45},[39,76897,59301],{"class":3021},[39,76899,1221],{"class":45},[39,76901,1784],{"class":1319},[39,76903,2164],{"class":49},[39,76905,76292],{"class":49031},[39,76907,76908],{"class":49},"{4,6}$",[39,76910,1784],{"class":1319},[39,76912,1758],{"class":45},[39,76914,76299],{"class":3021},[39,76916,1221],{"class":45},[39,76918,76806],{"class":1319},[39,76920,76809],{"class":45},[39,76922,76310],{"class":102},[39,76924,76925,76927,76929,76931,76933,76935,76937,76939,76941,76943,76945,76947,76949,76951],{"class":41,"line":9113},[39,76926,74807],{"class":45},[39,76928,59301],{"class":3021},[39,76930,1221],{"class":45},[39,76932,1784],{"class":1319},[39,76934,2164],{"class":49},[39,76936,76292],{"class":49031},[39,76938,76908],{"class":49},[39,76940,1784],{"class":1319},[39,76942,1758],{"class":45},[39,76944,76299],{"class":3021},[39,76946,1221],{"class":45},[39,76948,76878],{"class":1319},[39,76950,76809],{"class":45},[39,76952,76310],{"class":102},[39,76954,76955,76957,76959,76961,76963,76965,76967,76969,76971,76973,76975,76977,76980,76982],{"class":41,"line":10772},[39,76956,74807],{"class":45},[39,76958,59301],{"class":3021},[39,76960,1221],{"class":45},[39,76962,1784],{"class":1319},[39,76964,2164],{"class":49},[39,76966,76292],{"class":49031},[39,76968,76908],{"class":49},[39,76970,1784],{"class":1319},[39,76972,1758],{"class":45},[39,76974,76299],{"class":3021},[39,76976,1221],{"class":45},[39,76978,76979],{"class":1319},"'哈哈哈哈哈哈哈'",[39,76981,76809],{"class":45},[39,76983,76433],{"class":102},[39,76985,76986],{"class":41,"line":10797},[39,76987,3458],{"emptyLinePlaceholder":1145},[39,76989,76990],{"class":41,"line":10820},[39,76991,76992],{"class":102},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[39,76994,76995,76997,76999,77001,77003,77005,77008,77010,77012,77014,77016,77018,77021,77023],{"class":41,"line":10844},[39,76996,74807],{"class":45},[39,76998,59301],{"class":3021},[39,77000,1221],{"class":45},[39,77002,1784],{"class":1319},[39,77004,2164],{"class":49},[39,77006,77007],{"class":56},"[abc]",[39,77009,1510],{"class":49},[39,77011,1784],{"class":1319},[39,77013,1758],{"class":45},[39,77015,76299],{"class":3021},[39,77017,1221],{"class":45},[39,77019,77020],{"class":1319},"'a'",[39,77022,76307],{"class":45},[39,77024,76310],{"class":102},[39,77026,77027,77029,77031,77033,77035,77037,77039,77041,77043,77045,77047,77049,77052,77054],{"class":41,"line":10849},[39,77028,74807],{"class":45},[39,77030,59301],{"class":3021},[39,77032,1221],{"class":45},[39,77034,1784],{"class":1319},[39,77036,2164],{"class":49},[39,77038,77007],{"class":56},[39,77040,1510],{"class":49},[39,77042,1784],{"class":1319},[39,77044,1758],{"class":45},[39,77046,76299],{"class":3021},[39,77048,1221],{"class":45},[39,77050,77051],{"class":1319},"'b'",[39,77053,76307],{"class":45},[39,77055,76310],{"class":102},[39,77057,77058,77060,77062,77064,77066,77068,77070,77072,77074,77076,77078,77080,77083,77085],{"class":41,"line":10854},[39,77059,74807],{"class":45},[39,77061,59301],{"class":3021},[39,77063,1221],{"class":45},[39,77065,1784],{"class":1319},[39,77067,2164],{"class":49},[39,77069,77007],{"class":56},[39,77071,1510],{"class":49},[39,77073,1784],{"class":1319},[39,77075,1758],{"class":45},[39,77077,76299],{"class":3021},[39,77079,1221],{"class":45},[39,77081,77082],{"class":1319},"'c'",[39,77084,76307],{"class":45},[39,77086,76310],{"class":102},[39,77088,77089,77091,77093,77095,77097,77099,77101,77103,77105,77107,77110,77112],{"class":41,"line":10859},[39,77090,74807],{"class":45},[39,77092,59301],{"class":3021},[39,77094,1221],{"class":45},[39,77096,1784],{"class":1319},[39,77098,77007],{"class":56},[39,77100,1784],{"class":1319},[39,77102,1758],{"class":45},[39,77104,76299],{"class":3021},[39,77106,1221],{"class":45},[39,77108,77109],{"class":1319},"'ab'",[39,77111,76307],{"class":45},[39,77113,76310],{"class":102},[39,77115,77116,77118,77120,77122,77124,77126,77128,77130,77132,77134,77136,77138,77140,77142],{"class":41,"line":10868},[39,77117,74807],{"class":45},[39,77119,59301],{"class":3021},[39,77121,1221],{"class":45},[39,77123,1784],{"class":1319},[39,77125,2164],{"class":49},[39,77127,77007],{"class":56},[39,77129,1510],{"class":49},[39,77131,1784],{"class":1319},[39,77133,1758],{"class":45},[39,77135,76299],{"class":3021},[39,77137,1221],{"class":45},[39,77139,77109],{"class":1319},[39,77141,76307],{"class":45},[39,77143,77144],{"class":102},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[39,77146,77147,77149,77151,77153,77155,77157,77159,77162,77164,77166,77168,77170,77172,77174],{"class":41,"line":10873},[39,77148,74807],{"class":45},[39,77150,59301],{"class":3021},[39,77152,1221],{"class":45},[39,77154,1784],{"class":1319},[39,77156,2164],{"class":49},[39,77158,77007],{"class":56},[39,77160,77161],{"class":49},"{2}$",[39,77163,1784],{"class":1319},[39,77165,1758],{"class":45},[39,77167,76299],{"class":3021},[39,77169,1221],{"class":45},[39,77171,77109],{"class":1319},[39,77173,76307],{"class":45},[39,77175,77176],{"class":102},"\u002F\u002Ftrue   可以选两个\n",[39,77178,77179,77181,77183,77185,77187,77189,77192,77194,77196,77198,77200,77202,77205,77207],{"class":41,"line":10879},[39,77180,74807],{"class":45},[39,77182,59301],{"class":3021},[39,77184,1221],{"class":45},[39,77186,1784],{"class":1319},[39,77188,2164],{"class":49},[39,77190,77191],{"class":56},"[a-z]",[39,77193,1510],{"class":49},[39,77195,1784],{"class":1319},[39,77197,1758],{"class":45},[39,77199,76299],{"class":3021},[39,77201,1221],{"class":45},[39,77203,77204],{"class":1319},"'p'",[39,77206,76363],{"class":45},[39,77208,77209],{"class":102},"\u002F\u002Ftrue   依然只能选一个\n",[39,77211,77212,77214,77216,77218,77220,77222,77225,77227,77229,77231,77233,77235,77237,77239],{"class":41,"line":10900},[39,77213,74807],{"class":45},[39,77215,59301],{"class":3021},[39,77217,1221],{"class":45},[39,77219,1784],{"class":1319},[39,77221,2164],{"class":49},[39,77223,77224],{"class":56},"[A-Z]",[39,77226,1510],{"class":49},[39,77228,1784],{"class":1319},[39,77230,1758],{"class":45},[39,77232,76299],{"class":3021},[39,77234,1221],{"class":45},[39,77236,77204],{"class":1319},[39,77238,76363],{"class":45},[39,77240,76433],{"class":102},[39,77242,77243,77245,77247,77249,77251,77253,77255,77257,77259,77261,77263,77265,77268,77270],{"class":41,"line":10906},[39,77244,74807],{"class":45},[39,77246,59301],{"class":3021},[39,77248,1221],{"class":45},[39,77250,1784],{"class":1319},[39,77252,2164],{"class":49},[39,77254,77224],{"class":56},[39,77256,1510],{"class":49},[39,77258,1784],{"class":1319},[39,77260,1758],{"class":45},[39,77262,76299],{"class":3021},[39,77264,1221],{"class":45},[39,77266,77267],{"class":1319},"'P'",[39,77269,76363],{"class":45},[39,77271,76310],{"class":102},[39,77273,77274,77276,77278,77280,77282,77284,77287,77289,77291,77293,77295,77297,77300,77302],{"class":41,"line":10920},[39,77275,74807],{"class":45},[39,77277,59301],{"class":3021},[39,77279,1221],{"class":45},[39,77281,1784],{"class":1319},[39,77283,2164],{"class":49},[39,77285,77286],{"class":56},"[0-9]",[39,77288,1510],{"class":49},[39,77290,1784],{"class":1319},[39,77292,1758],{"class":45},[39,77294,76299],{"class":3021},[39,77296,1221],{"class":45},[39,77298,77299],{"class":1319},"'0'",[39,77301,76363],{"class":45},[39,77303,76310],{"class":102},[39,77305,77306,77308,77310,77312,77314,77316,77319,77321,77323,77325,77327,77329,77331,77333],{"class":41,"line":10926},[39,77307,74807],{"class":45},[39,77309,59301],{"class":3021},[39,77311,1221],{"class":45},[39,77313,1784],{"class":1319},[39,77315,2164],{"class":49},[39,77317,77318],{"class":56},"[a-zA-Z0-9]",[39,77320,1510],{"class":49},[39,77322,1784],{"class":1319},[39,77324,1758],{"class":45},[39,77326,76299],{"class":3021},[39,77328,1221],{"class":45},[39,77330,77204],{"class":1319},[39,77332,76307],{"class":45},[39,77334,76310],{"class":102},[39,77336,77337,77339,77341],{"class":41,"line":10953},[39,77338,53471],{"class":45},[39,77340,52867],{"class":52354},[39,77342,52361],{"class":45},[39,77344,77345,77347,77349],{"class":41,"line":10962},[39,77346,52839],{"class":45},[39,77348,52854],{"class":52354},[39,77350,52361],{"class":45},[39,77352,77353],{"class":41,"line":10968},[39,77354,3458],{"emptyLinePlaceholder":1145},[39,77356,77357,77359,77361],{"class":41,"line":10976},[39,77358,52839],{"class":45},[39,77360,51689],{"class":52354},[39,77362,52361],{"class":45},[23054,77364,77366],{"id":77365},"_3624-修饰符","3.6.2.4 修饰符",[19,77368,77369],{},[269,77370],{"alt":34,"src":77371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,77373,77374],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,77376,77377],{},[269,77378],{"alt":34,"src":77379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[29,77381,77383],{"className":51687,"code":77382,"language":51689,"meta":34,"style":34},"\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",[36,77384,77385,77395,77409,77417,77431,77451,77463,77471,77479,77487,77519,77550,77555,77587,77598,77631,77640,77648,77656],{"__ignoreMap":34},[39,77386,77387,77389,77391,77393],{"class":41,"line":42},[39,77388,52351],{"class":45},[39,77390,52355],{"class":52354},[39,77392,52358],{"class":3021},[39,77394,52361],{"class":45},[39,77396,77397,77399,77401,77403,77405,77407],{"class":41,"line":74},[39,77398,2108],{"class":45},[39,77400,51689],{"class":52354},[39,77402,52370],{"class":3021},[39,77404,50],{"class":45},[39,77406,52375],{"class":1319},[39,77408,52361],{"class":45},[39,77410,77411,77413,77415],{"class":41,"line":99},[39,77412,2108],{"class":45},[39,77414,52388],{"class":52354},[39,77416,52361],{"class":45},[39,77418,77419,77421,77423,77425,77427,77429],{"class":41,"line":106},[39,77420,53198],{"class":45},[39,77422,52398],{"class":52354},[39,77424,52401],{"class":3021},[39,77426,50],{"class":45},[39,77428,52406],{"class":1319},[39,77430,52361],{"class":45},[39,77432,77433,77435,77437,77439,77441,77443,77445,77447,77449],{"class":41,"line":112},[39,77434,53198],{"class":45},[39,77436,52398],{"class":52354},[39,77438,15976],{"class":3021},[39,77440,50],{"class":45},[39,77442,52445],{"class":1319},[39,77444,52425],{"class":3021},[39,77446,50],{"class":45},[39,77448,52452],{"class":1319},[39,77450,52361],{"class":45},[39,77452,77453,77455,77457,77459,77461],{"class":41,"line":118},[39,77454,53198],{"class":45},[39,77456,52461],{"class":52354},[39,77458,52464],{"class":45},[39,77460,52461],{"class":52354},[39,77462,52361],{"class":45},[39,77464,77465,77467,77469],{"class":41,"line":413},[39,77466,52839],{"class":45},[39,77468,52388],{"class":52354},[39,77470,52361],{"class":45},[39,77472,77473,77475,77477],{"class":41,"line":419},[39,77474,2108],{"class":45},[39,77476,52854],{"class":52354},[39,77478,52361],{"class":45},[39,77480,77481,77483,77485],{"class":41,"line":425},[39,77482,53198],{"class":45},[39,77484,52867],{"class":52354},[39,77486,52361],{"class":45},[39,77488,77489,77491,77493,77495,77497,77499,77502,77504,77506,77508,77510,77512,77515,77517],{"class":41,"line":443},[39,77490,74807],{"class":45},[39,77492,59301],{"class":3021},[39,77494,1221],{"class":45},[39,77496,1784],{"class":1319},[39,77498,2164],{"class":49},[39,77500,77501],{"class":49031},"java",[39,77503,1510],{"class":49},[39,77505,1784],{"class":1319},[39,77507,1758],{"class":45},[39,77509,76299],{"class":3021},[39,77511,1221],{"class":45},[39,77513,77514],{"class":1319},"'java'",[39,77516,76809],{"class":45},[39,77518,76310],{"class":102},[39,77520,77521,77523,77525,77527,77529,77531,77533,77535,77537,77539,77541,77543,77546,77548],{"class":41,"line":449},[39,77522,74807],{"class":45},[39,77524,59301],{"class":3021},[39,77526,1221],{"class":45},[39,77528,1784],{"class":1319},[39,77530,2164],{"class":49},[39,77532,77501],{"class":49031},[39,77534,1510],{"class":49},[39,77536,1784],{"class":1319},[39,77538,1758],{"class":45},[39,77540,76299],{"class":3021},[39,77542,1221],{"class":45},[39,77544,77545],{"class":1319},"'Java'",[39,77547,76809],{"class":45},[39,77549,76433],{"class":102},[39,77551,77552],{"class":41,"line":455},[39,77553,77554],{"class":102},"    \u002F\u002F 不区分大小写、\n",[39,77556,77557,77559,77561,77563,77565,77567,77569,77571,77573,77575,77577,77579,77581,77583,77585],{"class":41,"line":461},[39,77558,74807],{"class":45},[39,77560,59301],{"class":3021},[39,77562,1221],{"class":45},[39,77564,1784],{"class":1319},[39,77566,2164],{"class":49},[39,77568,77501],{"class":49031},[39,77570,1510],{"class":49},[39,77572,1784],{"class":1319},[39,77574,1644],{"class":49},[39,77576,1758],{"class":45},[39,77578,76299],{"class":3021},[39,77580,1221],{"class":45},[39,77582,77545],{"class":1319},[39,77584,76809],{"class":45},[39,77586,76310],{"class":102},[39,77588,77589,77591,77593,77595],{"class":41,"line":475},[39,77590,12277],{"class":49},[39,77592,74973],{"class":56},[39,77594,14620],{"class":49},[39,77596,77597],{"class":1319}," 'java是一门编程语言，学完java工资很高'\n",[39,77599,77600,77602,77605,77607,77610,77613,77615,77617,77619,77621,77624,77626,77629],{"class":41,"line":665},[39,77601,12277],{"class":49},[39,77603,77604],{"class":56}," result",[39,77606,14620],{"class":49},[39,77608,77609],{"class":45}," str.",[39,77611,77612],{"class":3021},"replace",[39,77614,1221],{"class":45},[39,77616,1784],{"class":1319},[39,77618,77501],{"class":49031},[39,77620,1784],{"class":1319},[39,77622,77623],{"class":49},"ig",[39,77625,13491],{"class":45},[39,77627,77628],{"class":1319},"'前端'",[39,77630,209],{"class":45},[39,77632,77633,77635,77637],{"class":41,"line":671},[39,77634,74807],{"class":45},[39,77636,59301],{"class":3021},[39,77638,77639],{"class":45},"(result)\n",[39,77641,77642,77644,77646],{"class":41,"line":684},[39,77643,53471],{"class":45},[39,77645,52867],{"class":52354},[39,77647,52361],{"class":45},[39,77649,77650,77652,77654],{"class":41,"line":2732},[39,77651,52839],{"class":45},[39,77653,52854],{"class":52354},[39,77655,52361],{"class":45},[39,77657,77658,77660,77662],{"class":41,"line":2737},[39,77659,52839],{"class":45},[39,77661,51689],{"class":52354},[39,77663,52361],{"class":45},[1133,77665,77666],{},"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":34,"searchDepth":74,"depth":74,"links":77668},[77669,77679,77691,77708,77715,77723],{"id":54414,"depth":74,"text":54415,"children":77670},[77671,77672,77673,77674,77675,77676,77677,77678],{"id":54418,"depth":99,"text":54419},{"id":54451,"depth":99,"text":54452},{"id":54490,"depth":99,"text":54491},{"id":54648,"depth":99,"text":54649},{"id":54696,"depth":99,"text":54697},{"id":54833,"depth":99,"text":54834},{"id":55155,"depth":99,"text":55156},{"id":58143,"depth":99,"text":58144},{"id":58171,"depth":74,"text":58172,"children":77680},[77681,77682,77683,77684,77685,77686,77687,77688,77689,77690],{"id":58175,"depth":99,"text":58176},{"id":58198,"depth":99,"text":58199},{"id":59113,"depth":99,"text":59114},{"id":59803,"depth":99,"text":59804},{"id":60085,"depth":99,"text":60086},{"id":64246,"depth":99,"text":64247},{"id":64416,"depth":99,"text":64417},{"id":64544,"depth":99,"text":64545},{"id":64569,"depth":99,"text":64570},{"id":65958,"depth":99,"text":65959},{"id":67111,"depth":74,"text":67112,"children":77692},[77693,77694,77695,77696,77697,77698,77699,77700,77701,77702,77703,77704,77705,77706,77707],{"id":67115,"depth":99,"text":67116},{"id":67769,"depth":99,"text":67770},{"id":69464,"depth":99,"text":69465},{"id":69505,"depth":99,"text":69506},{"id":69547,"depth":99,"text":69548},{"id":69561,"depth":99,"text":69562},{"id":69610,"depth":99,"text":69611},{"id":69622,"depth":99,"text":69623},{"id":69637,"depth":99,"text":69638},{"id":69673,"depth":99,"text":69674},{"id":69754,"depth":99,"text":69755},{"id":69882,"depth":99,"text":69883},{"id":69894,"depth":99,"text":69895},{"id":69913,"depth":99,"text":69914},{"id":72024,"depth":99,"text":72025},{"id":72043,"depth":74,"text":72044,"children":77709},[77710,77711,77712,77713,77714],{"id":72064,"depth":99,"text":72065},{"id":72084,"depth":99,"text":72085},{"id":72133,"depth":99,"text":72134},{"id":72258,"depth":99,"text":72259},{"id":72439,"depth":99,"text":72440},{"id":72457,"depth":74,"text":72458,"children":77716},[77717,77718,77719,77720,77721,77722],{"id":72472,"depth":99,"text":72473},{"id":72531,"depth":99,"text":72532},{"id":72555,"depth":99,"text":72556},{"id":72875,"depth":99,"text":72876},{"id":72907,"depth":99,"text":72908},{"id":72930,"depth":99,"text":72931},{"id":75998,"depth":74,"text":75999,"children":77724},[77725,77726],{"id":76032,"depth":99,"text":76033},{"id":76071,"depth":99,"text":76072},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":54386,"description":1142},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77733,"title":77734,"body":77735,"description":1142,"extension":1143,"meta":93872,"navigation":1145,"path":93873,"seo":93874,"stem":93875,"__hash__":93876},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77736,"toc":93808},[77737,77740,77743,77747,77751,77756,77761,77772,77776,77781,77784,77788,77791,77796,77800,77804,77807,77812,77815,77819,77822,77830,77833,77837,77842,77847,77850,77854,77859,77864,77867,77871,77876,77879,77884,77887,77892,77895,77900,77905,77908,77911,77915,77920,77925,77928,77932,77936,77939,77942,77945,77949,77953,77958,77963,77966,77970,77975,77980,77983,77986,77989,77992,77995,77998,78001,78004,78007,78012,78016,78021,78026,78029,78032,78035,78038,78041,78044,78047,78050,78054,78058,78061,78064,78067,78072,78074,78077,78080,78083,78086,78089,78092,78095,78098,78101,78104,78107,78110,78113,78118,78123,78128,78131,78135,78138,78143,78147,78149,78160,78165,78266,78269,78272,78275,78278,78281,78284,78287,78290,78292,78295,78298,78301,78304,78307,78309,78312,78315,78318,78321,78324,78327,78329,78332,78334,78336,78339,78343,78347,78350,78353,78356,78359,78362,78365,78368,78371,78374,78379,78499,78502,78505,78510,78513,78516,78519,78522,78527,78530,78533,78536,78539,78544,78547,78647,78712,78786,78790,78793,78796,78800,78803,78817,78846,78849,78852,78855,78858,78861,78864,78867,78869,78872,78875,78878,78881,78885,78890,78894,78899,78974,78977,79160,79163,79166,79169,79172,79175,79177,79180,79183,79186,79189,79192,79195,79197,79201,79204,79209,79212,79215,79218,79221,79223,79228,79231,79234,79237,79240,79242,79247,79250,79253,79255,79257,79260,79264,79267,79270,79275,79278,79281,79284,79334,79339,79343,79348,79351,79420,79423,79432,79436,79441,79444,79447,79455,79458,79475,81277,81281,81285,81290,81293,81297,81303,81309,81461,81466,81471,81474,81477,81480,81483,81486,81489,81492,81495,81498,81501,81504,81507,81512,81516,81519,81530,81534,81539,81542,81545,81548,81551,81554,81556,81559,81562,81565,81568,81570,81587,81590,81594,81597,81602,81607,81610,81613,81617,81620,81623,81632,81635,81639,81642,81647,81652,81719,81723,81726,81729,81734,81739,81825,81830,81834,81837,81840,81855,81858,81863,81867,81872,81981,81984,81995,82145,82149,82154,82263,82267,82272,82277,82282,82285,82292,82312,82348,82512,82517,82520,82525,82532,82535,82538,82541,82600,82656,82712,82716,82721,83036,83039,83043,83046,83051,83160,83165,83169,83174,83178,83249,83253,83255,83258,83261,83299,83575,83579,83596,83662,83696,83700,83703,83708,83737,83744,83753,83758,83773,83778,83787,83790,83927,83931,83993,83997,84002,84247,84251,84256,84259,84262,84265,84268,84272,84277,85858,85862,85866,85872,85875,85880,85884,85887,85892,85895,85906,85910,85915,85919,85924,85929,85932,85937,85941,85945,85948,85953,85958,85961,85964,85967,86089,86094,86196,86199,86202,86206,86211,86383,86388,86392,86395,86400,86466,86471,86474,86605,86608,86613,86616,86619,86710,86715,86718,86721,86724,86727,86732,86737,86740,86745,86750,86755,86759,86762,86765,86770,86775,86780,86785,86839,86842,86845,86850,86853,86856,86861,86866,86871,86875,86880,86894,86899,86902,86907,86911,86916,86921,86926,86931,86936,86941,86946,86951,86954,86958,86963,86966,86969,86972,86977,86982,86985,86988,86992,86995,86998,87003,87008,87013,87018,87021,87026,87031,87092,87097,87100,87105,88346,88351,88355,88359,88364,88367,88372,88377,88380,88385,88387,88392,88396,88399,88402,88413,88417,88422,88427,88482,88487,88492,88497,88708,88713,88717,88722,88725,88727,88730,88733,89180,89185,89192,89198,89201,89204,89468,89473,89477,89742,89747,89751,89756,89761,89766,89771,90102,90105,90110,90115,90118,90122,90126,90131,90136,90141,90146,90151,90156,90160,90163,90168,90173,90176,90250,90255,90260,90265,90267,90270,90640,90645,90650,90655,90658,90661,90763,90768,90773,90876,90880,90885,90889,90893,90898,90903,90906,90911,90914,90917,91310,91315,91318,91321,91324,91327,91847,91851,91856,91861,91866,91869,91874,91877,91880,92262,92267,92269,92271,92274,92277,92789,92793,92854,92857,92860,92863,92867,92870,92875,92880,93805],[10,77738,77734],{"id":77739},"_4js进阶",[19,77741,77742],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,77744,77746],{"id":77745},"_41-作用域","4.1 作用域",[1188,77748,77750],{"id":77749},"_411-局部作用域","4.1.1 局部作用域",[19,77752,77753],{},[269,77754],{"alt":34,"src":77755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,77757,77758],{},[269,77759],{"alt":34,"src":77760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[2205,77762,77763,77766,77769],{},[1174,77764,77765],{},"函数作用域在函数内部",[1174,77767,77768],{},"块级作用域在{}",[1174,77770,77771],{},"对象的那个{}不是作用域，不是块作用域",[1188,77773,77775],{"id":77774},"_412-全局作用域","4.1.2 全局作用域",[19,77777,77778],{},[269,77779],{"alt":34,"src":77780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,77782,77783],{},"window.a=10不要这样写",[1188,77785,77787],{"id":77786},"_413-作用域链","4.1.3 作用域链",[19,77789,77790],{},"变量查找机制",[19,77792,77793],{},[269,77794],{"alt":34,"src":77795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77797,77799],{"id":77798},"_42-垃圾回收机制","4.2 垃圾回收机制",[1188,77801,77803],{"id":77802},"_421-大体介绍","4.2.1 大体介绍",[19,77805,77806],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,77808,77809],{},[269,77810],{"alt":34,"src":77811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,77813,77814],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[1188,77816,77818],{"id":77817},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,77820,77821],{},"堆栈空间分配区别：",[1171,77823,77824,77827],{},[1174,77825,77826],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[1174,77828,77829],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,77831,77832],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23054,77834,77836],{"id":77835},"_4221-引用计数","4.2.2.1 引用计数",[19,77838,77839],{},[269,77840],{"alt":34,"src":77841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,77843,77844],{},[269,77845],{"alt":34,"src":77846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,77848,77849],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23054,77851,77853],{"id":77852},"_4222-标记清除法","4.2.2.2 标记清除法",[19,77855,77856],{},[269,77857],{"alt":34,"src":77858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,77860,77861],{},[269,77862],{"alt":34,"src":77863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,77865,77866],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77868,77870],{"id":77869},"_43-闭包","4.3 闭包",[19,77872,77873],{},[269,77874],{"alt":34,"src":77875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,77877,77878],{},"闭包：内层函数+外层函数的变量",[19,77880,77881],{},[269,77882],{"alt":34,"src":77883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,77885,77886],{},"closure就是闭包",[19,77888,77889],{},[269,77890],{"alt":34,"src":77891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,77893,77894],{},"内层函数必须包含外层函数的变量才是闭包",[19,77896,77897],{},[269,77898],{"alt":34,"src":77899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,77901,77902],{},[269,77903],{"alt":34,"src":77904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,77906,77907],{},"闭包可能会引起内存泄漏",[19,77909,77910],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77912,77914],{"id":77913},"_44-变量提升","4.4 变量提升",[19,77916,77917],{},[269,77918],{"alt":34,"src":77919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77921,77922],{},[269,77923],{"alt":34,"src":77924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77926,77927],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77929,77931],{"id":77930},"_45-函数进阶","4.5 函数进阶",[1188,77933,77935],{"id":77934},"_451-函数提升","4.5.1 函数提升",[19,77937,77938],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77940,77941],{},"只提升函数声明，不提升函数调用",[52867,77943,77944],{},"\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",[1188,77946,77948],{"id":77947},"_452-函数参数","4.5.2 函数参数",[23054,77950,77952],{"id":77951},"_4521-动态参数","4.5.2.1 动态参数",[19,77954,77955],{},[269,77956],{"alt":34,"src":77957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77959,77960],{},[269,77961],{"alt":34,"src":77962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77964,77965],{},"箭头函数里边没有arguments",[23054,77967,77969],{"id":77968},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77971,77972],{},[269,77973],{"alt":34,"src":77974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77976,77977],{},[269,77978],{"alt":34,"src":77979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77981,77982],{},"剩余参数使用的时候不需要写...",[19,77984,77985],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77987,77988],{},"  function getSum(a,b,...arr) {",[19,77990,77991],{},"  console.log(11)",[19,77993,77994],{},"  }",[19,77996,77997],{},"  getSum(1,2,3,4)",[19,77999,78000],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78002,78003],{},"  getSum(1,2)",[19,78005,78006],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78008,78009],{},[269,78010],{"alt":34,"src":78011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23054,78013,78015],{"id":78014},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78017,78018],{},[269,78019],{"alt":34,"src":78020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78022,78023],{},[269,78024],{"alt":34,"src":78025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78027,78028],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78030,78031],{},"展开运算符可以用于数组之间的合并：",[19,78033,78034],{},"const arr1 = [1, 2, 3]",[19,78036,78037],{},"const arr2 = [3, 4, 5]",[19,78039,78040],{},"const arr = [...arr1, ...arr2]",[19,78042,78043],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78045,78046],{},"剩余参数：函数参数使用，得到真数组",[19,78048,78049],{},"展开运算符：数组中使用，数组展开",[1188,78051,78053],{"id":78052},"_453-箭头函数","4.5.3 箭头函数",[23054,78055,78057],{"id":78056},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78059,78060],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78062,78063],{},"它不是万能的！！！",[19,78065,78066],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,78068,78069],{},[269,78070],{"alt":34,"src":78071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,78073,1249],{},[19,78075,78076],{},"① 只有一个形参的时候，可以省略小括号：",[19,78078,78079],{},"const fn=x=>{console.log(x)}",[19,78081,78082],{},"② 只有一行代码时可以省略大括号：",[19,78084,78085],{},"const fn=x=>console.log(11)",[19,78087,78088],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,78090,78091],{},"const fn=x=>x+x",[19,78093,78094],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,78096,78097],{},"⑤ 阻止表单默认提交：",[19,78099,78100],{},"const form = document.querySelector('form')",[19,78102,78103],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,78105,78106],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,78108,78109],{},"const fn=uname=>({uname:uname})",[19,78111,78112],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,78114,78115],{},[269,78116],{"alt":34,"src":78117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,78119,78120],{},[269,78121],{"alt":34,"src":78122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,78124,78125],{},[269,78126],{"alt":34,"src":78127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,78129,78130],{},"一定不要忘记用()，有()就理解为自带return",[23054,78132,78134],{"id":78133},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,78136,78137],{},"箭头函数是没有动态参数的arguments",[19,78139,78140],{},[269,78141],{"alt":34,"src":78142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23054,78144,78146],{"id":78145},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,78148,12388],{},[1171,78150,78151,78154,78157],{},[1174,78152,78153],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[1174,78155,78156],{},"事件回调函数使用箭头函数时，this 为全局的 window",[1174,78158,78159],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,78161,78162],{},[269,78163],{"alt":34,"src":78164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[29,78166,78168],{"className":54121,"code":78167,"language":54123,"meta":34,"style":34},"  \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",[36,78169,78170,78178,78183,78188,78193,78198,78203,78207,78212,78216,78220,78225,78230,78235,78239,78243,78248,78253,78258],{"__ignoreMap":34},[39,78171,78172,78174,78176],{"class":41,"line":42},[39,78173,53198],{"class":45},[39,78175,52867],{"class":52354},[39,78177,52361],{"class":45},[39,78179,78180],{"class":41,"line":74},[39,78181,78182],{"class":45},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[39,78184,78185],{"class":41,"line":99},[39,78186,78187],{"class":45},"    console.log(this) \u002F\u002F指向window\n",[39,78189,78190],{"class":41,"line":106},[39,78191,78192],{"class":45},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[39,78194,78195],{"class":41,"line":112},[39,78196,78197],{"class":45},"    function fn() {\n",[39,78199,78200],{"class":41,"line":118},[39,78201,78202],{"class":45},"      console.log(this)  \u002F\u002F指向window\n",[39,78204,78205],{"class":41,"line":413},[39,78206,3245],{"class":45},[39,78208,78209],{"class":41,"line":419},[39,78210,78211],{"class":45},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[39,78213,78214],{"class":41,"line":425},[39,78215,3458],{"emptyLinePlaceholder":1145},[39,78217,78218],{"class":41,"line":443},[39,78219,72577],{"class":45},[39,78221,78222],{"class":41,"line":449},[39,78223,78224],{"class":45},"      name: 'andy',\n",[39,78226,78227],{"class":41,"line":455},[39,78228,78229],{"class":45},"      sayHai: function () {\n",[39,78231,78232],{"class":41,"line":461},[39,78233,78234],{"class":45},"        console.log(this)\n",[39,78236,78237],{"class":41,"line":475},[39,78238,53452],{"class":45},[39,78240,78241],{"class":41,"line":665},[39,78242,3245],{"class":45},[39,78244,78245],{"class":41,"line":671},[39,78246,78247],{"class":45},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[39,78249,78250],{"class":41,"line":684},[39,78251,78252],{"class":45},"    \u002F\u002F 2.箭头函数的this\n",[39,78254,78255],{"class":41,"line":2732},[39,78256,78257],{"class":45},"    const fn = () => console.log(this)\n",[39,78259,78260,78262,78264],{"class":41,"line":2737},[39,78261,53471],{"class":45},[39,78263,52867],{"class":52354},[39,78265,52361],{"class":45},[19,78267,78268],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,78270,78271],{},"const fn = () => console.log(this)",[19,78273,78274],{},"fn() \u002F\u002F指向window",[19,78276,78277],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,78279,78280],{},"①",[19,78282,78283],{},"const obj = {",[19,78285,78286],{},"uname: 'pink老师',",[19,78288,78289],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,78291,2144],{},[19,78293,78294],{},"调用对象里边的函数",[19,78296,78297],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,78299,78300],{},"obj.sayHai()",[19,78302,78303],{},"②",[19,78305,78306],{},"const obj1 = {",[19,78308,78286],{},[19,78310,78311],{},"sayHai: function () {",[19,78313,78314],{},"let i = 10",[19,78316,78317],{},"const count = () => {",[19,78319,78320],{},"console.log(this)",[19,78322,78323],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,78325,78326],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,78328,2144],{},[19,78330,78331],{},"count()",[19,78333,2144],{},[19,78335,2144],{},[19,78337,78338],{},"obj1.sayHai()",[14,78340,78342],{"id":78341},"_46-解构赋值","4.6 解构赋值",[1188,78344,78346],{"id":78345},"_461-数组解构","4.6.1 数组解构",[19,78348,78349],{},"以前要是使用数组中的值的话：",[19,78351,78352],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,78354,78355],{},"const arr=[100,60,80]",[19,78357,78358],{},"const max=arr[0]",[19,78360,78361],{},"const min=arr[1]",[19,78363,78364],{},"const avg=arr[2]",[19,78366,78367],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,78369,78370],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,78372,78373],{},"这个写法就类似于上边的那种用很多const的方法",[19,78375,78376],{},[269,78377],{"alt":34,"src":78378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[29,78380,78382],{"className":51687,"code":78381,"language":51689,"meta":34,"style":34},"①变量之间交换值:\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",[36,78383,78384,78389,78394,78399,78404,78409,78413,78417,78422,78426,78431,78436,78440,78445,78450,78461,78471,78476,78481,78486,78490,78494],{"__ignoreMap":34},[39,78385,78386],{"class":41,"line":42},[39,78387,78388],{"class":45},"①变量之间交换值:\n",[39,78390,78391],{"class":41,"line":74},[39,78392,78393],{"class":45},"let a=1\n",[39,78395,78396],{"class":41,"line":99},[39,78397,78398],{"class":45},"let b=2;\n",[39,78400,78401],{"class":41,"line":106},[39,78402,78403],{"class":45},"必须加这行代码，不然就会报错\n",[39,78405,78406],{"class":41,"line":112},[39,78407,78408],{"class":45},"[b,a]=[a,b]\n",[39,78410,78411],{"class":41,"line":118},[39,78412,3458],{"emptyLinePlaceholder":1145},[39,78414,78415],{"class":41,"line":413},[39,78416,3458],{"emptyLinePlaceholder":1145},[39,78418,78419],{"class":41,"line":419},[39,78420,78421],{"class":45},"可以写成下面的方式：\n",[39,78423,78424],{"class":41,"line":425},[39,78425,78393],{"class":45},[39,78427,78428],{"class":41,"line":443},[39,78429,78430],{"class":45},"let b=2\n",[39,78432,78433],{"class":41,"line":449},[39,78434,78435],{"class":45},";[b,a]=[a,b]\n",[39,78437,78438],{"class":41,"line":455},[39,78439,3458],{"emptyLinePlaceholder":1145},[39,78441,78442],{"class":41,"line":461},[39,78443,78444],{"class":45},"②排序\n",[39,78446,78447],{"class":41,"line":475},[39,78448,78449],{"class":45},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[39,78451,78452,78455,78458],{"class":41,"line":665},[39,78453,78454],{"class":45},"for (let i = 0; i ",[39,78456,2108],{"class":78457},"s7hpK",[39,78459,78460],{"class":45}," arr1.length; i++) {\n",[39,78462,78463,78466,78468],{"class":41,"line":671},[39,78464,78465],{"class":45},"   for (let j = 0; j ",[39,78467,2108],{"class":78457},[39,78469,78470],{"class":45}," arr1.length - 1; j++) {\n",[39,78472,78473],{"class":41,"line":684},[39,78474,78475],{"class":45},"      if (arr1[j] > arr1[j + 1]) {\n",[39,78477,78478],{"class":41,"line":2732},[39,78479,78480],{"class":45},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[39,78482,78483],{"class":41,"line":2737},[39,78484,78485],{"class":45},"       }\n",[39,78487,78488],{"class":41,"line":2751},[39,78489,5367],{"class":45},[39,78491,78492],{"class":41,"line":2756},[39,78493,2630],{"class":45},[39,78495,78496],{"class":41,"line":2785},[39,78497,78498],{"class":45},"console.log(arr1)\n",[19,78500,78501],{},"数组解构的细节：",[19,78503,78504],{},"①变量多，单元值少",[19,78506,78507],{},[269,78508],{"alt":34,"src":78509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,78511,78512],{},"防止出现undefined的方法：",[19,78514,78515],{},"const [a=0,b=0] =[1]",[19,78517,78518],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,78520,78521],{},"②变量少，单元值多",[19,78523,78524],{},[269,78525],{"alt":34,"src":78526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,78528,78529],{},"此时可以使用剩余参数来接收多余的值",[19,78531,78532],{},"const [a,b,...c]=[1,2,3,4]",[19,78534,78535],{},"console.log(c) 输出[3,4]",[19,78537,78538],{},"③可以按需导入，忽略某些返回值",[19,78540,78541],{},[269,78542],{"alt":34,"src":78543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,78545,78546],{},"④支持多维数组的结构",[29,78548,78552],{"className":78549,"code":78550,"language":78551,"meta":34,"style":34},"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",[36,78553,78554,78582,78598,78613,78628],{"__ignoreMap":34},[39,78555,78556,78558,78560,78562,78564,78566,78568,78570,78573,78575,78577,78579],{"class":41,"line":42},[39,78557,7848],{"class":49},[39,78559,52887],{"class":45},[39,78561,50],{"class":49},[39,78563,53280],{"class":45},[39,78565,57],{"class":56},[39,78567,13491],{"class":45},[39,78569,63],{"class":56},[39,78571,78572],{"class":45},", [",[39,78574,68],{"class":56},[39,78576,13491],{"class":45},[39,78578,84],{"class":56},[39,78580,78581],{"class":45},"]]\n",[39,78583,78584,78587,78589,78591,78593,78595],{"class":41,"line":74},[39,78585,78586],{"class":45},"console.",[39,78588,59301],{"class":3021},[39,78590,4909],{"class":45},[39,78592,260],{"class":56},[39,78594,5274],{"class":45},[39,78596,78597],{"class":102},"  \u002F\u002F1\n",[39,78599,78600,78602,78604,78606,78608,78610],{"class":41,"line":99},[39,78601,78586],{"class":45},[39,78603,59301],{"class":3021},[39,78605,4909],{"class":45},[39,78607,57],{"class":56},[39,78609,5274],{"class":45},[39,78611,78612],{"class":102},"  \u002F\u002F2\n",[39,78614,78615,78617,78619,78621,78623,78625],{"class":41,"line":106},[39,78616,78586],{"class":45},[39,78618,59301],{"class":3021},[39,78620,4909],{"class":45},[39,78622,63],{"class":56},[39,78624,5274],{"class":45},[39,78626,78627],{"class":102},"  \u002F\u002F[3,4]\n",[39,78629,78630,78632,78634,78636,78638,78640,78642,78644],{"class":41,"line":112},[39,78631,78586],{"class":45},[39,78633,59301],{"class":3021},[39,78635,4909],{"class":45},[39,78637,63],{"class":56},[39,78639,5958],{"class":45},[39,78641,260],{"class":56},[39,78643,5274],{"class":45},[39,78645,78646],{"class":102},"  \u002F\u002F3\n",[29,78648,78650],{"className":78549,"code":78649,"language":78551,"meta":34,"style":34},"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",[36,78651,78652,78679,78690,78701],{"__ignoreMap":34},[39,78653,78654,78656,78659,78661,78663,78665,78667,78669,78671,78673,78675,78677],{"class":41,"line":42},[39,78655,7848],{"class":49},[39,78657,78658],{"class":45}," [a, b, c] ",[39,78660,50],{"class":49},[39,78662,53280],{"class":45},[39,78664,57],{"class":56},[39,78666,13491],{"class":45},[39,78668,63],{"class":56},[39,78670,78572],{"class":45},[39,78672,68],{"class":56},[39,78674,13491],{"class":45},[39,78676,84],{"class":56},[39,78678,78581],{"class":45},[39,78680,78681,78683,78685,78688],{"class":41,"line":74},[39,78682,78586],{"class":45},[39,78684,59301],{"class":3021},[39,78686,78687],{"class":45},"(a)",[39,78689,78597],{"class":102},[39,78691,78692,78694,78696,78699],{"class":41,"line":99},[39,78693,78586],{"class":45},[39,78695,59301],{"class":3021},[39,78697,78698],{"class":45},"(b)",[39,78700,78612],{"class":102},[39,78702,78703,78705,78707,78710],{"class":41,"line":106},[39,78704,78586],{"class":45},[39,78706,59301],{"class":3021},[39,78708,78709],{"class":45},"(c)",[39,78711,78627],{"class":102},[29,78713,78715],{"className":78549,"code":78714,"language":78551,"meta":34,"style":34},"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",[36,78716,78717,78744,78754,78764,78774],{"__ignoreMap":34},[39,78718,78719,78721,78724,78726,78728,78730,78732,78734,78736,78738,78740,78742],{"class":41,"line":42},[39,78720,7848],{"class":49},[39,78722,78723],{"class":45}," [a, b, [c, d]] ",[39,78725,50],{"class":49},[39,78727,53280],{"class":45},[39,78729,57],{"class":56},[39,78731,13491],{"class":45},[39,78733,63],{"class":56},[39,78735,78572],{"class":45},[39,78737,68],{"class":56},[39,78739,13491],{"class":45},[39,78741,84],{"class":56},[39,78743,78581],{"class":45},[39,78745,78746,78748,78750,78752],{"class":41,"line":74},[39,78747,78586],{"class":45},[39,78749,59301],{"class":3021},[39,78751,78687],{"class":45},[39,78753,78597],{"class":102},[39,78755,78756,78758,78760,78762],{"class":41,"line":99},[39,78757,78586],{"class":45},[39,78759,59301],{"class":3021},[39,78761,78698],{"class":45},[39,78763,78612],{"class":102},[39,78765,78766,78768,78770,78772],{"class":41,"line":106},[39,78767,78586],{"class":45},[39,78769,59301],{"class":3021},[39,78771,78709],{"class":45},[39,78773,78646],{"class":102},[39,78775,78776,78778,78780,78783],{"class":41,"line":112},[39,78777,78586],{"class":45},[39,78779,59301],{"class":3021},[39,78781,78782],{"class":45},"(d)",[39,78784,78785],{"class":102},"  \u002F\u002F4\n",[1188,78787,78789],{"id":78788},"_462-对象解构","4.6.2 对象解构",[19,78791,78792],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,78794,78795],{},"用的非常非常多！！！！！！",[23054,78797,78799],{"id":78798},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,78801,78802],{},"基本语法：",[1171,78804,78805,78808,78811,78814],{},[1174,78806,78807],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[1174,78809,78810],{},"对象属性的值将被赋值给与属性名相同的变量",[1174,78812,78813],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[1174,78815,78816],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[29,78818,78820],{"className":51687,"code":78819,"language":51689,"meta":34,"style":34},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[36,78821,78822,78827,78832,78837,78841],{"__ignoreMap":34},[39,78823,78824],{"class":41,"line":42},[39,78825,78826],{"class":45},"const obj = {\n",[39,78828,78829],{"class":41,"line":74},[39,78830,78831],{"class":45},"   uname: 'pink老师',\n",[39,78833,78834],{"class":41,"line":99},[39,78835,78836],{"class":45},"   age: 18,\n",[39,78838,78839],{"class":41,"line":106},[39,78840,2630],{"class":45},[39,78842,78843],{"class":41,"line":112},[39,78844,78845],{"class":45},"const { uname, age } = obj\n",[19,78847,78848],{},"上方代码这样写等价于：",[19,78850,78851],{},"const uname等价于obj.uname",[19,78853,78854],{},"变量名可以重新改名：",[19,78856,78857],{},"const uname='red老师'",[19,78859,78860],{},"const user={",[19,78862,78863],{},"  uname:'pink老师',",[19,78865,78866],{},"  age:18",[19,78868,2144],{},[19,78870,78871],{},"const {uname,age}=user",[19,78873,78874],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,78876,78877],{},"const {旧变量名：新变量名}=对象",[19,78879,78880],{},"const {uname:username,age}=user",[23054,78882,78884],{"id":78883},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,78886,78887],{},[269,78888],{"alt":34,"src":78889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23054,78891,78893],{"id":78892},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,78895,78896],{},[269,78897],{"alt":34,"src":78898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[29,78900,78902],{"className":54121,"code":78901,"language":54123,"meta":34,"style":34},"  \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",[36,78903,78904,78912,78917,78922,78927,78932,78937,78942,78947,78952,78956,78961,78966],{"__ignoreMap":34},[39,78905,78906,78908,78910],{"class":41,"line":42},[39,78907,53198],{"class":45},[39,78909,52867],{"class":52354},[39,78911,52361],{"class":45},[39,78913,78914],{"class":41,"line":74},[39,78915,78916],{"class":45},"    const pig = {\n",[39,78918,78919],{"class":41,"line":99},[39,78920,78921],{"class":45},"      name: '佩奇',\n",[39,78923,78924],{"class":41,"line":106},[39,78925,78926],{"class":45},"      family: {\n",[39,78928,78929],{"class":41,"line":112},[39,78930,78931],{"class":45},"        mother: '猪妈妈',\n",[39,78933,78934],{"class":41,"line":118},[39,78935,78936],{"class":45},"        father: '猪爸爸',\n",[39,78938,78939],{"class":41,"line":413},[39,78940,78941],{"class":45},"        sister: '乔治'\n",[39,78943,78944],{"class":41,"line":419},[39,78945,78946],{"class":45},"      },\n",[39,78948,78949],{"class":41,"line":425},[39,78950,78951],{"class":45},"      age: 6\n",[39,78953,78954],{"class":41,"line":443},[39,78955,3245],{"class":45},[39,78957,78958],{"class":41,"line":449},[39,78959,78960],{"class":45},"    \u002F\u002F 多级对象解构\n",[39,78962,78963],{"class":41,"line":455},[39,78964,78965],{"class":45},"    const { name, family: { mother, father, sister }, age } = pig\n",[39,78967,78968,78970,78972],{"class":41,"line":461},[39,78969,53471],{"class":45},[39,78971,52867],{"class":52354},[39,78973,52361],{"class":45},[19,78975,78976],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[29,78978,78981],{"className":78979,"code":78980,"language":77501,"meta":34,"style":34},"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",[36,78982,78983,78988,78999,79011,79023,79032,79036,79047,79059,79069,79074,79078,79088,79099,79108,79112,79116,79127,79138,79147,79151,79156],{"__ignoreMap":34},[39,78984,78985],{"class":41,"line":42},[39,78986,78987],{"class":102},"    \u002F\u002F 这是后台传递过来的数据\n",[39,78989,78990,78992,78995,78997],{"class":41,"line":74},[39,78991,12277],{"class":49},[39,78993,78994],{"class":45}," msg ",[39,78996,50],{"class":49},[39,78998,16628],{"class":45},[39,79000,79001,79004,79006,79009],{"class":41,"line":99},[39,79002,79003],{"class":1319},"      \"code\"",[39,79005,2057],{"class":49},[39,79007,79008],{"class":56}," 200",[39,79010,32521],{"class":45},[39,79012,79013,79016,79018,79021],{"class":41,"line":106},[39,79014,79015],{"class":1319},"      \"msg\"",[39,79017,2057],{"class":49},[39,79019,79020],{"class":1319}," \"获取新闻列表成功\"",[39,79022,32521],{"class":45},[39,79024,79025,79028,79030],{"class":41,"line":112},[39,79026,79027],{"class":1319},"      \"data\"",[39,79029,2057],{"class":49},[39,79031,56501],{"class":45},[39,79033,79034],{"class":41,"line":118},[39,79035,3568],{"class":45},[39,79037,79038,79041,79043,79045],{"class":41,"line":413},[39,79039,79040],{"class":1319},"          \"id\"",[39,79042,2057],{"class":49},[39,79044,26175],{"class":56},[39,79046,32521],{"class":45},[39,79048,79049,79052,79054,79057],{"class":41,"line":419},[39,79050,79051],{"class":1319},"          \"title\"",[39,79053,2057],{"class":49},[39,79055,79056],{"class":1319}," \"5G商用自己，三大运用商收入下降\"",[39,79058,32521],{"class":45},[39,79060,79061,79064,79066],{"class":41,"line":425},[39,79062,79063],{"class":1319},"          \"count\"",[39,79065,2057],{"class":49},[39,79067,79068],{"class":56}," 58\n",[39,79070,79071],{"class":41,"line":443},[39,79072,79073],{"class":45},"        },\n",[39,79075,79076],{"class":41,"line":449},[39,79077,3568],{"class":45},[39,79079,79080,79082,79084,79086],{"class":41,"line":455},[39,79081,79040],{"class":1319},[39,79083,2057],{"class":49},[39,79085,15811],{"class":56},[39,79087,32521],{"class":45},[39,79089,79090,79092,79094,79097],{"class":41,"line":461},[39,79091,79051],{"class":1319},[39,79093,2057],{"class":49},[39,79095,79096],{"class":1319}," \"国际媒体头条速览\"",[39,79098,32521],{"class":45},[39,79100,79101,79103,79105],{"class":41,"line":475},[39,79102,79063],{"class":1319},[39,79104,2057],{"class":49},[39,79106,79107],{"class":56}," 56\n",[39,79109,79110],{"class":41,"line":665},[39,79111,79073],{"class":45},[39,79113,79114],{"class":41,"line":671},[39,79115,3568],{"class":45},[39,79117,79118,79120,79122,79125],{"class":41,"line":684},[39,79119,79040],{"class":1319},[39,79121,2057],{"class":49},[39,79123,79124],{"class":56}," 3",[39,79126,32521],{"class":45},[39,79128,79129,79131,79133,79136],{"class":41,"line":2732},[39,79130,79051],{"class":1319},[39,79132,2057],{"class":49},[39,79134,79135],{"class":1319}," \"乌克兰和俄罗斯持续冲突\"",[39,79137,32521],{"class":45},[39,79139,79140,79142,79144],{"class":41,"line":2737},[39,79141,79063],{"class":1319},[39,79143,2057],{"class":49},[39,79145,79146],{"class":56}," 1669\n",[39,79148,79149],{"class":41,"line":2751},[39,79150,79073],{"class":45},[39,79152,79153],{"class":41,"line":2756},[39,79154,79155],{"class":45},"      ]\n",[39,79157,79158],{"class":41,"line":2785},[39,79159,3245],{"class":45},[19,79161,79162],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,79164,79165],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,79167,79168],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,79170,79171],{},"function({data}) {",[19,79173,79174],{},"console.log(data)",[19,79176,2144],{},[19,79178,79179],{},"render(msg)",[19,79181,79182],{},"实参传递给形参的时候解构了",[19,79184,79185],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,79187,79188],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,79190,79191],{},"function render({data:mydata}) {",[19,79193,79194],{},"  console.log(data)",[19,79196,2144],{},[1188,79198,79200],{"id":79199},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,79202,79203],{},"有两种情况：一个是数组结构，一个是立即执行函数",[1171,79205,79206],{},[1174,79207,79208],{},"如果对一个数组进行遍历，有两种方式：",[19,79210,79211],{},"①法1",[19,79213,79214],{},"const arr=[1,2,3]",[19,79216,79217],{},"arr.map(function(item,index) {",[19,79219,79220],{},"  console.log(item)",[19,79222,53518],{},[19,79224,79225],{},[269,79226],{"alt":34,"src":79227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,79229,79230],{},"②法2",[19,79232,79233],{},"const str='pink'",[19,79235,79236],{},"[1,2,3].map(function(item,index) {",[19,79238,79239],{},"console.log(item)",[19,79241,53518],{},[19,79243,79244],{},[269,79245],{"alt":34,"src":79246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,79248,79249],{},"此时会报错",[19,79251,79252],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,79254,79239],{},[19,79256,53518],{},[19,79258,79259],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79261,79263],{"id":79262},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,79265,79266],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,79268,79269],{},"可以理解为加强版的for循环",[19,79271,79272],{},[269,79273],{"alt":34,"src":79274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,79276,79277],{},"里边不写return，不返回数组，只遍历不返回",[19,79279,79280],{},"map是返回数组",[19,79282,79283],{},"forEach主要用于遍历数组对象",[29,79285,79287],{"className":54121,"code":79286,"language":54123,"meta":34,"style":34},"  \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",[36,79288,79289,79297,79302,79307,79312,79317,79321,79326],{"__ignoreMap":34},[39,79290,79291,79293,79295],{"class":41,"line":42},[39,79292,53198],{"class":45},[39,79294,52867],{"class":52354},[39,79296,52361],{"class":45},[39,79298,79299],{"class":41,"line":74},[39,79300,79301],{"class":45},"    const arr = ['red', 'green', 'pink']\n",[39,79303,79304],{"class":41,"line":99},[39,79305,79306],{"class":45},"    const result = arr.forEach(function (item, index) {\n",[39,79308,79309],{"class":41,"line":106},[39,79310,79311],{"class":45},"      console.log(item)\n",[39,79313,79314],{"class":41,"line":112},[39,79315,79316],{"class":45},"      console.log(index)\n",[39,79318,79319],{"class":41,"line":118},[39,79320,34516],{"class":45},[39,79322,79323],{"class":41,"line":413},[39,79324,79325],{"class":45},"    console.log(result)\n",[39,79327,79328,79330,79332],{"class":41,"line":419},[39,79329,53471],{"class":45},[39,79331,52867],{"class":52354},[39,79333,52361],{"class":45},[19,79335,79336],{},[269,79337],{"alt":34,"src":79338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,79340,79342],{"id":79341},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,79344,79345],{},[269,79346],{"alt":34,"src":79347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,79349,79350],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[29,79352,79354],{"className":54121,"code":79353,"language":54123,"meta":34,"style":34},"\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",[36,79355,79356,79364,79372,79377,79382,79386,79390,79395,79399,79404,79412],{"__ignoreMap":34},[39,79357,79358,79360,79362],{"class":41,"line":42},[39,79359,2108],{"class":45},[39,79361,52854],{"class":52354},[39,79363,52361],{"class":45},[39,79365,79366,79368,79370],{"class":41,"line":74},[39,79367,53198],{"class":45},[39,79369,52867],{"class":52354},[39,79371,52361],{"class":45},[39,79373,79374],{"class":41,"line":99},[39,79375,79376],{"class":45},"    const arr = [10, 20, 30]\n",[39,79378,79379],{"class":41,"line":106},[39,79380,79381],{"class":45},"    const newArr = arr.filter(function (item, index) {\n",[39,79383,79384],{"class":41,"line":112},[39,79385,79311],{"class":45},[39,79387,79388],{"class":41,"line":118},[39,79389,79316],{"class":45},[39,79391,79392],{"class":41,"line":413},[39,79393,79394],{"class":45},"      return item >= 20\n",[39,79396,79397],{"class":41,"line":419},[39,79398,34516],{"class":45},[39,79400,79401],{"class":41,"line":425},[39,79402,79403],{"class":45},"    console.log(newArr)\n",[39,79405,79406,79408,79410],{"class":41,"line":443},[39,79407,53471],{"class":45},[39,79409,52867],{"class":52354},[39,79411,52361],{"class":45},[39,79413,79414,79416,79418],{"class":41,"line":449},[39,79415,52839],{"class":45},[39,79417,52854],{"class":52354},[39,79419,52361],{"class":45},[19,79421,79422],{},"这个也可以写成箭头函数：",[29,79424,79426],{"className":51687,"code":79425,"language":51689,"meta":34,"style":34},"const newArr = arr.filter(item => item >= 20)\n",[36,79427,79428],{"__ignoreMap":34},[39,79429,79430],{"class":41,"line":42},[39,79431,79425],{"class":45},[14,79433,79435],{"id":79434},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,79437,79438],{},[269,79439],{"alt":34,"src":79440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,79442,79443],{},"步骤：",[19,79445,79446],{},"①：渲染页面模块",[2205,79448,79449,79452],{},[1174,79450,79451],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[1174,79453,79454],{},"用forEach+字符串的形式",[19,79456,79457],{},"②：点击不同需求，显示不同页面内容",[2205,79459,79460,79463,79466,79469,79472],{},[1174,79461,79462],{},"点击采取事件委托方式 .filter",[1174,79464,79465],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[1174,79467,79468],{},"筛选条件是根据点击的 data-index 来判断",[1174,79470,79471],{},"可以使用对象解构，把事件对象解构",[1174,79473,79474],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[29,79476,79478],{"className":51687,"code":79477,"language":51689,"meta":34,"style":34},"\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",[36,79479,79480,79490,79504,79508,79516,79530,79550,79562,79570,79576,79586,79596,79606,79610,79614,79620,79633,79645,79655,79667,79671,79675,79682,79695,79707,79724,79742,79755,79759,79763,79775,79785,79789,79793,79800,79841,79868,79878,79882,79886,79894,79906,79910,79914,79922,79934,79946,79957,79961,79965,79974,79986,79997,80001,80005,80014,80026,80038,80042,80046,80053,80063,80075,80087,80102,80106,80110,80118,80134,80144,80154,80164,80176,80180,80184,80194,80205,80215,80219,80227,80235,80239,80247,80262,80288,80313,80338,80357,80365,80379,80384,80389,80394,80399,80404,80412,80420,80425,80436,80441,80451,80461,80471,80481,80485,80489,80498,80507,80516,80525,80529,80533,80542,80551,80560,80569,80573,80577,80586,80595,80604,80613,80617,80621,80630,80639,80648,80657,80661,80665,80674,80683,80692,80701,80705,80709,80718,80727,80736,80745,80749,80753,80762,80771,80779,80788,80792,80796,80800,80805,80817,80822,80834,80838,80855,80883,80892,80897,80907,80917,80926,80931,80936,80940,80945,80962,80966,80971,80979,80984,81011,81016,81036,81041,81053,81058,81063,81068,81079,81093,81130,81148,81181,81198,81222,81226,81231,81237,81241,81245,81249,81257,81265,81269],{"__ignoreMap":34},[39,79481,79482,79484,79486,79488],{"class":41,"line":42},[39,79483,52351],{"class":45},[39,79485,52355],{"class":52354},[39,79487,52358],{"class":3021},[39,79489,52361],{"class":45},[39,79491,79492,79494,79496,79498,79500,79502],{"class":41,"line":74},[39,79493,2108],{"class":45},[39,79495,51689],{"class":52354},[39,79497,52370],{"class":3021},[39,79499,50],{"class":45},[39,79501,52375],{"class":1319},[39,79503,52361],{"class":45},[39,79505,79506],{"class":41,"line":99},[39,79507,3458],{"emptyLinePlaceholder":1145},[39,79509,79510,79512,79514],{"class":41,"line":106},[39,79511,2108],{"class":45},[39,79513,52388],{"class":52354},[39,79515,52361],{"class":45},[39,79517,79518,79520,79522,79524,79526,79528],{"class":41,"line":112},[39,79519,53198],{"class":45},[39,79521,52398],{"class":52354},[39,79523,52401],{"class":3021},[39,79525,50],{"class":45},[39,79527,52406],{"class":1319},[39,79529,52361],{"class":45},[39,79531,79532,79534,79536,79538,79540,79542,79544,79546,79548],{"class":41,"line":118},[39,79533,53198],{"class":45},[39,79535,52398],{"class":52354},[39,79537,15976],{"class":3021},[39,79539,50],{"class":45},[39,79541,52445],{"class":1319},[39,79543,52425],{"class":3021},[39,79545,50],{"class":45},[39,79547,52452],{"class":1319},[39,79549,52361],{"class":45},[39,79551,79552,79554,79556,79558,79560],{"class":41,"line":413},[39,79553,53198],{"class":45},[39,79555,52461],{"class":52354},[39,79557,52464],{"class":45},[39,79559,52461],{"class":52354},[39,79561,52361],{"class":45},[39,79563,79564,79566,79568],{"class":41,"line":419},[39,79565,53198],{"class":45},[39,79567,1133],{"class":52354},[39,79569,52361],{"class":45},[39,79571,79572,79574],{"class":41,"line":425},[39,79573,7459],{"class":52354},[39,79575,16628],{"class":45},[39,79577,79578,79580,79582,79584],{"class":41,"line":443},[39,79579,55749],{"class":56},[39,79581,52491],{"class":45},[39,79583,260],{"class":56},[39,79585,2359],{"class":45},[39,79587,79588,79590,79592,79594],{"class":41,"line":449},[39,79589,55760],{"class":56},[39,79591,52491],{"class":45},[39,79593,260],{"class":56},[39,79595,2359],{"class":45},[39,79597,79598,79600,79602,79604],{"class":41,"line":455},[39,79599,73650],{"class":56},[39,79601,52491],{"class":45},[39,79603,61559],{"class":56},[39,79605,2359],{"class":45},[39,79607,79608],{"class":41,"line":461},[39,79609,3245],{"class":45},[39,79611,79612],{"class":41,"line":475},[39,79613,3458],{"emptyLinePlaceholder":1145},[39,79615,79616,79618],{"class":41,"line":665},[39,79617,63177],{"class":3021},[39,79619,16628],{"class":45},[39,79621,79622,79624,79626,79629,79631],{"class":41,"line":671},[39,79623,55825],{"class":56},[39,79625,52491],{"class":45},[39,79627,79628],{"class":56},"990",[39,79630,52546],{"class":49},[39,79632,2359],{"class":45},[39,79634,79635,79637,79639,79641,79643],{"class":41,"line":684},[39,79636,55760],{"class":56},[39,79638,52491],{"class":45},[39,79640,260],{"class":56},[39,79642,52610],{"class":56},[39,79644,2359],{"class":45},[39,79646,79647,79649,79651,79653],{"class":41,"line":2732},[39,79648,56063],{"class":56},[39,79650,52491],{"class":45},[39,79652,52531],{"class":56},[39,79654,2359],{"class":45},[39,79656,79657,79660,79662,79665],{"class":41,"line":2737},[39,79658,79659],{"class":56},"      flex-wrap",[39,79661,52491],{"class":45},[39,79663,79664],{"class":56},"wrap",[39,79666,2359],{"class":45},[39,79668,79669],{"class":41,"line":2751},[39,79670,3245],{"class":45},[39,79672,79673],{"class":41,"line":2756},[39,79674,3458],{"emptyLinePlaceholder":1145},[39,79676,79677,79680],{"class":41,"line":2785},[39,79678,79679],{"class":3021},"    .item",[39,79681,16628],{"class":45},[39,79683,79684,79686,79688,79691,79693],{"class":41,"line":2790},[39,79685,55825],{"class":56},[39,79687,52491],{"class":45},[39,79689,79690],{"class":56},"240",[39,79692,52546],{"class":49},[39,79694,2359],{"class":45},[39,79696,79697,79699,79701,79703,79705],{"class":41,"line":2807},[39,79698,63054],{"class":56},[39,79700,52491],{"class":45},[39,79702,146],{"class":56},[39,79704,52546],{"class":49},[39,79706,2359],{"class":45},[39,79708,79709,79711,79713,79715,79717,79720,79722],{"class":41,"line":2812},[39,79710,55749],{"class":56},[39,79712,52491],{"class":45},[39,79714,1898],{"class":56},[39,79716,52546],{"class":49},[39,79718,79719],{"class":56}," 30",[39,79721,52546],{"class":49},[39,79723,2359],{"class":45},[39,79725,79726,79728,79730,79732,79735,79738,79740],{"class":41,"line":2817},[39,79727,62914],{"class":56},[39,79729,52491],{"class":45},[39,79731,29178],{"class":56},[39,79733,79734],{"class":56}," ease",[39,79736,79737],{"class":56}," .5",[39,79739,392],{"class":49},[39,79741,2359],{"class":45},[39,79743,79744,79747,79749,79751,79753],{"class":41,"line":2822},[39,79745,79746],{"class":56},"      margin-bottom",[39,79748,52491],{"class":45},[39,79750,1898],{"class":56},[39,79752,52546],{"class":49},[39,79754,2359],{"class":45},[39,79756,79757],{"class":41,"line":2836},[39,79758,3245],{"class":45},[39,79760,79761],{"class":41,"line":2841},[39,79762,3458],{"emptyLinePlaceholder":1145},[39,79764,79765,79768,79770,79773],{"class":41,"line":3635},[39,79766,79767],{"class":3021},"    .item:nth-child",[39,79769,1221],{"class":45},[39,79771,79772],{"class":56},"4n",[39,79774,13498],{"class":45},[39,79776,79777,79779,79781,79783],{"class":41,"line":3649},[39,79778,63054],{"class":56},[39,79780,52491],{"class":45},[39,79782,260],{"class":56},[39,79784,2359],{"class":45},[39,79786,79787],{"class":41,"line":3657},[39,79788,3245],{"class":45},[39,79790,79791],{"class":41,"line":3662},[39,79792,3458],{"emptyLinePlaceholder":1145},[39,79794,79795,79798],{"class":41,"line":3668},[39,79796,79797],{"class":3021},"    .item:hover",[39,79799,16628],{"class":45},[39,79801,79802,79805,79807,79809,79811,79813,79815,79817,79819,79822,79824,79826,79828,79830,79832,79834,79836,79839],{"class":41,"line":3674},[39,79803,79804],{"class":56},"      box-shadow",[39,79806,52491],{"class":45},[39,79808,260],{"class":56},[39,79810,52546],{"class":49},[39,79812,5151],{"class":56},[39,79814,52546],{"class":49},[39,79816,3206],{"class":56},[39,79818,52546],{"class":49},[39,79820,79821],{"class":56}," rgba",[39,79823,1221],{"class":45},[39,79825,260],{"class":56},[39,79827,13491],{"class":45},[39,79829,260],{"class":56},[39,79831,13491],{"class":45},[39,79833,260],{"class":56},[39,79835,13491],{"class":45},[39,79837,79838],{"class":56},".2",[39,79840,3777],{"class":45},[39,79842,79843,79846,79848,79851,79853,79855,79857,79860,79862,79864,79866],{"class":41,"line":3679},[39,79844,79845],{"class":56},"      transform",[39,79847,52491],{"class":45},[39,79849,79850],{"class":56},"translate3d",[39,79852,1221],{"class":45},[39,79854,260],{"class":56},[39,79856,13491],{"class":45},[39,79858,79859],{"class":56},"-4",[39,79861,52546],{"class":49},[39,79863,13491],{"class":45},[39,79865,260],{"class":56},[39,79867,3777],{"class":45},[39,79869,79870,79872,79874,79876],{"class":41,"line":9004},[39,79871,63079],{"class":56},[39,79873,52491],{"class":45},[39,79875,63084],{"class":56},[39,79877,2359],{"class":45},[39,79879,79880],{"class":41,"line":9028},[39,79881,3245],{"class":45},[39,79883,79884],{"class":41,"line":9033},[39,79885,3458],{"emptyLinePlaceholder":1145},[39,79887,79888,79890,79892],{"class":41,"line":9039},[39,79889,79679],{"class":3021},[39,79891,56669],{"class":52354},[39,79893,16628],{"class":45},[39,79895,79896,79898,79900,79902,79904],{"class":41,"line":9066},[39,79897,55825],{"class":56},[39,79899,52491],{"class":45},[39,79901,1519],{"class":56},[39,79903,1534],{"class":49},[39,79905,2359],{"class":45},[39,79907,79908],{"class":41,"line":9071},[39,79909,3245],{"class":45},[39,79911,79912],{"class":41,"line":9077},[39,79913,3458],{"emptyLinePlaceholder":1145},[39,79915,79916,79918,79920],{"class":41,"line":9089},[39,79917,79679],{"class":3021},[39,79919,63358],{"class":3021},[39,79921,16628],{"class":45},[39,79923,79924,79926,79928,79930,79932],{"class":41,"line":9101},[39,79925,55976],{"class":56},[39,79927,52491],{"class":45},[39,79929,1849],{"class":56},[39,79931,52546],{"class":49},[39,79933,2359],{"class":45},[39,79935,79936,79938,79940,79942,79944],{"class":41,"line":9113},[39,79937,79746],{"class":56},[39,79939,52491],{"class":45},[39,79941,146],{"class":56},[39,79943,52546],{"class":49},[39,79945,2359],{"class":45},[39,79947,79948,79950,79952,79955],{"class":41,"line":10772},[39,79949,58470],{"class":56},[39,79951,52491],{"class":45},[39,79953,79954],{"class":56},"#666",[39,79956,2359],{"class":45},[39,79958,79959],{"class":41,"line":10797},[39,79960,3245],{"class":45},[39,79962,79963],{"class":41,"line":10820},[39,79964,3458],{"emptyLinePlaceholder":1145},[39,79966,79967,79969,79972],{"class":41,"line":10844},[39,79968,79679],{"class":3021},[39,79970,79971],{"class":3021}," .price",[39,79973,16628],{"class":45},[39,79975,79976,79978,79980,79982,79984],{"class":41,"line":10849},[39,79977,55976],{"class":56},[39,79979,52491],{"class":45},[39,79981,1948],{"class":56},[39,79983,52546],{"class":49},[39,79985,2359],{"class":45},[39,79987,79988,79990,79992,79995],{"class":41,"line":10854},[39,79989,58470],{"class":56},[39,79991,52491],{"class":45},[39,79993,79994],{"class":56},"firebrick",[39,79996,2359],{"class":45},[39,79998,79999],{"class":41,"line":10859},[39,80000,3245],{"class":45},[39,80002,80003],{"class":41,"line":10868},[39,80004,3458],{"emptyLinePlaceholder":1145},[39,80006,80007,80009,80012],{"class":41,"line":10873},[39,80008,79679],{"class":3021},[39,80010,80011],{"class":3021}," .price::before",[39,80013,16628],{"class":45},[39,80015,80016,80019,80021,80024],{"class":41,"line":10879},[39,80017,80018],{"class":56},"      content",[39,80020,52491],{"class":45},[39,80022,80023],{"class":1319},"'￥'",[39,80025,2359],{"class":45},[39,80027,80028,80030,80032,80034,80036],{"class":41,"line":10900},[39,80029,55976],{"class":56},[39,80031,52491],{"class":45},[39,80033,1749],{"class":56},[39,80035,52546],{"class":49},[39,80037,2359],{"class":45},[39,80039,80040],{"class":41,"line":10906},[39,80041,3245],{"class":45},[39,80043,80044],{"class":41,"line":10920},[39,80045,3458],{"emptyLinePlaceholder":1145},[39,80047,80048,80051],{"class":41,"line":10926},[39,80049,80050],{"class":3021},"    .filter",[39,80052,16628],{"class":45},[39,80054,80055,80057,80059,80061],{"class":41,"line":10953},[39,80056,56063],{"class":56},[39,80058,52491],{"class":45},[39,80060,52531],{"class":56},[39,80062,2359],{"class":45},[39,80064,80065,80067,80069,80071,80073],{"class":41,"line":10962},[39,80066,55825],{"class":56},[39,80068,52491],{"class":45},[39,80070,79628],{"class":56},[39,80072,52546],{"class":49},[39,80074,2359],{"class":45},[39,80076,80077,80079,80081,80083,80085],{"class":41,"line":10968},[39,80078,55760],{"class":56},[39,80080,52491],{"class":45},[39,80082,260],{"class":56},[39,80084,52610],{"class":56},[39,80086,2359],{"class":45},[39,80088,80089,80091,80093,80095,80097,80099],{"class":41,"line":10976},[39,80090,55749],{"class":56},[39,80092,52491],{"class":45},[39,80094,1855],{"class":56},[39,80096,52546],{"class":49},[39,80098,79719],{"class":56},[39,80100,80101],{"class":49},"px\n",[39,80103,80104],{"class":41,"line":10981},[39,80105,3245],{"class":45},[39,80107,80108],{"class":41,"line":17660},[39,80109,3458],{"emptyLinePlaceholder":1145},[39,80111,80112,80114,80116],{"class":41,"line":17666},[39,80113,80050],{"class":3021},[39,80115,2464],{"class":52354},[39,80117,16628],{"class":45},[39,80119,80120,80122,80124,80126,80128,80130,80132],{"class":41,"line":17689},[39,80121,55749],{"class":56},[39,80123,52491],{"class":45},[39,80125,146],{"class":56},[39,80127,52546],{"class":49},[39,80129,10006],{"class":56},[39,80131,52546],{"class":49},[39,80133,2359],{"class":45},[39,80135,80136,80138,80140,80142],{"class":41,"line":17695},[39,80137,62775],{"class":56},[39,80139,52491],{"class":45},[39,80141,62872],{"class":56},[39,80143,2359],{"class":45},[39,80145,80146,80148,80150,80152],{"class":41,"line":17718},[39,80147,58470],{"class":56},[39,80149,52491],{"class":45},[39,80151,79954],{"class":56},[39,80153,2359],{"class":45},[39,80155,80156,80158,80160,80162],{"class":41,"line":17732},[39,80157,65024],{"class":56},[39,80159,52491],{"class":45},[39,80161,55791],{"class":56},[39,80163,2359],{"class":45},[39,80165,80166,80168,80170,80172,80174],{"class":41,"line":17752},[39,80167,62804],{"class":56},[39,80169,52491],{"class":45},[39,80171,1898],{"class":56},[39,80173,52546],{"class":49},[39,80175,2359],{"class":45},[39,80177,80178],{"class":41,"line":17758},[39,80179,3245],{"class":45},[39,80181,80182],{"class":41,"line":17769},[39,80183,3458],{"emptyLinePlaceholder":1145},[39,80185,80186,80188,80190,80192],{"class":41,"line":17792},[39,80187,80050],{"class":3021},[39,80189,2464],{"class":52354},[39,80191,62954],{"class":3021},[39,80193,16628],{"class":45},[39,80195,80196,80198,80200,80203],{"class":41,"line":17814},[39,80197,55938],{"class":56},[39,80199,52491],{"class":45},[39,80201,80202],{"class":56},"#05943c",[39,80204,2359],{"class":45},[39,80206,80207,80209,80211,80213],{"class":41,"line":17819},[39,80208,58470],{"class":56},[39,80210,52491],{"class":45},[39,80212,61896],{"class":56},[39,80214,2359],{"class":45},[39,80216,80217],{"class":41,"line":17825},[39,80218,3245],{"class":45},[39,80220,80221,80223,80225],{"class":41,"line":17839},[39,80222,53471],{"class":45},[39,80224,1133],{"class":52354},[39,80226,52361],{"class":45},[39,80228,80229,80231,80233],{"class":41,"line":17852},[39,80230,52839],{"class":45},[39,80232,52388],{"class":52354},[39,80234,52361],{"class":45},[39,80236,80237],{"class":41,"line":17857},[39,80238,3458],{"emptyLinePlaceholder":1145},[39,80240,80241,80243,80245],{"class":41,"line":17871},[39,80242,2108],{"class":45},[39,80244,52854],{"class":52354},[39,80246,52361],{"class":45},[39,80248,80249,80251,80253,80255,80257,80260],{"class":41,"line":17876},[39,80250,53198],{"class":45},[39,80252,52665],{"class":52354},[39,80254,54540],{"class":3021},[39,80256,50],{"class":45},[39,80258,80259],{"class":1319},"\"filter\"",[39,80261,52361],{"class":45},[39,80263,80264,80266,80268,80270,80272,80274,80277,80279,80281,80284,80286],{"class":41,"line":17882},[39,80265,52395],{"class":45},[39,80267,46],{"class":52354},[39,80269,62111],{"class":3021},[39,80271,50],{"class":45},[39,80273,62116],{"class":1319},[39,80275,80276],{"class":3021}," data-index",[39,80278,50],{"class":45},[39,80280,4736],{"class":1319},[39,80282,80283],{"class":45},">0-100元\u003C\u002F",[39,80285,46],{"class":52354},[39,80287,52361],{"class":45},[39,80289,80290,80292,80294,80296,80298,80300,80302,80304,80306,80309,80311],{"class":41,"line":17887},[39,80291,52395],{"class":45},[39,80293,46],{"class":52354},[39,80295,62111],{"class":3021},[39,80297,50],{"class":45},[39,80299,62116],{"class":1319},[39,80301,80276],{"class":3021},[39,80303,50],{"class":45},[39,80305,4759],{"class":1319},[39,80307,80308],{"class":45},">100-300元\u003C\u002F",[39,80310,46],{"class":52354},[39,80312,52361],{"class":45},[39,80314,80315,80317,80319,80321,80323,80325,80327,80329,80331,80334,80336],{"class":41,"line":17901},[39,80316,52395],{"class":45},[39,80318,46],{"class":52354},[39,80320,62111],{"class":3021},[39,80322,50],{"class":45},[39,80324,62116],{"class":1319},[39,80326,80276],{"class":3021},[39,80328,50],{"class":45},[39,80330,4772],{"class":1319},[39,80332,80333],{"class":45},">300元以上\u003C\u002F",[39,80335,46],{"class":52354},[39,80337,52361],{"class":45},[39,80339,80340,80342,80344,80346,80348,80350,80353,80355],{"class":41,"line":17906},[39,80341,52395],{"class":45},[39,80343,46],{"class":52354},[39,80345,62111],{"class":3021},[39,80347,50],{"class":45},[39,80349,62116],{"class":1319},[39,80351,80352],{"class":45},">全部区间\u003C\u002F",[39,80354,46],{"class":52354},[39,80356,52361],{"class":45},[39,80358,80359,80361,80363],{"class":41,"line":17911},[39,80360,53471],{"class":45},[39,80362,52665],{"class":52354},[39,80364,52361],{"class":45},[39,80366,80367,80369,80371,80373,80375,80377],{"class":41,"line":17925},[39,80368,53198],{"class":45},[39,80370,52665],{"class":52354},[39,80372,54540],{"class":3021},[39,80374,50],{"class":45},[39,80376,63662],{"class":1319},[39,80378,52361],{"class":45},[39,80380,80381],{"class":41,"line":17937},[39,80382,80383],{"class":102},"    \u003C!-- \u003Cdiv class=\"item\">\n",[39,80385,80386],{"class":41,"line":17942},[39,80387,80388],{"class":102},"      \u003Cimg src=\"\" alt=\"\">\n",[39,80390,80391],{"class":41,"line":17955},[39,80392,80393],{"class":102},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[39,80395,80396],{"class":41,"line":17960},[39,80397,80398],{"class":102},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[39,80400,80401],{"class":41,"line":17965},[39,80402,80403],{"class":102},"    \u003C\u002Fdiv> -->\n",[39,80405,80406,80408,80410],{"class":41,"line":17970},[39,80407,53471],{"class":45},[39,80409,52665],{"class":52354},[39,80411,52361],{"class":45},[39,80413,80414,80416,80418],{"class":41,"line":17983},[39,80415,53198],{"class":45},[39,80417,52867],{"class":52354},[39,80419,52361],{"class":45},[39,80421,80422],{"class":41,"line":17988},[39,80423,80424],{"class":102},"    \u002F\u002F 2. 初始化数据\n",[39,80426,80427,80429,80432,80434],{"class":41,"line":33688},[39,80428,12277],{"class":49},[39,80430,80431],{"class":56}," goodsList",[39,80433,14620],{"class":49},[39,80435,56501],{"class":45},[39,80437,80438],{"class":41,"line":33694},[39,80439,80440],{"class":45},"      {\n",[39,80442,80443,80446,80449],{"class":41,"line":33700},[39,80444,80445],{"class":45},"        id: ",[39,80447,80448],{"class":1319},"'4001172'",[39,80450,32521],{"class":45},[39,80452,80453,80456,80459],{"class":41,"line":33706},[39,80454,80455],{"class":45},"        name: ",[39,80457,80458],{"class":1319},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[39,80460,32521],{"class":45},[39,80462,80463,80466,80469],{"class":41,"line":33712},[39,80464,80465],{"class":45},"        price: ",[39,80467,80468],{"class":1319},"'289.00'",[39,80470,32521],{"class":45},[39,80472,80473,80476,80479],{"class":41,"line":33723},[39,80474,80475],{"class":45},"        picture: ",[39,80477,80478],{"class":1319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[39,80480,32521],{"class":45},[39,80482,80483],{"class":41,"line":33729},[39,80484,78946],{"class":45},[39,80486,80487],{"class":41,"line":33749},[39,80488,80440],{"class":45},[39,80490,80491,80493,80496],{"class":41,"line":33755},[39,80492,80445],{"class":45},[39,80494,80495],{"class":1319},"'4001594'",[39,80497,32521],{"class":45},[39,80499,80500,80502,80505],{"class":41,"line":33766},[39,80501,80455],{"class":45},[39,80503,80504],{"class":1319},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[39,80506,32521],{"class":45},[39,80508,80509,80511,80514],{"class":41,"line":33772},[39,80510,80465],{"class":45},[39,80512,80513],{"class":1319},"'288.00'",[39,80515,32521],{"class":45},[39,80517,80518,80520,80523],{"class":41,"line":33778},[39,80519,80475],{"class":45},[39,80521,80522],{"class":1319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[39,80524,32521],{"class":45},[39,80526,80527],{"class":41,"line":33784},[39,80528,78946],{"class":45},[39,80530,80531],{"class":41,"line":33790},[39,80532,80440],{"class":45},[39,80534,80535,80537,80540],{"class":41,"line":33796},[39,80536,80445],{"class":45},[39,80538,80539],{"class":1319},"'4001009'",[39,80541,32521],{"class":45},[39,80543,80544,80546,80549],{"class":41,"line":33802},[39,80545,80455],{"class":45},[39,80547,80548],{"class":1319},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[39,80550,32521],{"class":45},[39,80552,80553,80555,80558],{"class":41,"line":33808},[39,80554,80465],{"class":45},[39,80556,80557],{"class":1319},"'109.00'",[39,80559,32521],{"class":45},[39,80561,80562,80564,80567],{"class":41,"line":33828},[39,80563,80475],{"class":45},[39,80565,80566],{"class":1319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[39,80568,32521],{"class":45},[39,80570,80571],{"class":41,"line":33834},[39,80572,78946],{"class":45},[39,80574,80575],{"class":41,"line":33850},[39,80576,80440],{"class":45},[39,80578,80579,80581,80584],{"class":41,"line":33856},[39,80580,80445],{"class":45},[39,80582,80583],{"class":1319},"'4001874'",[39,80585,32521],{"class":45},[39,80587,80588,80590,80593],{"class":41,"line":33870},[39,80589,80455],{"class":45},[39,80591,80592],{"class":1319},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[39,80594,32521],{"class":45},[39,80596,80597,80599,80602],{"class":41,"line":33876},[39,80598,80465],{"class":45},[39,80600,80601],{"class":1319},"'488.00'",[39,80603,32521],{"class":45},[39,80605,80606,80608,80611],{"class":41,"line":33891},[39,80607,80475],{"class":45},[39,80609,80610],{"class":1319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[39,80612,32521],{"class":45},[39,80614,80615],{"class":41,"line":33897},[39,80616,78946],{"class":45},[39,80618,80619],{"class":41,"line":33906},[39,80620,80440],{"class":45},[39,80622,80623,80625,80628],{"class":41,"line":33912},[39,80624,80445],{"class":45},[39,80626,80627],{"class":1319},"'4001649'",[39,80629,32521],{"class":45},[39,80631,80632,80634,80637],{"class":41,"line":33921},[39,80633,80455],{"class":45},[39,80635,80636],{"class":1319},"'大师监制龙泉青瓷茶叶罐'",[39,80638,32521],{"class":45},[39,80640,80641,80643,80646],{"class":41,"line":33927},[39,80642,80465],{"class":45},[39,80644,80645],{"class":1319},"'139.00'",[39,80647,32521],{"class":45},[39,80649,80650,80652,80655],{"class":41,"line":33933},[39,80651,80475],{"class":45},[39,80653,80654],{"class":1319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[39,80656,32521],{"class":45},[39,80658,80659],{"class":41,"line":33942},[39,80660,78946],{"class":45},[39,80662,80663],{"class":41,"line":33948},[39,80664,80440],{"class":45},[39,80666,80667,80669,80672],{"class":41,"line":33959},[39,80668,80445],{"class":45},[39,80670,80671],{"class":1319},"'3997185'",[39,80673,32521],{"class":45},[39,80675,80676,80678,80681],{"class":41,"line":33965},[39,80677,80455],{"class":45},[39,80679,80680],{"class":1319},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[39,80682,32521],{"class":45},[39,80684,80685,80687,80690],{"class":41,"line":33984},[39,80686,80465],{"class":45},[39,80688,80689],{"class":1319},"'108.00'",[39,80691,32521],{"class":45},[39,80693,80694,80696,80699],{"class":41,"line":33990},[39,80695,80475],{"class":45},[39,80697,80698],{"class":1319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[39,80700,32521],{"class":45},[39,80702,80703],{"class":41,"line":34001},[39,80704,78946],{"class":45},[39,80706,80707],{"class":41,"line":34007},[39,80708,80440],{"class":45},[39,80710,80711,80713,80716],{"class":41,"line":34027},[39,80712,80445],{"class":45},[39,80714,80715],{"class":1319},"'3997403'",[39,80717,32521],{"class":45},[39,80719,80720,80722,80725],{"class":41,"line":34043},[39,80721,80455],{"class":45},[39,80723,80724],{"class":1319},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[39,80726,32521],{"class":45},[39,80728,80729,80731,80734],{"class":41,"line":34049},[39,80730,80465],{"class":45},[39,80732,80733],{"class":1319},"'100.00'",[39,80735,32521],{"class":45},[39,80737,80738,80740,80743],{"class":41,"line":34063},[39,80739,80475],{"class":45},[39,80741,80742],{"class":1319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[39,80744,32521],{"class":45},[39,80746,80747],{"class":41,"line":34069},[39,80748,78946],{"class":45},[39,80750,80751],{"class":41,"line":34075},[39,80752,80440],{"class":45},[39,80754,80755,80757,80760],{"class":41,"line":34086},[39,80756,80445],{"class":45},[39,80758,80759],{"class":1319},"'3998274'",[39,80761,32521],{"class":45},[39,80763,80764,80766,80769],{"class":41,"line":34092},[39,80765,80455],{"class":45},[39,80767,80768],{"class":1319},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[39,80770,32521],{"class":45},[39,80772,80773,80775,80777],{"class":41,"line":34098},[39,80774,80465],{"class":45},[39,80776,80645],{"class":1319},[39,80778,32521],{"class":45},[39,80780,80781,80783,80786],{"class":41,"line":34108},[39,80782,80475],{"class":45},[39,80784,80785],{"class":1319},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[39,80787,32521],{"class":45},[39,80789,80790],{"class":41,"line":34114},[39,80791,78946],{"class":45},[39,80793,80794],{"class":41,"line":34125},[39,80795,54163],{"class":45},[39,80797,80798],{"class":41,"line":34131},[39,80799,3458],{"emptyLinePlaceholder":1145},[39,80801,80802],{"class":41,"line":34141},[39,80803,80804],{"class":102},"    \u002F\u002F 1.渲染函数\n",[39,80806,80807,80809,80811,80813,80815],{"class":41,"line":34146},[39,80808,71138],{"class":49},[39,80810,71141],{"class":3021},[39,80812,1221],{"class":45},[39,80814,4938],{"class":254},[39,80816,13498],{"class":45},[39,80818,80819],{"class":41,"line":34152},[39,80820,80821],{"class":102},"      \u002F\u002F 声明空字符串\n",[39,80823,80824,80827,80830,80832],{"class":41,"line":34201},[39,80825,80826],{"class":49},"      let",[39,80828,80829],{"class":45}," str ",[39,80831,50],{"class":49},[39,80833,71158],{"class":1319},[39,80835,80836],{"class":41,"line":34248},[39,80837,71163],{"class":102},[39,80839,80840,80842,80845,80847,80850,80853],{"class":41,"line":34253},[39,80841,59061],{"class":45},[39,80843,80844],{"class":3021},"forEach",[39,80846,1221],{"class":45},[39,80848,80849],{"class":254},"item",[39,80851,80852],{"class":49}," =>",[39,80854,16628],{"class":45},[39,80856,80857,80859,80862,80865,80867,80870,80872,80875,80878,80880],{"class":41,"line":34259},[39,80858,62324],{"class":49},[39,80860,80861],{"class":45}," { ",[39,80863,80864],{"class":56},"name",[39,80866,13491],{"class":45},[39,80868,80869],{"class":56},"price",[39,80871,13491],{"class":45},[39,80873,80874],{"class":56},"picture",[39,80876,80877],{"class":45}," } ",[39,80879,50],{"class":49},[39,80881,80882],{"class":45}," item\n",[39,80884,80885,80888,80890],{"class":41,"line":34278},[39,80886,80887],{"class":45},"        str ",[39,80889,10533],{"class":49},[39,80891,71222],{"class":1319},[39,80893,80894],{"class":41,"line":34284},[39,80895,80896],{"class":1319},"          \u003Cdiv class=\"item\">\n",[39,80898,80899,80902,80904],{"class":41,"line":34304},[39,80900,80901],{"class":1319},"            \u003Cimg src=\"${",[39,80903,80874],{"class":45},[39,80905,80906],{"class":1319},"}\" alt=\"\">\n",[39,80908,80909,80912,80914],{"class":41,"line":34310},[39,80910,80911],{"class":1319},"            \u003Cp class=\"name\">${",[39,80913,80864],{"class":45},[39,80915,80916],{"class":1319},"}\u003C\u002Fp>\n",[39,80918,80919,80922,80924],{"class":41,"line":34316},[39,80920,80921],{"class":1319},"            \u003Cp class=\"price\">${",[39,80923,80869],{"class":45},[39,80925,80916],{"class":1319},[39,80927,80928],{"class":41,"line":34326},[39,80929,80930],{"class":1319},"          \u003C\u002Fdiv>\n",[39,80932,80933],{"class":41,"line":34331},[39,80934,80935],{"class":1319},"        `\n",[39,80937,80938],{"class":41,"line":34337},[39,80939,65869],{"class":45},[39,80941,80942],{"class":41,"line":34353},[39,80943,80944],{"class":102},"      \u002F\u002F 追加给List\n",[39,80946,80947,80949,80951,80953,80956,80958,80960],{"class":41,"line":34398},[39,80948,56825],{"class":45},[39,80950,55453],{"class":3021},[39,80952,1221],{"class":45},[39,80954,80955],{"class":1319},"'.list'",[39,80957,75303],{"class":45},[39,80959,50],{"class":49},[39,80961,75039],{"class":45},[39,80963,80964],{"class":41,"line":34404},[39,80965,3245],{"class":45},[39,80967,80968],{"class":41,"line":34410},[39,80969,80970],{"class":102},"    \u002F\u002F 页面一打开就需要渲染\n",[39,80972,80973,80976],{"class":41,"line":34416},[39,80974,80975],{"class":3021},"    render",[39,80977,80978],{"class":45},"(goodsList)\n",[39,80980,80981],{"class":41,"line":34427},[39,80982,80983],{"class":102},"    \u002F\u002F 2.过滤筛选\n",[39,80985,80986,80988,80990,80992,80995,80997,80999,81001,81003,81005,81007,81009],{"class":41,"line":34433},[39,80987,53461],{"class":45},[39,80989,55453],{"class":3021},[39,80991,1221],{"class":45},[39,80993,80994],{"class":1319},"'.filter'",[39,80996,31881],{"class":45},[39,80998,58867],{"class":3021},[39,81000,1221],{"class":45},[39,81002,58872],{"class":1319},[39,81004,13491],{"class":45},[39,81006,1290],{"class":254},[39,81008,80852],{"class":49},[39,81010,16628],{"class":45},[39,81012,81013],{"class":41,"line":34439},[39,81014,81015],{"class":102},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[39,81017,81018,81020,81022,81025,81027,81029,81031,81033],{"class":41,"line":34445},[39,81019,59282],{"class":49},[39,81021,80861],{"class":45},[39,81023,81024],{"class":56},"tagName",[39,81026,13491],{"class":45},[39,81028,32592],{"class":56},[39,81030,80877],{"class":45},[39,81032,50],{"class":49},[39,81034,81035],{"class":45}," e.target\n",[39,81037,81038],{"class":41,"line":34463},[39,81039,81040],{"class":102},"      \u002F\u002F 判断\n",[39,81042,81043,81045,81047,81049,81051],{"class":41,"line":34477},[39,81044,55534],{"class":49},[39,81046,68088],{"class":45},[39,81048,55540],{"class":49},[39,81050,69310],{"class":1319},[39,81052,13498],{"class":45},[39,81054,81055],{"class":41,"line":34486},[39,81056,81057],{"class":102},"        \u002F\u002F console.log(11)\n",[39,81059,81060],{"class":41,"line":34495},[39,81061,81062],{"class":102},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[39,81064,81065],{"class":41,"line":34504},[39,81066,81067],{"class":102},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[39,81069,81070,81072,81074,81076],{"class":41,"line":34513},[39,81071,52884],{"class":49},[39,81073,52887],{"class":45},[39,81075,50],{"class":49},[39,81077,81078],{"class":45}," goodsList\n",[39,81080,81081,81083,81086,81088,81091],{"class":41,"line":34519},[39,81082,3555],{"class":49},[39,81084,81085],{"class":45}," (dataset.index ",[39,81087,55540],{"class":49},[39,81089,81090],{"class":1319}," '1'",[39,81092,13498],{"class":45},[39,81094,81095,81098,81100,81103,81106,81108,81110,81112,81115,81117,81119,81122,81124,81126,81128],{"class":41,"line":34525},[39,81096,81097],{"class":45},"          arr ",[39,81099,50],{"class":49},[39,81101,81102],{"class":45}," goodsList.",[39,81104,81105],{"class":3021},"filter",[39,81107,1221],{"class":45},[39,81109,80849],{"class":254},[39,81111,80852],{"class":49},[39,81113,81114],{"class":45}," item.price ",[39,81116,2768],{"class":49},[39,81118,5151],{"class":56},[39,81120,81121],{"class":49}," &&",[39,81123,81114],{"class":45},[39,81125,2653],{"class":49},[39,81127,6810],{"class":56},[39,81129,209],{"class":45},[39,81131,81132,81135,81137,81139,81141,81143,81146],{"class":41,"line":34533},[39,81133,81134],{"class":45},"        } ",[39,81136,2759],{"class":49},[39,81138,2762],{"class":49},[39,81140,81085],{"class":45},[39,81142,55540],{"class":49},[39,81144,81145],{"class":1319}," '2'",[39,81147,13498],{"class":45},[39,81149,81150,81152,81154,81156,81158,81160,81162,81164,81166,81168,81170,81172,81174,81176,81179],{"class":41,"line":34538},[39,81151,81097],{"class":45},[39,81153,50],{"class":49},[39,81155,81102],{"class":45},[39,81157,81105],{"class":3021},[39,81159,1221],{"class":45},[39,81161,80849],{"class":254},[39,81163,80852],{"class":49},[39,81165,81114],{"class":45},[39,81167,2768],{"class":49},[39,81169,6810],{"class":56},[39,81171,81121],{"class":49},[39,81173,81114],{"class":45},[39,81175,2653],{"class":49},[39,81177,81178],{"class":56}," 300",[39,81180,209],{"class":45},[39,81182,81183,81185,81187,81189,81191,81193,81196],{"class":41,"line":34544},[39,81184,81134],{"class":45},[39,81186,2759],{"class":49},[39,81188,2762],{"class":49},[39,81190,81085],{"class":45},[39,81192,55540],{"class":49},[39,81194,81195],{"class":1319}," '3'",[39,81197,13498],{"class":45},[39,81199,81200,81202,81204,81206,81208,81210,81212,81214,81216,81218,81220],{"class":41,"line":34555},[39,81201,81097],{"class":45},[39,81203,50],{"class":49},[39,81205,81102],{"class":45},[39,81207,81105],{"class":3021},[39,81209,1221],{"class":45},[39,81211,80849],{"class":254},[39,81213,80852],{"class":49},[39,81215,81114],{"class":45},[39,81217,2768],{"class":49},[39,81219,81178],{"class":56},[39,81221,209],{"class":45},[39,81223,81224],{"class":41,"line":34561},[39,81225,3587],{"class":45},[39,81227,81228],{"class":41,"line":34581},[39,81229,81230],{"class":102},"        \u002F\u002F 渲染函数\n",[39,81232,81233,81235],{"class":41,"line":34587},[39,81234,71462],{"class":3021},[39,81236,53466],{"class":45},[39,81238,81239],{"class":41,"line":34593},[39,81240,53452],{"class":45},[39,81242,81243],{"class":41,"line":34599},[39,81244,3458],{"emptyLinePlaceholder":1145},[39,81246,81247],{"class":41,"line":34616},[39,81248,34516],{"class":45},[39,81250,81251,81253,81255],{"class":41,"line":34622},[39,81252,53471],{"class":45},[39,81254,52867],{"class":52354},[39,81256,52361],{"class":45},[39,81258,81259,81261,81263],{"class":41,"line":34628},[39,81260,52839],{"class":45},[39,81262,52854],{"class":52354},[39,81264,52361],{"class":45},[39,81266,81267],{"class":41,"line":34634},[39,81268,3458],{"emptyLinePlaceholder":1145},[39,81270,81271,81273,81275],{"class":41,"line":34640},[39,81272,52839],{"class":45},[39,81274,51689],{"class":52354},[39,81276,52361],{"class":45},[14,81278,81280],{"id":81279},"_410-深入了解对象","4.10 深入了解对象",[1188,81282,81284],{"id":81283},"_4101-创建对象","4.10.1 创建对象",[19,81286,81287],{},[269,81288],{"alt":34,"src":81289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,81291,81292],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[1188,81294,81296],{"id":81295},"_4102-构造函数","4.10.2 构造函数",[19,81298,81299,81302],{},[304,81300,81301],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,81304,81305,81308],{},[304,81306,81307],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[29,81310,81312],{"className":51687,"code":81311,"language":51689,"meta":34,"style":34},"\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",[36,81313,81314,81322,81327,81348,81361,81373,81385,81389,81394,81421,81426,81453],{"__ignoreMap":34},[39,81315,81316,81318,81320],{"class":41,"line":42},[39,81317,2108],{"class":45},[39,81319,52867],{"class":52354},[39,81321,52361],{"class":45},[39,81323,81324],{"class":41,"line":74},[39,81325,81326],{"class":102},"\u002F\u002F例：\n",[39,81328,81329,81331,81334,81336,81338,81340,81342,81344,81346],{"class":41,"line":99},[39,81330,55503],{"class":49},[39,81332,81333],{"class":3021}," Pig",[39,81335,1221],{"class":45},[39,81337,80864],{"class":254},[39,81339,60],{"class":45},[39,81341,71275],{"class":254},[39,81343,60],{"class":45},[39,81345,71292],{"class":254},[39,81347,13498],{"class":45},[39,81349,81350,81353,81356,81358],{"class":41,"line":106},[39,81351,81352],{"class":56},"    this",[39,81354,81355],{"class":45},".name",[39,81357,50],{"class":49},[39,81359,81360],{"class":45},"name\n",[39,81362,81363,81365,81368,81370],{"class":41,"line":112},[39,81364,81352],{"class":56},[39,81366,81367],{"class":45},".age",[39,81369,50],{"class":49},[39,81371,81372],{"class":45},"age\n",[39,81374,81375,81377,81380,81382],{"class":41,"line":118},[39,81376,81352],{"class":56},[39,81378,81379],{"class":45},".gender",[39,81381,50],{"class":49},[39,81383,81384],{"class":45},"gender    \n",[39,81386,81387],{"class":41,"line":413},[39,81388,2630],{"class":45},[39,81390,81391],{"class":41,"line":419},[39,81392,81393],{"class":102},"\u002F\u002F创建佩奇对象\n",[39,81395,81396,81398,81401,81403,81405,81407,81410,81412,81414,81416,81419],{"class":41,"line":425},[39,81397,7848],{"class":49},[39,81399,81400],{"class":56}," Peppa",[39,81402,12773],{"class":49},[39,81404,81333],{"class":3021},[39,81406,1221],{"class":45},[39,81408,81409],{"class":1319},"'佩奇'",[39,81411,60],{"class":45},[39,81413,94],{"class":56},[39,81415,60],{"class":45},[39,81417,81418],{"class":1319},"'女'",[39,81420,209],{"class":45},[39,81422,81423],{"class":41,"line":443},[39,81424,81425],{"class":102},"\u002F\u002F创建乔治对象\n",[39,81427,81428,81430,81433,81435,81437,81439,81442,81444,81446,81448,81451],{"class":41,"line":449},[39,81429,7848],{"class":49},[39,81431,81432],{"class":56}," George",[39,81434,12773],{"class":49},[39,81436,81333],{"class":3021},[39,81438,1221],{"class":45},[39,81440,81441],{"class":1319},"'乔治'",[39,81443,60],{"class":45},[39,81445,68],{"class":56},[39,81447,60],{"class":45},[39,81449,81450],{"class":1319},"'男'",[39,81452,209],{"class":45},[39,81454,81455,81457,81459],{"class":41,"line":455},[39,81456,52839],{"class":45},[39,81458,52867],{"class":52354},[39,81460,52361],{"class":45},[19,81462,81463],{},[269,81464],{"alt":34,"src":81465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,81467,81468],{},[269,81469],{"alt":34,"src":81470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,81472,81473],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,81475,81476],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,81478,81479],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,81481,81482],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,81484,81485],{},"这里用等号是因为：对象.属性=值",[19,81487,81488],{},"①利用对象字面量创建对象",[19,81490,81491],{},"const o={",[19,81493,81494],{},"name:'pink'",[19,81496,81497],{},"} ②利用new Object创建对象",[19,81499,81500],{},"const o=new Object({name:'pink'})",[19,81502,81503],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,81505,81506],{},"构造函数创建对象的执行过程：",[19,81508,81509],{},[269,81510],{"alt":34,"src":81511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[1188,81513,81515],{"id":81514},"_4103-实例成员","4.10.3 实例成员",[19,81517,81518],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[1171,81520,81521,81524,81527],{},[1174,81522,81523],{},"实例对象的属性和方法即为实例成员",[1174,81525,81526],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[1174,81528,81529],{},"构造函数创建的实例对象彼此独立互不影响",[1188,81531,81533],{"id":81532},"_4104-静态成员","4.10.4 静态成员",[19,81535,81536],{},[269,81537],{"alt":34,"src":81538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,81540,81541],{},"静态成员有Date.now() Math.PI Math.random()",[19,81543,81544],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,81546,81547],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,81549,81550],{},"function Pig(name) n {",[19,81552,81553],{},"this.name=name",[19,81555,2144],{},[19,81557,81558],{},"Pig.eyes=2",[19,81560,81561],{},"Pig.sayHai=function () { console.log(this) }",[19,81563,81564],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,81566,81567],{},"console.log(Pig.eyes) \u002F\u002F2",[19,81569,12388],{},[1171,81571,81572,81575,81578,81581,81584],{},[1174,81573,81574],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[1174,81576,81577],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[1174,81579,81580],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[1174,81582,81583],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[1174,81585,81586],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,81588,81589],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[1188,81591,81593],{"id":81592},"_4105-内置构造函数","4.10.5 内置构造函数",[19,81595,81596],{},"内置构造函数包含：",[19,81598,81599],{},[269,81600],{"alt":34,"src":81601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,81603,81604],{},[269,81605],{"alt":34,"src":81606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,81608,81609],{},"这些基本数据类型，js对他们进行了包装",[52867,81611,81612],{},"\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",[23054,81614,81616],{"id":81615},"_41051-object","4.10.5.1 Object",[19,81618,81619],{},"Object 是内置的构造函数，用于创建普通对象",[19,81621,81622],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[29,81624,81626],{"className":51687,"code":81625,"language":51689,"meta":34,"style":34},"const user=new Object({name:'小明',age:15})\n",[36,81627,81628],{"__ignoreMap":34},[39,81629,81630],{"class":41,"line":42},[39,81631,81625],{"class":45},[19,81633,81634],{},"三个常用的静态方法：",[23966,81636,81638],{"id":81637},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,81640,81641],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,81643,81644],{},[269,81645],{"alt":34,"src":81646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,81648,81649],{},[269,81650],{"alt":34,"src":81651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[29,81653,81655],{"className":54121,"code":81654,"language":54123,"meta":34,"style":34},"\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",[36,81656,81657,81665,81673,81678,81683,81688,81693,81698,81703,81711],{"__ignoreMap":34},[39,81658,81659,81661,81663],{"class":41,"line":42},[39,81660,2108],{"class":45},[39,81662,52854],{"class":52354},[39,81664,52361],{"class":45},[39,81666,81667,81669,81671],{"class":41,"line":74},[39,81668,53198],{"class":45},[39,81670,52867],{"class":52354},[39,81672,52361],{"class":45},[39,81674,81675],{"class":41,"line":99},[39,81676,81677],{"class":45},"    const o = { name: 'pink', age: 6 }\n",[39,81679,81680],{"class":41,"line":106},[39,81681,81682],{"class":45},"    \u002F\u002F 获得所有属性名\n",[39,81684,81685],{"class":41,"line":112},[39,81686,81687],{"class":45},"    const arr = Object.keys(o)\n",[39,81689,81690],{"class":41,"line":118},[39,81691,81692],{"class":45},"    console.log(arr)\n",[39,81694,81695],{"class":41,"line":413},[39,81696,81697],{"class":45},"    \u002F\u002F 获得所有属性值\n",[39,81699,81700],{"class":41,"line":419},[39,81701,81702],{"class":45},"    console.log(Object.values(o))\n",[39,81704,81705,81707,81709],{"class":41,"line":425},[39,81706,53471],{"class":45},[39,81708,52867],{"class":52354},[39,81710,52361],{"class":45},[39,81712,81713,81715,81717],{"class":41,"line":443},[39,81714,52839],{"class":45},[39,81716,52854],{"class":52354},[39,81718,52361],{"class":45},[23966,81720,81722],{"id":81721},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,81724,81725],{},"Object.assign(oo,o)",[19,81727,81728],{},"后的东西添加给前 是追加",[19,81730,81731],{},[269,81732],{"alt":34,"src":81733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,81735,81736],{},[269,81737],{"alt":34,"src":81738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[29,81740,81742],{"className":54121,"code":81741,"language":54123,"meta":34,"style":34},"\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",[36,81743,81744,81752,81760,81764,81768,81772,81776,81780,81784,81789,81794,81799,81804,81809,81817],{"__ignoreMap":34},[39,81745,81746,81748,81750],{"class":41,"line":42},[39,81747,2108],{"class":45},[39,81749,52854],{"class":52354},[39,81751,52361],{"class":45},[39,81753,81754,81756,81758],{"class":41,"line":74},[39,81755,53198],{"class":45},[39,81757,52867],{"class":52354},[39,81759,52361],{"class":45},[39,81761,81762],{"class":41,"line":99},[39,81763,81677],{"class":45},[39,81765,81766],{"class":41,"line":106},[39,81767,81682],{"class":45},[39,81769,81770],{"class":41,"line":112},[39,81771,81687],{"class":45},[39,81773,81774],{"class":41,"line":118},[39,81775,81692],{"class":45},[39,81777,81778],{"class":41,"line":413},[39,81779,81697],{"class":45},[39,81781,81782],{"class":41,"line":419},[39,81783,81702],{"class":45},[39,81785,81786],{"class":41,"line":425},[39,81787,81788],{"class":45},"    const oo = {}\n",[39,81790,81791],{"class":41,"line":443},[39,81792,81793],{"class":45},"    Object.assign(oo, o)\n",[39,81795,81796],{"class":41,"line":449},[39,81797,81798],{"class":45},"    console.log(oo)\n",[39,81800,81801],{"class":41,"line":455},[39,81802,81803],{"class":45},"    Object.assign(o, { gender: '女' })\n",[39,81805,81806],{"class":41,"line":461},[39,81807,81808],{"class":45},"    console.log(o)\n",[39,81810,81811,81813,81815],{"class":41,"line":475},[39,81812,53471],{"class":45},[39,81814,52867],{"class":52354},[39,81816,52361],{"class":45},[39,81818,81819,81821,81823],{"class":41,"line":665},[39,81820,52839],{"class":45},[39,81822,52854],{"class":52354},[39,81824,52361],{"class":45},[19,81826,81827],{},[269,81828],{"alt":34,"src":81829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23054,81831,81833],{"id":81832},"_41052-array","4.10.5.2 Array",[19,81835,81836],{},"Array 是内置的构造函数，用于创建数组",[19,81838,81839],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[29,81841,81843],{"className":51687,"code":81842,"language":51689,"meta":34,"style":34},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[36,81844,81845,81850],{"__ignoreMap":34},[39,81846,81847],{"class":41,"line":42},[39,81848,81849],{"class":45},"const arr=new Array(3,5)\n",[39,81851,81852],{"class":41,"line":74},[39,81853,81854],{"class":45},"console.log(arr)  \u002F\u002F[3,5]\n",[19,81856,81857],{},"Array的实例方法，这个方法是实例成员",[19,81859,81860],{},[269,81861],{"alt":34,"src":81862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23966,81864,81866],{"id":81865},"_410521-reduce","4.10.5.2.1 reduce",[19,81868,81869],{},[269,81870],{"alt":34,"src":81871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[29,81873,81875],{"className":54121,"code":81874,"language":54123,"meta":34,"style":34},"\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",[36,81876,81877,81885,81893,81898,81903,81908,81913,81917,81922,81927,81932,81936,81941,81946,81950,81955,81960,81965,81973],{"__ignoreMap":34},[39,81878,81879,81881,81883],{"class":41,"line":42},[39,81880,2108],{"class":45},[39,81882,52854],{"class":52354},[39,81884,52361],{"class":45},[39,81886,81887,81889,81891],{"class":41,"line":74},[39,81888,53198],{"class":45},[39,81890,52867],{"class":52354},[39,81892,52361],{"class":45},[39,81894,81895],{"class":41,"line":99},[39,81896,81897],{"class":45},"    const arr = [1, 5, 8]\n",[39,81899,81900],{"class":41,"line":106},[39,81901,81902],{"class":45},"    \u002F\u002F 1.没有初始值\n",[39,81904,81905],{"class":41,"line":112},[39,81906,81907],{"class":45},"    const total = arr.reduce(function (prev, current) {\n",[39,81909,81910],{"class":41,"line":118},[39,81911,81912],{"class":45},"      return prev + current\n",[39,81914,81915],{"class":41,"line":413},[39,81916,34516],{"class":45},[39,81918,81919],{"class":41,"line":419},[39,81920,81921],{"class":45},"    console.log(total)   \u002F\u002F14\n",[39,81923,81924],{"class":41,"line":425},[39,81925,81926],{"class":45},"    \u002F\u002F 2.有初始值\n",[39,81928,81929],{"class":41,"line":443},[39,81930,81931],{"class":45},"    const total1 = arr.reduce(function (prev, current) {\n",[39,81933,81934],{"class":41,"line":449},[39,81935,81912],{"class":45},[39,81937,81938],{"class":41,"line":455},[39,81939,81940],{"class":45},"    }, 10)\n",[39,81942,81943],{"class":41,"line":461},[39,81944,81945],{"class":45},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[39,81947,81948],{"class":41,"line":475},[39,81949,3458],{"emptyLinePlaceholder":1145},[39,81951,81952],{"class":41,"line":665},[39,81953,81954],{"class":45},"    \u002F\u002F 3.箭头函数写法\n",[39,81956,81957],{"class":41,"line":671},[39,81958,81959],{"class":45},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[39,81961,81962],{"class":41,"line":684},[39,81963,81964],{"class":45},"    console.log(total2)   \u002F\u002F24\n",[39,81966,81967,81969,81971],{"class":41,"line":2732},[39,81968,53471],{"class":45},[39,81970,52867],{"class":52354},[39,81972,52361],{"class":45},[39,81974,81975,81977,81979],{"class":41,"line":2737},[39,81976,52839],{"class":45},[39,81978,52854],{"class":52354},[39,81980,52361],{"class":45},[19,81982,81983],{},"执行过程：",[1171,81985,81986,81989,81992],{},[1174,81987,81988],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[1174,81990,81991],{},"每一次循环，把返回值给作为下一次循环的上一次值",[1174,81993,81994],{},"如果有起始值，则起始值作为上一次值",[29,81996,81998],{"className":54121,"code":81997,"language":54123,"meta":34,"style":34},"\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",[36,81999,82000,82008,82016,82020,82024,82028,82032,82036,82040,82045,82050,82055,82060,82065,82069,82073,82077,82081,82085,82089,82094,82098,82103,82107,82112,82117,82121,82125,82129,82137],{"__ignoreMap":34},[39,82001,82002,82004,82006],{"class":41,"line":42},[39,82003,2108],{"class":45},[39,82005,52854],{"class":52354},[39,82007,52361],{"class":45},[39,82009,82010,82012,82014],{"class":41,"line":74},[39,82011,53198],{"class":45},[39,82013,52867],{"class":52354},[39,82015,52361],{"class":45},[39,82017,82018],{"class":41,"line":99},[39,82019,81897],{"class":45},[39,82021,82022],{"class":41,"line":106},[39,82023,81902],{"class":45},[39,82025,82026],{"class":41,"line":112},[39,82027,81907],{"class":45},[39,82029,82030],{"class":41,"line":118},[39,82031,81912],{"class":45},[39,82033,82034],{"class":41,"line":413},[39,82035,34516],{"class":45},[39,82037,82038],{"class":41,"line":419},[39,82039,81921],{"class":45},[39,82041,82042],{"class":41,"line":425},[39,82043,82044],{"class":45},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[39,82046,82047],{"class":41,"line":443},[39,82048,82049],{"class":45},"    \u002F\u002F     1              5                    6\n",[39,82051,82052],{"class":41,"line":449},[39,82053,82054],{"class":45},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[39,82056,82057],{"class":41,"line":455},[39,82058,82059],{"class":45},"    \u002F\u002F     6              8                    14\n",[39,82061,82062],{"class":41,"line":461},[39,82063,82064],{"class":45},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[39,82066,82067],{"class":41,"line":475},[39,82068,81926],{"class":45},[39,82070,82071],{"class":41,"line":665},[39,82072,81931],{"class":45},[39,82074,82075],{"class":41,"line":671},[39,82076,81912],{"class":45},[39,82078,82079],{"class":41,"line":684},[39,82080,81940],{"class":45},[39,82082,82083],{"class":41,"line":2732},[39,82084,81945],{"class":45},[39,82086,82087],{"class":41,"line":2737},[39,82088,82044],{"class":45},[39,82090,82091],{"class":41,"line":2751},[39,82092,82093],{"class":45},"    \u002F\u002F     10             1                     11\n",[39,82095,82096],{"class":41,"line":2756},[39,82097,82054],{"class":45},[39,82099,82100],{"class":41,"line":2785},[39,82101,82102],{"class":45},"    \u002F\u002F     11             5                    16\n",[39,82104,82105],{"class":41,"line":2790},[39,82106,82054],{"class":45},[39,82108,82109],{"class":41,"line":2807},[39,82110,82111],{"class":45},"    \u002F\u002F     16             8                    24\n",[39,82113,82114],{"class":41,"line":2812},[39,82115,82116],{"class":45},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[39,82118,82119],{"class":41,"line":2817},[39,82120,81954],{"class":45},[39,82122,82123],{"class":41,"line":2822},[39,82124,81959],{"class":45},[39,82126,82127],{"class":41,"line":2836},[39,82128,81964],{"class":45},[39,82130,82131,82133,82135],{"class":41,"line":2841},[39,82132,53471],{"class":45},[39,82134,52867],{"class":52354},[39,82136,52361],{"class":45},[39,82138,82139,82141,82143],{"class":41,"line":3635},[39,82140,52839],{"class":45},[39,82142,52854],{"class":52354},[39,82144,52361],{"class":45},[23966,82146,82148],{"id":82147},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,82150,82151],{},[269,82152],{"alt":34,"src":82153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[29,82155,82157],{"className":54121,"code":82156,"language":54123,"meta":34,"style":34},"\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",[36,82158,82159,82167,82175,82180,82185,82190,82195,82199,82204,82209,82214,82219,82224,82229,82233,82238,82242,82247,82255],{"__ignoreMap":34},[39,82160,82161,82163,82165],{"class":41,"line":42},[39,82162,2108],{"class":45},[39,82164,52854],{"class":52354},[39,82166,52361],{"class":45},[39,82168,82169,82171,82173],{"class":41,"line":74},[39,82170,53198],{"class":45},[39,82172,52867],{"class":52354},[39,82174,52361],{"class":45},[39,82176,82177],{"class":41,"line":99},[39,82178,82179],{"class":45},"    const arr = [\n",[39,82181,82182],{"class":41,"line":106},[39,82183,82184],{"class":45},"      { name: '张三', salary: 10000 },\n",[39,82186,82187],{"class":41,"line":112},[39,82188,82189],{"class":45},"      { name: '李四', salary: 10000 },\n",[39,82191,82192],{"class":41,"line":118},[39,82193,82194],{"class":45},"      { name: '王五', salary: 10000 }\n",[39,82196,82197],{"class":41,"line":413},[39,82198,54163],{"class":45},[39,82200,82201],{"class":41,"line":419},[39,82202,82203],{"class":45},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[39,82205,82206],{"class":41,"line":425},[39,82207,82208],{"class":45},"    \u002F\u002F prev是累计值\n",[39,82210,82211],{"class":41,"line":443},[39,82212,82213],{"class":45},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[39,82215,82216],{"class":41,"line":449},[39,82217,82218],{"class":45},"    console.log(total)\n",[39,82220,82221],{"class":41,"line":455},[39,82222,82223],{"class":45},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[39,82225,82226],{"class":41,"line":461},[39,82227,82228],{"class":45},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[39,82230,82231],{"class":41,"line":475},[39,82232,82223],{"class":45},[39,82234,82235],{"class":41,"line":665},[39,82236,82237],{"class":45},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[39,82239,82240],{"class":41,"line":671},[39,82241,82223],{"class":45},[39,82243,82244],{"class":41,"line":684},[39,82245,82246],{"class":45},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[39,82248,82249,82251,82253],{"class":41,"line":2732},[39,82250,53471],{"class":45},[39,82252,52867],{"class":52354},[39,82254,52361],{"class":45},[39,82256,82257,82259,82261],{"class":41,"line":2737},[39,82258,52839],{"class":45},[39,82260,52854],{"class":52354},[39,82262,52361],{"class":45},[23966,82264,82266],{"id":82265},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,82268,82269],{},[269,82270],{"alt":34,"src":82271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,82273,82274],{},[269,82275],{"alt":34,"src":82276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[1171,82278,82279],{},[1174,82280,82281],{},"find()",[19,82283,82284],{},"循环查找，找到第一个就ok",[19,82286,82287],{},[46,82288,82291],{"href":82289,"rel":82290},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24921],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[29,82293,82295],{"className":51687,"code":82294,"language":51689,"meta":34,"style":34},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[36,82296,82297,82302,82307],{"__ignoreMap":34},[39,82298,82299],{"class":41,"line":42},[39,82300,82301],{"class":45},"const array1 = [5, 12, 8, 130, 44]\n",[39,82303,82304],{"class":41,"line":74},[39,82305,82306],{"class":45},"const found = array1.find((element) => element > 10)\n",[39,82308,82309],{"class":41,"line":99},[39,82310,82311],{"class":45},"console.log(found)  \u002F\u002F12\n",[19,82313,82314,82316,82317,82322,82323,82326,82327,82329,82330,82335,82336,82338,82339,82341,82342,82344,82345],{},[36,82315,82281],{}," 方法是一个",[46,82318,82321],{"href":82319,"rel":82320},"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",[24921],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[36,82324,82325],{},"callbackFn"," 函数，直到 ",[36,82328,82325],{}," 返回一个",[46,82331,82334],{"href":82332,"rel":82333},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24921],"真值","。然后 ",[36,82337,82281],{}," 返回该元素并停止迭代数组。如果 ",[36,82340,82325],{}," 从未返回真值，则 ",[36,82343,82281],{}," 返回 ",[36,82346,82347],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[29,82349,82351],{"className":54121,"code":82350,"language":54123,"meta":34,"style":34},"\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",[36,82352,82353,82361,82369,82374,82379,82384,82388,82393,82398,82402,82407,82412,82416,82420,82425,82430,82434,82438,82443,82448,82453,82458,82463,82467,82472,82477,82482,82487,82491,82496,82504],{"__ignoreMap":34},[39,82354,82355,82357,82359],{"class":41,"line":42},[39,82356,2108],{"class":45},[39,82358,52854],{"class":52354},[39,82360,52361],{"class":45},[39,82362,82363,82365,82367],{"class":41,"line":74},[39,82364,53198],{"class":45},[39,82366,52867],{"class":52354},[39,82368,52361],{"class":45},[39,82370,82371],{"class":41,"line":99},[39,82372,82373],{"class":45},"    const arr = ['red', 'blue', 'green']\n",[39,82375,82376],{"class":41,"line":106},[39,82377,82378],{"class":45},"    const found = arr.find(item => item === 'pink')\n",[39,82380,82381],{"class":41,"line":112},[39,82382,82383],{"class":45},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[39,82385,82386],{"class":41,"line":118},[39,82387,3458],{"emptyLinePlaceholder":1145},[39,82389,82390],{"class":41,"line":413},[39,82391,82392],{"class":45},"    \u002F\u002F 使用场景，用于查找数据\n",[39,82394,82395],{"class":41,"line":419},[39,82396,82397],{"class":45},"    const arr1 = [\n",[39,82399,82400],{"class":41,"line":425},[39,82401,80440],{"class":45},[39,82403,82404],{"class":41,"line":443},[39,82405,82406],{"class":45},"        name: '小米',\n",[39,82408,82409],{"class":41,"line":449},[39,82410,82411],{"class":45},"        price: 1999\n",[39,82413,82414],{"class":41,"line":455},[39,82415,78946],{"class":45},[39,82417,82418],{"class":41,"line":461},[39,82419,80440],{"class":45},[39,82421,82422],{"class":41,"line":475},[39,82423,82424],{"class":45},"        name: '华为',\n",[39,82426,82427],{"class":41,"line":665},[39,82428,82429],{"class":45},"        price: 3999\n",[39,82431,82432],{"class":41,"line":671},[39,82433,53452],{"class":45},[39,82435,82436],{"class":41,"line":684},[39,82437,54163],{"class":45},[39,82439,82440],{"class":41,"line":2732},[39,82441,82442],{"class":45},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[39,82444,82445],{"class":41,"line":2737},[39,82446,82447],{"class":45},"    \u002F\u002F const found1 = arr1.find(item => {\n",[39,82449,82450],{"class":41,"line":2751},[39,82451,82452],{"class":45},"    \u002F\u002F   if (item.name === '小米') {\n",[39,82454,82455],{"class":41,"line":2756},[39,82456,82457],{"class":45},"    \u002F\u002F     return item\n",[39,82459,82460],{"class":41,"line":2785},[39,82461,82462],{"class":45},"    \u002F\u002F   }\n",[39,82464,82465],{"class":41,"line":2790},[39,82466,64344],{"class":45},[39,82468,82469],{"class":41,"line":2807},[39,82470,82471],{"class":45},"    \u002F\u002F 另一种写法\n",[39,82473,82474],{"class":41,"line":2812},[39,82475,82476],{"class":45},"    const found1 = arr1.find(item => {\n",[39,82478,82479],{"class":41,"line":2817},[39,82480,82481],{"class":45},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[39,82483,82484],{"class":41,"line":2822},[39,82485,82486],{"class":45},"      return item.name = '小米'\n",[39,82488,82489],{"class":41,"line":2836},[39,82490,34516],{"class":45},[39,82492,82493],{"class":41,"line":2841},[39,82494,82495],{"class":45},"    console.log(found1)\n",[39,82497,82498,82500,82502],{"class":41,"line":3635},[39,82499,53471],{"class":45},[39,82501,52867],{"class":52354},[39,82503,52361],{"class":45},[39,82505,82506,82508,82510],{"class":41,"line":3649},[39,82507,52839],{"class":45},[39,82509,52854],{"class":52354},[39,82511,52361],{"class":45},[19,82513,82514],{},[269,82515],{"alt":34,"src":82516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,82518,82519],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[1171,82521,82522],{"start":74},[1174,82523,82524],{},"every()返回的是布尔值",[19,82526,82527],{},[46,82528,82531],{"href":82529,"rel":82530},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24921],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,82533,82534],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,82536,82537],{},"some是只有有一个就没问题",[19,82539,82540],{},"every是必须全是才行",[29,82542,82546],{"className":82543,"code":82544,"language":82545,"meta":34,"style":34},"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",[36,82547,82548,82564,82578,82582,82591],{"__ignoreMap":34},[39,82549,82550,82552,82555,82557,82559,82562],{"class":41,"line":42},[39,82551,55503],{"class":49},[39,82553,82554],{"class":45}," isBigEnough(element, ",[39,82556,75112],{"class":49},[39,82558,13491],{"class":45},[39,82560,82561],{"class":49},"array",[39,82563,13498],{"class":45},[39,82565,82566,82569,82572,82574,82576],{"class":41,"line":74},[39,82567,82568],{"class":49},"  return",[39,82570,82571],{"class":45}," element ",[39,82573,2768],{"class":49},[39,82575,3096],{"class":56},[39,82577,2359],{"class":45},[39,82579,82580],{"class":41,"line":99},[39,82581,2630],{"class":45},[39,82583,82584,82587,82589],{"class":41,"line":106},[39,82585,82586],{"class":45},"[12, 5, 8, 130, 44].every(isBigEnough); ",[39,82588,34384],{"class":49},[39,82590,55570],{"class":45},[39,82592,82593,82596,82598],{"class":41,"line":112},[39,82594,82595],{"class":45},"[12, 54, 18, 130, 44].every(isBigEnough); ",[39,82597,34384],{"class":49},[39,82599,58994],{"class":45},[29,82601,82603],{"className":54121,"code":82602,"language":54123,"meta":34,"style":34},"\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",[36,82604,82605,82613,82621,82626,82630,82635,82640,82648],{"__ignoreMap":34},[39,82606,82607,82609,82611],{"class":41,"line":42},[39,82608,2108],{"class":45},[39,82610,52854],{"class":52354},[39,82612,52361],{"class":45},[39,82614,82615,82617,82619],{"class":41,"line":74},[39,82616,53198],{"class":45},[39,82618,52867],{"class":52354},[39,82620,52361],{"class":45},[39,82622,82623],{"class":41,"line":99},[39,82624,82625],{"class":45},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[39,82627,82628],{"class":41,"line":106},[39,82629,79376],{"class":45},[39,82631,82632],{"class":41,"line":112},[39,82633,82634],{"class":45},"    const flag = arr.every(item => item >= 10)\n",[39,82636,82637],{"class":41,"line":118},[39,82638,82639],{"class":45},"    console.log(flag)    \u002F\u002Ftrue\n",[39,82641,82642,82644,82646],{"class":41,"line":413},[39,82643,53471],{"class":45},[39,82645,52867],{"class":52354},[39,82647,52361],{"class":45},[39,82649,82650,82652,82654],{"class":41,"line":419},[39,82651,52839],{"class":45},[39,82653,52854],{"class":52354},[39,82655,52361],{"class":45},[29,82657,82659],{"className":54121,"code":82658,"language":54123,"meta":34,"style":34},"\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",[36,82660,82661,82669,82677,82681,82686,82691,82696,82704],{"__ignoreMap":34},[39,82662,82663,82665,82667],{"class":41,"line":42},[39,82664,2108],{"class":45},[39,82666,52854],{"class":52354},[39,82668,52361],{"class":45},[39,82670,82671,82673,82675],{"class":41,"line":74},[39,82672,53198],{"class":45},[39,82674,52867],{"class":52354},[39,82676,52361],{"class":45},[39,82678,82679],{"class":41,"line":99},[39,82680,82625],{"class":45},[39,82682,82683],{"class":41,"line":106},[39,82684,82685],{"class":45},"    const arr = [10, 0, 5]\n",[39,82687,82688],{"class":41,"line":112},[39,82689,82690],{"class":45},"    const flag = arr.some(item => item >= 10)\n",[39,82692,82693],{"class":41,"line":118},[39,82694,82695],{"class":45},"    console.log(flag)   \u002F\u002Ftrue\n",[39,82697,82698,82700,82702],{"class":41,"line":413},[39,82699,53471],{"class":45},[39,82701,52867],{"class":52354},[39,82703,52361],{"class":45},[39,82705,82706,82708,82710],{"class":41,"line":419},[39,82707,52839],{"class":45},[39,82709,52854],{"class":52354},[39,82711,52361],{"class":45},[23966,82713,82715],{"id":82714},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,82717,82718],{},[269,82719],{"alt":34,"src":82720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[29,82722,82724],{"className":51687,"code":82723,"language":51689,"meta":34,"style":34},"\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",[36,82725,82726,82736,82750,82754,82762,82776,82796,82808,82816,82823,82835,82847,82859,82871,82881,82891,82895,82903,82911,82915,82923,82935,82943,82965,82970,82975,83008,83016,83024,83028],{"__ignoreMap":34},[39,82727,82728,82730,82732,82734],{"class":41,"line":42},[39,82729,52351],{"class":45},[39,82731,52355],{"class":52354},[39,82733,52358],{"class":3021},[39,82735,52361],{"class":45},[39,82737,82738,82740,82742,82744,82746,82748],{"class":41,"line":74},[39,82739,2108],{"class":45},[39,82741,51689],{"class":52354},[39,82743,52370],{"class":3021},[39,82745,50],{"class":45},[39,82747,52375],{"class":1319},[39,82749,52361],{"class":45},[39,82751,82752],{"class":41,"line":99},[39,82753,3458],{"emptyLinePlaceholder":1145},[39,82755,82756,82758,82760],{"class":41,"line":106},[39,82757,2108],{"class":45},[39,82759,52388],{"class":52354},[39,82761,52361],{"class":45},[39,82763,82764,82766,82768,82770,82772,82774],{"class":41,"line":112},[39,82765,53198],{"class":45},[39,82767,52398],{"class":52354},[39,82769,52401],{"class":3021},[39,82771,50],{"class":45},[39,82773,52406],{"class":1319},[39,82775,52361],{"class":45},[39,82777,82778,82780,82782,82784,82786,82788,82790,82792,82794],{"class":41,"line":118},[39,82779,53198],{"class":45},[39,82781,52398],{"class":52354},[39,82783,15976],{"class":3021},[39,82785,50],{"class":45},[39,82787,52445],{"class":1319},[39,82789,52425],{"class":3021},[39,82791,50],{"class":45},[39,82793,52452],{"class":1319},[39,82795,52361],{"class":45},[39,82797,82798,82800,82802,82804,82806],{"class":41,"line":413},[39,82799,53198],{"class":45},[39,82801,52461],{"class":52354},[39,82803,52464],{"class":45},[39,82805,52461],{"class":52354},[39,82807,52361],{"class":45},[39,82809,82810,82812,82814],{"class":41,"line":419},[39,82811,53198],{"class":45},[39,82813,1133],{"class":52354},[39,82815,52361],{"class":45},[39,82817,82818,82821],{"class":41,"line":425},[39,82819,82820],{"class":52354},"    div",[39,82822,16628],{"class":45},[39,82824,82825,82827,82829,82831,82833],{"class":41,"line":443},[39,82826,55825],{"class":56},[39,82828,52491],{"class":45},[39,82830,2780],{"class":56},[39,82832,52546],{"class":49},[39,82834,2359],{"class":45},[39,82836,82837,82839,82841,82843,82845],{"class":41,"line":449},[39,82838,55839],{"class":56},[39,82840,52491],{"class":45},[39,82842,1604],{"class":56},[39,82844,52546],{"class":49},[39,82846,2359],{"class":45},[39,82848,82849,82851,82853,82855,82857],{"class":41,"line":455},[39,82850,58413],{"class":56},[39,82852,52491],{"class":45},[39,82854,1604],{"class":56},[39,82856,52546],{"class":49},[39,82858,2359],{"class":45},[39,82860,82861,82863,82865,82867,82869],{"class":41,"line":461},[39,82862,66187],{"class":56},[39,82864,52491],{"class":45},[39,82866,1699],{"class":56},[39,82868,52546],{"class":49},[39,82870,2359],{"class":45},[39,82872,82873,82875,82877,82879],{"class":41,"line":475},[39,82874,58340],{"class":56},[39,82876,52491],{"class":45},[39,82878,52646],{"class":56},[39,82880,2359],{"class":45},[39,82882,82883,82885,82887,82889],{"class":41,"line":665},[39,82884,55938],{"class":56},[39,82886,52491],{"class":45},[39,82888,52699],{"class":56},[39,82890,2359],{"class":45},[39,82892,82893],{"class":41,"line":671},[39,82894,3245],{"class":45},[39,82896,82897,82899,82901],{"class":41,"line":684},[39,82898,53471],{"class":45},[39,82900,1133],{"class":52354},[39,82902,52361],{"class":45},[39,82904,82905,82907,82909],{"class":41,"line":2732},[39,82906,52839],{"class":45},[39,82908,52388],{"class":52354},[39,82910,52361],{"class":45},[39,82912,82913],{"class":41,"line":2737},[39,82914,3458],{"emptyLinePlaceholder":1145},[39,82916,82917,82919,82921],{"class":41,"line":2751},[39,82918,2108],{"class":45},[39,82920,52854],{"class":52354},[39,82922,52361],{"class":45},[39,82924,82925,82927,82929,82931,82933],{"class":41,"line":2756},[39,82926,53198],{"class":45},[39,82928,52665],{"class":52354},[39,82930,56368],{"class":45},[39,82932,52665],{"class":52354},[39,82934,52361],{"class":45},[39,82936,82937,82939,82941],{"class":41,"line":2785},[39,82938,53198],{"class":45},[39,82940,52867],{"class":52354},[39,82942,52361],{"class":45},[39,82944,82945,82947,82950,82952,82955,82958,82960,82963],{"class":41,"line":2790},[39,82946,12277],{"class":49},[39,82948,82949],{"class":56}," spec",[39,82951,14620],{"class":49},[39,82953,82954],{"class":45}," { size: ",[39,82956,82957],{"class":1319},"'40cm*40cm'",[39,82959,56518],{"class":45},[39,82961,82962],{"class":1319},"'黑色'",[39,82964,56658],{"class":45},[39,82966,82967],{"class":41,"line":2807},[39,82968,82969],{"class":102},"    \u002F\u002F const arr = Object.values(spec)\n",[39,82971,82972],{"class":41,"line":2812},[39,82973,82974],{"class":102},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[39,82976,82977,82979,82981,82983,82986,82988,82990,82993,82996,82999,83001,83003,83006],{"class":41,"line":2817},[39,82978,53461],{"class":45},[39,82980,55453],{"class":3021},[39,82982,1221],{"class":45},[39,82984,82985],{"class":1319},"'div'",[39,82987,75303],{"class":45},[39,82989,50],{"class":49},[39,82991,82992],{"class":45}," Object.",[39,82994,82995],{"class":3021},"values",[39,82997,82998],{"class":45},"(spec).",[39,83000,75277],{"class":3021},[39,83002,1221],{"class":45},[39,83004,83005],{"class":1319},"'\u002F'",[39,83007,209],{"class":45},[39,83009,83010,83012,83014],{"class":41,"line":2822},[39,83011,53471],{"class":45},[39,83013,52867],{"class":52354},[39,83015,52361],{"class":45},[39,83017,83018,83020,83022],{"class":41,"line":2836},[39,83019,52839],{"class":45},[39,83021,52854],{"class":52354},[39,83023,52361],{"class":45},[39,83025,83026],{"class":41,"line":2841},[39,83027,3458],{"emptyLinePlaceholder":1145},[39,83029,83030,83032,83034],{"class":41,"line":3635},[39,83031,52839],{"class":45},[39,83033,51689],{"class":52354},[39,83035,52361],{"class":45},[19,83037,83038],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23966,83040,83042],{"id":83041},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83044,83045],{},"静态方法，将伪数组转换为真数组",[19,83047,83048],{},[269,83049],{"alt":34,"src":83050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[29,83052,83054],{"className":54121,"code":83053,"language":54123,"meta":34,"style":34},"\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",[36,83055,83056,83064,83072,83084,83096,83108,83116,83124,83129,83134,83139,83144,83152],{"__ignoreMap":34},[39,83057,83058,83060,83062],{"class":41,"line":42},[39,83059,2108],{"class":45},[39,83061,52854],{"class":52354},[39,83063,52361],{"class":45},[39,83065,83066,83068,83070],{"class":41,"line":74},[39,83067,53198],{"class":45},[39,83069,2205],{"class":52354},[39,83071,52361],{"class":45},[39,83073,83074,83076,83078,83080,83082],{"class":41,"line":99},[39,83075,52395],{"class":45},[39,83077,1174],{"class":52354},[39,83079,56368],{"class":45},[39,83081,1174],{"class":52354},[39,83083,52361],{"class":45},[39,83085,83086,83088,83090,83092,83094],{"class":41,"line":106},[39,83087,52395],{"class":45},[39,83089,1174],{"class":52354},[39,83091,56368],{"class":45},[39,83093,1174],{"class":52354},[39,83095,52361],{"class":45},[39,83097,83098,83100,83102,83104,83106],{"class":41,"line":112},[39,83099,52395],{"class":45},[39,83101,1174],{"class":52354},[39,83103,56368],{"class":45},[39,83105,1174],{"class":52354},[39,83107,52361],{"class":45},[39,83109,83110,83112,83114],{"class":41,"line":118},[39,83111,53471],{"class":45},[39,83113,2205],{"class":52354},[39,83115,52361],{"class":45},[39,83117,83118,83120,83122],{"class":41,"line":413},[39,83119,53198],{"class":45},[39,83121,52867],{"class":52354},[39,83123,52361],{"class":45},[39,83125,83126],{"class":41,"line":419},[39,83127,83128],{"class":45},"    const lis = document.querySelectorAll('li')\n",[39,83130,83131],{"class":41,"line":425},[39,83132,83133],{"class":45},"    const liss = Array.from(lis)\n",[39,83135,83136],{"class":41,"line":443},[39,83137,83138],{"class":45},"    liss.pop()\n",[39,83140,83141],{"class":41,"line":449},[39,83142,83143],{"class":45},"    console.log(liss)\n",[39,83145,83146,83148,83150],{"class":41,"line":455},[39,83147,53471],{"class":45},[39,83149,52867],{"class":52354},[39,83151,52361],{"class":45},[39,83153,83154,83156,83158],{"class":41,"line":461},[39,83155,52839],{"class":45},[39,83157,52854],{"class":52354},[39,83159,52361],{"class":45},[19,83161,83162],{},[269,83163],{"alt":34,"src":83164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23054,83166,83168],{"id":83167},"_41053-string","4.10.5.3 String",[19,83170,83171],{},[269,83172],{"alt":34,"src":83173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23966,83175,83177],{"id":83176},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[29,83179,83181],{"className":54121,"code":83180,"language":54123,"meta":34,"style":34},"\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",[36,83182,83183,83191,83199,83204,83209,83214,83218,83223,83228,83233,83241],{"__ignoreMap":34},[39,83184,83185,83187,83189],{"class":41,"line":42},[39,83186,2108],{"class":45},[39,83188,52854],{"class":52354},[39,83190,52361],{"class":45},[39,83192,83193,83195,83197],{"class":41,"line":74},[39,83194,53198],{"class":45},[39,83196,52867],{"class":52354},[39,83198,52361],{"class":45},[39,83200,83201],{"class":41,"line":99},[39,83202,83203],{"class":45},"    \u002F\u002F 把字符串转化为数组\n",[39,83205,83206],{"class":41,"line":106},[39,83207,83208],{"class":45},"    const str = 'pink,red'\n",[39,83210,83211],{"class":41,"line":112},[39,83212,83213],{"class":45},"    const arr = str.split(',')\n",[39,83215,83216],{"class":41,"line":118},[39,83217,81692],{"class":45},[39,83219,83220],{"class":41,"line":413},[39,83221,83222],{"class":45},"    const str1 = '2025-8-25'\n",[39,83224,83225],{"class":41,"line":419},[39,83226,83227],{"class":45},"    const arr1 = str1.split('-')\n",[39,83229,83230],{"class":41,"line":425},[39,83231,83232],{"class":45},"    console.log(arr1)\n",[39,83234,83235,83237,83239],{"class":41,"line":443},[39,83236,53471],{"class":45},[39,83238,52867],{"class":52354},[39,83240,52361],{"class":45},[39,83242,83243,83245,83247],{"class":41,"line":449},[39,83244,52839],{"class":45},[39,83246,52854],{"class":52354},[39,83248,52361],{"class":45},[23966,83250,83252],{"id":83251},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,83254,6238],{},[19,83256,83257],{},"substring(indexStart)",[19,83259,83260],{},"substring(indexStart, indexEnd)",[2205,83262,83263,83274,83286,83296],{},[1174,83264,83265,83266,83269,83270,83273],{},"如果省略了 ",[36,83267,83268],{},"indexEnd","，则 ",[36,83271,83272],{},"substring()"," 提取字符直到字符串的末尾",[1174,83275,83276,83277,83280,83281,83269,83283,83285],{},"如果 ",[36,83278,83279],{},"indexStart"," 等于 ",[36,83282,83268],{},[36,83284,83272],{}," 返回一个空字符串",[1174,83287,83276,83288,83290,83291,83269,83293,83295],{},[36,83289,83279],{}," 大于 ",[36,83292,83268],{},[36,83294,83272],{}," 的效果就像交换了这两个参数一样",[1174,83297,83298],{},"结束的索引号不包含想要截取的部分",[29,83300,83302],{"className":82543,"code":83301,"language":82545,"meta":34,"style":34},"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",[36,83303,83304,83316,83320,83354,83384,83388,83419,83423,83450,83480,83510,83514,83545],{"__ignoreMap":34},[39,83305,83306,83309,83311,83314],{"class":41,"line":42},[39,83307,83308],{"class":45},"const anyString ",[39,83310,50],{"class":49},[39,83312,83313],{"class":1319}," \"Mozilla\"",[39,83315,2359],{"class":45},[39,83317,83318],{"class":41,"line":74},[39,83319,3458],{"emptyLinePlaceholder":1145},[39,83321,83322,83325,83327,83329,83331,83334,83336,83339,83341,83343,83345,83347,83349,83351],{"class":41,"line":99},[39,83323,83324],{"class":56},"console",[39,83326,1758],{"class":45},[39,83328,59301],{"class":56},[39,83330,1221],{"class":45},[39,83332,83333],{"class":56},"anyString",[39,83335,1758],{"class":45},[39,83337,83338],{"class":56},"substring",[39,83340,1221],{"class":45},[39,83342,260],{"class":56},[39,83344,13491],{"class":45},[39,83346,57],{"class":56},[39,83348,76307],{"class":45},[39,83350,34384],{"class":49},[39,83352,83353],{"class":1319}," 'M'\n",[39,83355,83356,83358,83360,83362,83364,83366,83368,83370,83372,83374,83376,83378,83380,83382],{"class":41,"line":106},[39,83357,83324],{"class":56},[39,83359,1758],{"class":45},[39,83361,59301],{"class":56},[39,83363,1221],{"class":45},[39,83365,83333],{"class":56},[39,83367,1758],{"class":45},[39,83369,83338],{"class":56},[39,83371,1221],{"class":45},[39,83373,57],{"class":56},[39,83375,13491],{"class":45},[39,83377,260],{"class":56},[39,83379,76307],{"class":45},[39,83381,34384],{"class":49},[39,83383,83353],{"class":1319},[39,83385,83386],{"class":41,"line":112},[39,83387,3458],{"emptyLinePlaceholder":1145},[39,83389,83390,83392,83394,83396,83398,83400,83402,83404,83406,83408,83410,83412,83414,83416],{"class":41,"line":118},[39,83391,83324],{"class":56},[39,83393,1758],{"class":45},[39,83395,59301],{"class":56},[39,83397,1221],{"class":45},[39,83399,83333],{"class":56},[39,83401,1758],{"class":45},[39,83403,83338],{"class":56},[39,83405,1221],{"class":45},[39,83407,260],{"class":56},[39,83409,13491],{"class":45},[39,83411,94],{"class":56},[39,83413,76307],{"class":45},[39,83415,34384],{"class":49},[39,83417,83418],{"class":1319}," 'Mozill'\n",[39,83420,83421],{"class":41,"line":413},[39,83422,3458],{"emptyLinePlaceholder":1145},[39,83424,83425,83427,83429,83431,83433,83435,83437,83439,83441,83443,83445,83447],{"class":41,"line":419},[39,83426,83324],{"class":56},[39,83428,1758],{"class":45},[39,83430,59301],{"class":56},[39,83432,1221],{"class":45},[39,83434,83333],{"class":56},[39,83436,1758],{"class":45},[39,83438,83338],{"class":56},[39,83440,1221],{"class":45},[39,83442,84],{"class":56},[39,83444,76307],{"class":45},[39,83446,34384],{"class":49},[39,83448,83449],{"class":1319}," 'lla'\n",[39,83451,83452,83454,83456,83458,83460,83462,83464,83466,83468,83470,83472,83474,83476,83478],{"class":41,"line":425},[39,83453,83324],{"class":56},[39,83455,1758],{"class":45},[39,83457,59301],{"class":56},[39,83459,1221],{"class":45},[39,83461,83333],{"class":56},[39,83463,1758],{"class":45},[39,83465,83338],{"class":56},[39,83467,1221],{"class":45},[39,83469,84],{"class":56},[39,83471,13491],{"class":45},[39,83473,1573],{"class":56},[39,83475,76363],{"class":45},[39,83477,34384],{"class":49},[39,83479,83449],{"class":1319},[39,83481,83482,83484,83486,83488,83490,83492,83494,83496,83498,83500,83502,83504,83506,83508],{"class":41,"line":443},[39,83483,83324],{"class":56},[39,83485,1758],{"class":45},[39,83487,59301],{"class":56},[39,83489,1221],{"class":45},[39,83491,83333],{"class":56},[39,83493,1758],{"class":45},[39,83495,83338],{"class":56},[39,83497,1221],{"class":45},[39,83499,1573],{"class":56},[39,83501,13491],{"class":45},[39,83503,84],{"class":56},[39,83505,76307],{"class":45},[39,83507,34384],{"class":49},[39,83509,83449],{"class":1319},[39,83511,83512],{"class":41,"line":449},[39,83513,3458],{"emptyLinePlaceholder":1145},[39,83515,83516,83518,83520,83522,83524,83526,83528,83530,83532,83534,83536,83538,83540,83542],{"class":41,"line":455},[39,83517,83324],{"class":56},[39,83519,1758],{"class":45},[39,83521,59301],{"class":56},[39,83523,1221],{"class":45},[39,83525,83333],{"class":56},[39,83527,1758],{"class":45},[39,83529,83338],{"class":56},[39,83531,1221],{"class":45},[39,83533,260],{"class":56},[39,83535,13491],{"class":45},[39,83537,1573],{"class":56},[39,83539,76307],{"class":45},[39,83541,34384],{"class":49},[39,83543,83544],{"class":1319}," 'Mozilla'\n",[39,83546,83547,83549,83551,83553,83555,83557,83559,83561,83563,83565,83567,83569,83571,83573],{"class":41,"line":461},[39,83548,83324],{"class":56},[39,83550,1758],{"class":45},[39,83552,59301],{"class":56},[39,83554,1221],{"class":45},[39,83556,83333],{"class":56},[39,83558,1758],{"class":45},[39,83560,83338],{"class":56},[39,83562,1221],{"class":45},[39,83564,260],{"class":56},[39,83566,13491],{"class":45},[39,83568,146],{"class":56},[39,83570,76307],{"class":45},[39,83572,34384],{"class":49},[39,83574,83544],{"class":1319},[23966,83576,83578],{"id":83577},"_410533-startswith","4.10.5.3.3 startsWith",[19,83580,83581,83584,83585,83590,83591,83593,83594],{},[36,83582,83583],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[304,83586,83587],{},[36,83588,83589],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[36,83592,2428],{}," 或 ",[36,83595,67074],{},[29,83597,83599],{"className":78549,"code":83598,"language":78551,"meta":34,"style":34},"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",[36,83600,83601,83613,83632,83637,83657],{"__ignoreMap":34},[39,83602,83603,83605,83608,83610],{"class":41,"line":42},[39,83604,7848],{"class":49},[39,83606,83607],{"class":45}," str1 ",[39,83609,50],{"class":49},[39,83611,83612],{"class":1319}," \"Saturday night plans\"\n",[39,83614,83615,83617,83619,83622,83625,83627,83630],{"class":41,"line":74},[39,83616,78586],{"class":45},[39,83618,59301],{"class":3021},[39,83620,83621],{"class":45},"(str1.",[39,83623,83624],{"class":3021},"startsWith",[39,83626,1221],{"class":45},[39,83628,83629],{"class":1319},"\"Sat\"",[39,83631,31552],{"class":45},[39,83633,83634],{"class":41,"line":99},[39,83635,83636],{"class":102},"\u002F\u002F Expected output: true\n",[39,83638,83639,83641,83643,83645,83647,83649,83651,83653,83655],{"class":41,"line":106},[39,83640,78586],{"class":45},[39,83642,59301],{"class":3021},[39,83644,83621],{"class":45},[39,83646,83624],{"class":3021},[39,83648,1221],{"class":45},[39,83650,83629],{"class":1319},[39,83652,13491],{"class":45},[39,83654,68],{"class":56},[39,83656,31552],{"class":45},[39,83658,83659],{"class":41,"line":112},[39,83660,83661],{"class":102},"\u002F\u002F Expected output: false\n",[29,83663,83665],{"className":51687,"code":83664,"language":51689,"meta":34,"style":34},"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",[36,83666,83667,83672,83677,83681,83686,83691],{"__ignoreMap":34},[39,83668,83669],{"class":41,"line":42},[39,83670,83671],{"class":45},"startsWith(searchString)\n",[39,83673,83674],{"class":41,"line":74},[39,83675,83676],{"class":45},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[39,83678,83679],{"class":41,"line":99},[39,83680,3458],{"emptyLinePlaceholder":1145},[39,83682,83683],{"class":41,"line":106},[39,83684,83685],{"class":45},"const str3 = 'pink老师上课中'\n",[39,83687,83688],{"class":41,"line":112},[39,83689,83690],{"class":45},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[39,83692,83693],{"class":41,"line":118},[39,83694,83695],{"class":45},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23966,83697,83699],{"id":83698},"_410534-includes","4.10.5.3.4 includes",[19,83701,83702],{},"includes(searchString) includes(searchString, position)",[1171,83704,83705],{},[1174,83706,83707],{},"searchString:",[19,83709,83710,83711,83713,83714,83719,83720,83725,83726,22556,83729,83732,83733,83736],{},"一个要在 ",[36,83712,2368],{}," 中查找的字符串。",[46,83715,83718],{"href":83716,"rel":83717},"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",[24921],"不能是正则表达式","。所有非正则表达式的值都会被",[46,83721,83724],{"href":83722,"rel":83723},"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",[24921],"强制转换为字符串","，因此如果该参数被省略或传入 ",[36,83727,83728],{},"undefined",[36,83730,83731],{},"includes()"," 方法会在字符串中搜索 ",[36,83734,83735],{},"\"undefined\"","，这通常不是你想要的",[1171,83738,83739],{"start":74},[1174,83740,83741,2057],{},[36,83742,83743],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,83745,83746,83747,83750,83751],{},"在字符串中开始搜索 ",[36,83748,83749],{},"searchString"," 的位置。默认值为 ",[36,83752,260],{},[1171,83754,83755],{"start":99},[1174,83756,83757],{},"返回值：",[19,83759,83760,83761,83763,83764,83768,83769],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[36,83762,83749],{}," 为空字符串的情况），则返回 ",[304,83765,83766],{},[36,83767,2428],{}," ，否则返回 ",[304,83770,83771],{},[36,83772,67074],{},[1171,83774,83775],{"start":106},[1174,83776,83777],{},"异常：",[19,83779,83276,83780,14851,83782,83786],{},[36,83781,83749],{},[46,83783,83785],{"href":83716,"rel":83784},[24921],"是一个正则表达式","，则会抛出",[19,83788,83789],{},"只要是有就是true，不需要非得以谁开头结尾",[29,83791,83793],{"className":78549,"code":83792,"language":78551,"meta":34,"style":34},"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",[36,83794,83795,83806,83829,83848,83868,83890,83909],{"__ignoreMap":34},[39,83796,83797,83799,83801,83803],{"class":41,"line":42},[39,83798,7848],{"class":49},[39,83800,80829],{"class":45},[39,83802,50],{"class":49},[39,83804,83805],{"class":1319}," \"To be, or not to be, that is the question.\"\n",[39,83807,83808,83810,83812,83815,83818,83820,83823,83826],{"class":41,"line":74},[39,83809,78586],{"class":45},[39,83811,59301],{"class":3021},[39,83813,83814],{"class":45},"(str.",[39,83816,83817],{"class":3021},"includes",[39,83819,1221],{"class":45},[39,83821,83822],{"class":1319},"\"To be\"",[39,83824,83825],{"class":45},"))",[39,83827,83828],{"class":102},"  \u002F\u002F true\n",[39,83830,83831,83833,83835,83837,83839,83841,83844,83846],{"class":41,"line":99},[39,83832,78586],{"class":45},[39,83834,59301],{"class":3021},[39,83836,83814],{"class":45},[39,83838,83817],{"class":3021},[39,83840,1221],{"class":45},[39,83842,83843],{"class":1319},"\"question\"",[39,83845,83825],{"class":45},[39,83847,83828],{"class":102},[39,83849,83850,83852,83854,83856,83858,83860,83863,83865],{"class":41,"line":106},[39,83851,78586],{"class":45},[39,83853,59301],{"class":3021},[39,83855,83814],{"class":45},[39,83857,83817],{"class":3021},[39,83859,1221],{"class":45},[39,83861,83862],{"class":1319},"\"nonexistent\"",[39,83864,83825],{"class":45},[39,83866,83867],{"class":102},"  \u002F\u002F false\n",[39,83869,83870,83872,83874,83876,83878,83880,83882,83884,83886,83888],{"class":41,"line":112},[39,83871,78586],{"class":45},[39,83873,59301],{"class":3021},[39,83875,83814],{"class":45},[39,83877,83817],{"class":3021},[39,83879,1221],{"class":45},[39,83881,83822],{"class":1319},[39,83883,13491],{"class":45},[39,83885,57],{"class":56},[39,83887,83825],{"class":45},[39,83889,83867],{"class":102},[39,83891,83892,83894,83896,83898,83900,83902,83905,83907],{"class":41,"line":118},[39,83893,78586],{"class":45},[39,83895,59301],{"class":3021},[39,83897,83814],{"class":45},[39,83899,83817],{"class":3021},[39,83901,1221],{"class":45},[39,83903,83904],{"class":1319},"\"TO BE\"",[39,83906,83825],{"class":45},[39,83908,83867],{"class":102},[39,83910,83911,83913,83915,83917,83919,83921,83923,83925],{"class":41,"line":413},[39,83912,78586],{"class":45},[39,83914,59301],{"class":3021},[39,83916,83814],{"class":45},[39,83918,83817],{"class":3021},[39,83920,1221],{"class":45},[39,83922,8708],{"class":1319},[39,83924,83825],{"class":45},[39,83926,83828],{"class":102},[23966,83928,83930],{"id":83929},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[29,83932,83934],{"className":54121,"code":83933,"language":54123,"meta":34,"style":34},"\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",[36,83935,83936,83944,83952,83957,83962,83967,83972,83977,83985],{"__ignoreMap":34},[39,83937,83938,83940,83942],{"class":41,"line":42},[39,83939,2108],{"class":45},[39,83941,52854],{"class":52354},[39,83943,52361],{"class":45},[39,83945,83946,83948,83950],{"class":41,"line":74},[39,83947,53198],{"class":45},[39,83949,52867],{"class":52354},[39,83951,52361],{"class":45},[39,83953,83954],{"class":41,"line":99},[39,83955,83956],{"class":45},"    const num = 10\n",[39,83958,83959],{"class":41,"line":106},[39,83960,83961],{"class":45},"    \u002F\u002F 强制转换\n",[39,83963,83964],{"class":41,"line":112},[39,83965,83966],{"class":45},"    console.log(String(num))\n",[39,83968,83969],{"class":41,"line":118},[39,83970,83971],{"class":45},"    \u002F\u002F toString()方法转换\n",[39,83973,83974],{"class":41,"line":413},[39,83975,83976],{"class":45},"    console.log(num.toString())\n",[39,83978,83979,83981,83983],{"class":41,"line":419},[39,83980,53471],{"class":45},[39,83982,52867],{"class":52354},[39,83984,52361],{"class":45},[39,83986,83987,83989,83991],{"class":41,"line":425},[39,83988,52839],{"class":45},[39,83990,52854],{"class":52354},[39,83992,52361],{"class":45},[23966,83994,83996],{"id":83995},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83998,83999],{},[269,84000],{"alt":34,"src":84001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[29,84003,84005],{"className":51687,"code":84004,"language":51689,"meta":34,"style":34},"\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",[36,84006,84007,84017,84031,84035,84043,84057,84077,84089,84097,84101,84109,84121,84129,84141,84146,84151,84156,84203,84219,84227,84235,84239],{"__ignoreMap":34},[39,84008,84009,84011,84013,84015],{"class":41,"line":42},[39,84010,52351],{"class":45},[39,84012,52355],{"class":52354},[39,84014,52358],{"class":3021},[39,84016,52361],{"class":45},[39,84018,84019,84021,84023,84025,84027,84029],{"class":41,"line":74},[39,84020,2108],{"class":45},[39,84022,51689],{"class":52354},[39,84024,52370],{"class":3021},[39,84026,50],{"class":45},[39,84028,52375],{"class":1319},[39,84030,52361],{"class":45},[39,84032,84033],{"class":41,"line":99},[39,84034,3458],{"emptyLinePlaceholder":1145},[39,84036,84037,84039,84041],{"class":41,"line":106},[39,84038,2108],{"class":45},[39,84040,52388],{"class":52354},[39,84042,52361],{"class":45},[39,84044,84045,84047,84049,84051,84053,84055],{"class":41,"line":112},[39,84046,53198],{"class":45},[39,84048,52398],{"class":52354},[39,84050,52401],{"class":3021},[39,84052,50],{"class":45},[39,84054,52406],{"class":1319},[39,84056,52361],{"class":45},[39,84058,84059,84061,84063,84065,84067,84069,84071,84073,84075],{"class":41,"line":118},[39,84060,53198],{"class":45},[39,84062,52398],{"class":52354},[39,84064,15976],{"class":3021},[39,84066,50],{"class":45},[39,84068,52445],{"class":1319},[39,84070,52425],{"class":3021},[39,84072,50],{"class":45},[39,84074,52452],{"class":1319},[39,84076,52361],{"class":45},[39,84078,84079,84081,84083,84085,84087],{"class":41,"line":413},[39,84080,53198],{"class":45},[39,84082,52461],{"class":52354},[39,84084,52464],{"class":45},[39,84086,52461],{"class":52354},[39,84088,52361],{"class":45},[39,84090,84091,84093,84095],{"class":41,"line":419},[39,84092,52839],{"class":45},[39,84094,52388],{"class":52354},[39,84096,52361],{"class":45},[39,84098,84099],{"class":41,"line":425},[39,84100,3458],{"emptyLinePlaceholder":1145},[39,84102,84103,84105,84107],{"class":41,"line":443},[39,84104,2108],{"class":45},[39,84106,52854],{"class":52354},[39,84108,52361],{"class":45},[39,84110,84111,84113,84115,84117,84119],{"class":41,"line":449},[39,84112,53198],{"class":45},[39,84114,52665],{"class":52354},[39,84116,56368],{"class":45},[39,84118,52665],{"class":52354},[39,84120,52361],{"class":45},[39,84122,84123,84125,84127],{"class":41,"line":455},[39,84124,53198],{"class":45},[39,84126,52867],{"class":52354},[39,84128,52361],{"class":45},[39,84130,84131,84133,84136,84138],{"class":41,"line":461},[39,84132,12277],{"class":49},[39,84134,84135],{"class":56}," gift",[39,84137,14620],{"class":49},[39,84139,84140],{"class":1319}," '50g的茶叶，清洗球'\n",[39,84142,84143],{"class":41,"line":475},[39,84144,84145],{"class":102},"    \u002F\u002F 1.把字符串拆分为数组\n",[39,84147,84148],{"class":41,"line":665},[39,84149,84150],{"class":102},"    \u002F\u002F console.log(gift.split(','))\n",[39,84152,84153],{"class":41,"line":671},[39,84154,84155],{"class":102},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[39,84157,84158,84160,84162,84164,84167,84170,84172,84175,84177,84179,84181,84183,84185,84188,84190,84193,84195,84197,84199,84201],{"class":41,"line":684},[39,84159,12277],{"class":49},[39,84161,74973],{"class":56},[39,84163,14620],{"class":49},[39,84165,84166],{"class":45}," gift.",[39,84168,84169],{"class":3021},"split",[39,84171,1221],{"class":45},[39,84173,84174],{"class":1319},"'，'",[39,84176,31881],{"class":45},[39,84178,75098],{"class":3021},[39,84180,1221],{"class":45},[39,84182,80849],{"class":254},[39,84184,80852],{"class":49},[39,84186,84187],{"class":1319}," `\u003Cspan>【赠品】${",[39,84189,80849],{"class":45},[39,84191,84192],{"class":1319},"}\u003C\u002Fspan>\u003Cbr>`",[39,84194,31881],{"class":45},[39,84196,75277],{"class":3021},[39,84198,1221],{"class":45},[39,84200,75282],{"class":1319},[39,84202,209],{"class":45},[39,84204,84205,84207,84209,84211,84213,84215,84217],{"class":41,"line":2732},[39,84206,53461],{"class":45},[39,84208,55453],{"class":3021},[39,84210,1221],{"class":45},[39,84212,82985],{"class":1319},[39,84214,75303],{"class":45},[39,84216,50],{"class":49},[39,84218,75039],{"class":45},[39,84220,84221,84223,84225],{"class":41,"line":2737},[39,84222,53471],{"class":45},[39,84224,52867],{"class":52354},[39,84226,52361],{"class":45},[39,84228,84229,84231,84233],{"class":41,"line":2751},[39,84230,52839],{"class":45},[39,84232,52854],{"class":52354},[39,84234,52361],{"class":45},[39,84236,84237],{"class":41,"line":2756},[39,84238,3458],{"emptyLinePlaceholder":1145},[39,84240,84241,84243,84245],{"class":41,"line":2785},[39,84242,52839],{"class":45},[39,84244,51689],{"class":52354},[39,84246,52361],{"class":45},[23054,84248,84250],{"id":84249},"_41054-number","4.10.5.4 Number",[19,84252,84253],{},[269,84254],{"alt":34,"src":84255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,84257,84258],{},"整数也可以进行toFixed来保留小数",[19,84260,84261],{},"比如：",[19,84263,84264],{},"const price=10",[19,84266,84267],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23054,84269,84271],{"id":84270},"_41055-购物车展示","4.10.5.5 购物车展示",[19,84273,84274],{},[269,84275],{"alt":34,"src":84276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[29,84278,84280],{"className":51687,"code":84279,"language":51689,"meta":34,"style":34},"\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",[36,84281,84282,84292,84306,84310,84318,84332,84352,84364,84372,84378,84388,84398,84408,84412,84416,84422,84434,84448,84452,84456,84462,84474,84490,84500,84516,84520,84524,84530,84540,84550,84554,84558,84566,84578,84590,84602,84606,84610,84618,84630,84634,84638,84649,84659,84671,84683,84693,84697,84701,84709,84718,84730,84740,84750,84754,84758,84766,84775,84782,84792,84804,84808,84812,84821,84831,84842,84854,84866,84870,84874,84883,84893,84904,84908,84912,84918,84930,84942,84952,84962,84980,84992,84996,85000,85009,85021,85031,85041,85053,85057,85065,85073,85077,85085,85099,85107,85121,85149,85157,85165,85175,85179,85187,85195,85204,85212,85221,85231,85235,85239,85247,85255,85264,85272,85280,85293,85297,85301,85309,85317,85326,85334,85342,85357,85361,85365,85373,85381,85390,85398,85406,85420,85428,85432,85436,85441,85467,85472,85509,85514,85537,85542,85596,85601,85637,85641,85647,85652,85661,85675,85684,85703,85712,85722,85727,85732,85745,85750,85804,85830,85838,85846,85850],{"__ignoreMap":34},[39,84283,84284,84286,84288,84290],{"class":41,"line":42},[39,84285,52351],{"class":45},[39,84287,52355],{"class":52354},[39,84289,52358],{"class":3021},[39,84291,52361],{"class":45},[39,84293,84294,84296,84298,84300,84302,84304],{"class":41,"line":74},[39,84295,2108],{"class":45},[39,84297,51689],{"class":52354},[39,84299,52370],{"class":3021},[39,84301,50],{"class":45},[39,84303,52375],{"class":1319},[39,84305,52361],{"class":45},[39,84307,84308],{"class":41,"line":99},[39,84309,3458],{"emptyLinePlaceholder":1145},[39,84311,84312,84314,84316],{"class":41,"line":106},[39,84313,2108],{"class":45},[39,84315,52388],{"class":52354},[39,84317,52361],{"class":45},[39,84319,84320,84322,84324,84326,84328,84330],{"class":41,"line":112},[39,84321,53198],{"class":45},[39,84323,52398],{"class":52354},[39,84325,52401],{"class":3021},[39,84327,50],{"class":45},[39,84329,52406],{"class":1319},[39,84331,52361],{"class":45},[39,84333,84334,84336,84338,84340,84342,84344,84346,84348,84350],{"class":41,"line":118},[39,84335,53198],{"class":45},[39,84337,52398],{"class":52354},[39,84339,15976],{"class":3021},[39,84341,50],{"class":45},[39,84343,52445],{"class":1319},[39,84345,52425],{"class":3021},[39,84347,50],{"class":45},[39,84349,52452],{"class":1319},[39,84351,52361],{"class":45},[39,84353,84354,84356,84358,84360,84362],{"class":41,"line":413},[39,84355,53198],{"class":45},[39,84357,52461],{"class":52354},[39,84359,52464],{"class":45},[39,84361,52461],{"class":52354},[39,84363,52361],{"class":45},[39,84365,84366,84368,84370],{"class":41,"line":419},[39,84367,53198],{"class":45},[39,84369,1133],{"class":52354},[39,84371,52361],{"class":45},[39,84373,84374,84376],{"class":41,"line":425},[39,84375,7459],{"class":52354},[39,84377,16628],{"class":45},[39,84379,84380,84382,84384,84386],{"class":41,"line":443},[39,84381,55749],{"class":56},[39,84383,52491],{"class":45},[39,84385,260],{"class":56},[39,84387,2359],{"class":45},[39,84389,84390,84392,84394,84396],{"class":41,"line":449},[39,84391,55760],{"class":56},[39,84393,52491],{"class":45},[39,84395,260],{"class":56},[39,84397,2359],{"class":45},[39,84399,84400,84402,84404,84406],{"class":41,"line":455},[39,84401,73650],{"class":56},[39,84403,52491],{"class":45},[39,84405,61559],{"class":56},[39,84407,2359],{"class":45},[39,84409,84410],{"class":41,"line":461},[39,84411,3245],{"class":45},[39,84413,84414],{"class":41,"line":475},[39,84415,3458],{"emptyLinePlaceholder":1145},[39,84417,84418,84420],{"class":41,"line":665},[39,84419,63177],{"class":3021},[39,84421,16628],{"class":45},[39,84423,84424,84426,84428,84430,84432],{"class":41,"line":671},[39,84425,55825],{"class":56},[39,84427,52491],{"class":45},[39,84429,79628],{"class":56},[39,84431,52546],{"class":49},[39,84433,2359],{"class":45},[39,84435,84436,84438,84440,84442,84444,84446],{"class":41,"line":684},[39,84437,55760],{"class":56},[39,84439,52491],{"class":45},[39,84441,1519],{"class":56},[39,84443,52546],{"class":49},[39,84445,52610],{"class":56},[39,84447,2359],{"class":45},[39,84449,84450],{"class":41,"line":2732},[39,84451,3245],{"class":45},[39,84453,84454],{"class":41,"line":2737},[39,84455,3458],{"emptyLinePlaceholder":1145},[39,84457,84458,84460],{"class":41,"line":2751},[39,84459,79679],{"class":3021},[39,84461,16628],{"class":45},[39,84463,84464,84466,84468,84470,84472],{"class":41,"line":2756},[39,84465,55749],{"class":56},[39,84467,52491],{"class":45},[39,84469,1775],{"class":56},[39,84471,52546],{"class":49},[39,84473,2359],{"class":45},[39,84475,84476,84478,84480,84482,84484,84486,84488],{"class":41,"line":2785},[39,84477,62914],{"class":56},[39,84479,52491],{"class":45},[39,84481,29178],{"class":56},[39,84483,79734],{"class":56},[39,84485,79737],{"class":56},[39,84487,392],{"class":49},[39,84489,2359],{"class":45},[39,84491,84492,84494,84496,84498],{"class":41,"line":2790},[39,84493,56063],{"class":56},[39,84495,52491],{"class":45},[39,84497,52531],{"class":56},[39,84499,2359],{"class":45},[39,84501,84502,84504,84506,84508,84510,84512,84514],{"class":41,"line":2807},[39,84503,63031],{"class":56},[39,84505,52491],{"class":45},[39,84507,57],{"class":56},[39,84509,52546],{"class":49},[39,84511,52575],{"class":56},[39,84513,63298],{"class":56},[39,84515,2359],{"class":45},[39,84517,84518],{"class":41,"line":2812},[39,84519,3245],{"class":45},[39,84521,84522],{"class":41,"line":2817},[39,84523,3458],{"emptyLinePlaceholder":1145},[39,84525,84526,84528],{"class":41,"line":2822},[39,84527,79797],{"class":3021},[39,84529,16628],{"class":45},[39,84531,84532,84534,84536,84538],{"class":41,"line":2836},[39,84533,63079],{"class":56},[39,84535,52491],{"class":45},[39,84537,63084],{"class":56},[39,84539,2359],{"class":45},[39,84541,84542,84544,84546,84548],{"class":41,"line":2841},[39,84543,55938],{"class":56},[39,84545,52491],{"class":45},[39,84547,62872],{"class":56},[39,84549,2359],{"class":45},[39,84551,84552],{"class":41,"line":3635},[39,84553,3245],{"class":45},[39,84555,84556],{"class":41,"line":3649},[39,84557,3458],{"emptyLinePlaceholder":1145},[39,84559,84560,84562,84564],{"class":41,"line":3657},[39,84561,79679],{"class":3021},[39,84563,56669],{"class":52354},[39,84565,16628],{"class":45},[39,84567,84568,84570,84572,84574,84576],{"class":41,"line":3662},[39,84569,55825],{"class":56},[39,84571,52491],{"class":45},[39,84573,1812],{"class":56},[39,84575,52546],{"class":49},[39,84577,2359],{"class":45},[39,84579,84580,84582,84584,84586,84588],{"class":41,"line":3668},[39,84581,55839],{"class":56},[39,84583,52491],{"class":45},[39,84585,1812],{"class":56},[39,84587,52546],{"class":49},[39,84589,2359],{"class":45},[39,84591,84592,84594,84596,84598,84600],{"class":41,"line":3674},[39,84593,62804],{"class":56},[39,84595,52491],{"class":45},[39,84597,89],{"class":56},[39,84599,52546],{"class":49},[39,84601,2359],{"class":45},[39,84603,84604],{"class":41,"line":3679},[39,84605,3245],{"class":45},[39,84607,84608],{"class":41,"line":9004},[39,84609,3458],{"emptyLinePlaceholder":1145},[39,84611,84612,84614,84616],{"class":41,"line":9028},[39,84613,79679],{"class":3021},[39,84615,63358],{"class":3021},[39,84617,16628],{"class":45},[39,84619,84620,84622,84624,84626,84628],{"class":41,"line":9033},[39,84621,55825],{"class":56},[39,84623,52491],{"class":45},[39,84625,2780],{"class":56},[39,84627,52546],{"class":49},[39,84629,2359],{"class":45},[39,84631,84632],{"class":41,"line":9039},[39,84633,3245],{"class":45},[39,84635,84636],{"class":41,"line":9066},[39,84637,3458],{"emptyLinePlaceholder":1145},[39,84639,84640,84642,84644,84647],{"class":41,"line":9071},[39,84641,79679],{"class":3021},[39,84643,63358],{"class":3021},[39,84645,84646],{"class":3021}," .tag",[39,84648,16628],{"class":45},[39,84650,84651,84653,84655,84657],{"class":41,"line":9077},[39,84652,56063],{"class":56},[39,84654,52491],{"class":45},[39,84656,61923],{"class":56},[39,84658,2359],{"class":45},[39,84660,84661,84663,84665,84667,84669],{"class":41,"line":9089},[39,84662,55749],{"class":56},[39,84664,52491],{"class":45},[39,84666,63],{"class":56},[39,84668,52546],{"class":49},[39,84670,2359],{"class":45},[39,84672,84673,84675,84677,84679,84681],{"class":41,"line":9101},[39,84674,55976],{"class":56},[39,84676,52491],{"class":45},[39,84678,1699],{"class":56},[39,84680,52546],{"class":49},[39,84682,2359],{"class":45},[39,84684,84685,84687,84689,84691],{"class":41,"line":9113},[39,84686,58470],{"class":56},[39,84688,52491],{"class":45},[39,84690,63124],{"class":56},[39,84692,2359],{"class":45},[39,84694,84695],{"class":41,"line":10772},[39,84696,3245],{"class":45},[39,84698,84699],{"class":41,"line":10797},[39,84700,3458],{"emptyLinePlaceholder":1145},[39,84702,84703,84705,84707],{"class":41,"line":10820},[39,84704,79679],{"class":3021},[39,84706,79971],{"class":3021},[39,84708,32521],{"class":45},[39,84710,84711,84713,84716],{"class":41,"line":10844},[39,84712,79679],{"class":3021},[39,84714,84715],{"class":3021}," .sub-total",[39,84717,16628],{"class":45},[39,84719,84720,84722,84724,84726,84728],{"class":41,"line":10849},[39,84721,55976],{"class":56},[39,84723,52491],{"class":45},[39,84725,1849],{"class":56},[39,84727,52546],{"class":49},[39,84729,2359],{"class":45},[39,84731,84732,84734,84736,84738],{"class":41,"line":10854},[39,84733,58470],{"class":56},[39,84735,52491],{"class":45},[39,84737,79994],{"class":56},[39,84739,2359],{"class":45},[39,84741,84742,84744,84746,84748],{"class":41,"line":10859},[39,84743,62891],{"class":56},[39,84745,52491],{"class":45},[39,84747,57],{"class":56},[39,84749,2359],{"class":45},[39,84751,84752],{"class":41,"line":10868},[39,84753,3245],{"class":45},[39,84755,84756],{"class":41,"line":10873},[39,84757,3458],{"emptyLinePlaceholder":1145},[39,84759,84760,84762,84764],{"class":41,"line":10879},[39,84761,79679],{"class":3021},[39,84763,80011],{"class":3021},[39,84765,32521],{"class":45},[39,84767,84768,84770,84773],{"class":41,"line":10900},[39,84769,79679],{"class":3021},[39,84771,84772],{"class":3021}," .sub-total::before",[39,84774,32521],{"class":45},[39,84776,84777,84780],{"class":41,"line":10906},[39,84778,84779],{"class":3021},"    .amount::before",[39,84781,16628],{"class":45},[39,84783,84784,84786,84788,84790],{"class":41,"line":10920},[39,84785,80018],{"class":56},[39,84787,52491],{"class":45},[39,84789,80023],{"class":1319},[39,84791,2359],{"class":45},[39,84793,84794,84796,84798,84800,84802],{"class":41,"line":10926},[39,84795,55976],{"class":56},[39,84797,52491],{"class":45},[39,84799,1699],{"class":56},[39,84801,52546],{"class":49},[39,84803,2359],{"class":45},[39,84805,84806],{"class":41,"line":10953},[39,84807,3245],{"class":45},[39,84809,84810],{"class":41,"line":10962},[39,84811,3458],{"emptyLinePlaceholder":1145},[39,84813,84814,84816,84819],{"class":41,"line":10968},[39,84815,79679],{"class":3021},[39,84817,84818],{"class":3021}," .spec",[39,84820,16628],{"class":45},[39,84822,84823,84825,84827,84829],{"class":41,"line":10976},[39,84824,62891],{"class":56},[39,84826,52491],{"class":45},[39,84828,63],{"class":56},[39,84830,2359],{"class":45},[39,84832,84833,84835,84837,84840],{"class":41,"line":10981},[39,84834,58470],{"class":56},[39,84836,52491],{"class":45},[39,84838,84839],{"class":56},"#888",[39,84841,2359],{"class":45},[39,84843,84844,84846,84848,84850,84852],{"class":41,"line":17660},[39,84845,55976],{"class":56},[39,84847,52491],{"class":45},[39,84849,1749],{"class":56},[39,84851,52546],{"class":49},[39,84853,2359],{"class":45},[39,84855,84856,84858,84860,84862,84864],{"class":41,"line":17666},[39,84857,63054],{"class":56},[39,84859,52491],{"class":45},[39,84861,1898],{"class":56},[39,84863,52546],{"class":49},[39,84865,2359],{"class":45},[39,84867,84868],{"class":41,"line":17689},[39,84869,3245],{"class":45},[39,84871,84872],{"class":41,"line":17695},[39,84873,3458],{"emptyLinePlaceholder":1145},[39,84875,84876,84878,84881],{"class":41,"line":17718},[39,84877,79679],{"class":3021},[39,84879,84880],{"class":3021}," .count",[39,84882,16628],{"class":45},[39,84884,84885,84887,84889,84891],{"class":41,"line":17732},[39,84886,62891],{"class":56},[39,84888,52491],{"class":45},[39,84890,57],{"class":56},[39,84892,2359],{"class":45},[39,84894,84895,84897,84899,84902],{"class":41,"line":17752},[39,84896,58470],{"class":56},[39,84898,52491],{"class":45},[39,84900,84901],{"class":56},"#aaa",[39,84903,2359],{"class":45},[39,84905,84906],{"class":41,"line":17758},[39,84907,3245],{"class":45},[39,84909,84910],{"class":41,"line":17769},[39,84911,3458],{"emptyLinePlaceholder":1145},[39,84913,84914,84916],{"class":41,"line":17792},[39,84915,73529],{"class":3021},[39,84917,16628],{"class":45},[39,84919,84920,84922,84924,84926,84928],{"class":41,"line":17814},[39,84921,55825],{"class":56},[39,84923,52491],{"class":45},[39,84925,79628],{"class":56},[39,84927,52546],{"class":49},[39,84929,2359],{"class":45},[39,84931,84932,84934,84936,84938,84940],{"class":41,"line":17819},[39,84933,55760],{"class":56},[39,84935,52491],{"class":45},[39,84937,260],{"class":56},[39,84939,52610],{"class":56},[39,84941,2359],{"class":45},[39,84943,84944,84946,84948,84950],{"class":41,"line":17825},[39,84945,56063],{"class":56},[39,84947,52491],{"class":45},[39,84949,52531],{"class":56},[39,84951,2359],{"class":45},[39,84953,84954,84956,84958,84960],{"class":41,"line":17839},[39,84955,56074],{"class":56},[39,84957,52491],{"class":45},[39,84959,52634],{"class":56},[39,84961,2359],{"class":45},[39,84963,84964,84967,84969,84971,84973,84975,84978],{"class":41,"line":17852},[39,84965,84966],{"class":56},"      border-top",[39,84968,52491],{"class":45},[39,84970,57],{"class":56},[39,84972,52546],{"class":49},[39,84974,52575],{"class":56},[39,84976,84977],{"class":56}," #4e4e4e",[39,84979,2359],{"class":45},[39,84981,84982,84984,84986,84988,84990],{"class":41,"line":17857},[39,84983,55749],{"class":56},[39,84985,52491],{"class":45},[39,84987,1898],{"class":56},[39,84989,52546],{"class":49},[39,84991,2359],{"class":45},[39,84993,84994],{"class":41,"line":17871},[39,84995,3245],{"class":45},[39,84997,84998],{"class":41,"line":17876},[39,84999,3458],{"emptyLinePlaceholder":1145},[39,85001,85002,85004,85007],{"class":41,"line":17882},[39,85003,73529],{"class":3021},[39,85005,85006],{"class":3021}," .amount",[39,85008,16628],{"class":45},[39,85010,85011,85013,85015,85017,85019],{"class":41,"line":17887},[39,85012,55976],{"class":56},[39,85014,52491],{"class":45},[39,85016,1849],{"class":56},[39,85018,52546],{"class":49},[39,85020,2359],{"class":45},[39,85022,85023,85025,85027,85029],{"class":41,"line":17901},[39,85024,58470],{"class":56},[39,85026,52491],{"class":45},[39,85028,79994],{"class":56},[39,85030,2359],{"class":45},[39,85032,85033,85035,85037,85039],{"class":41,"line":17906},[39,85034,63388],{"class":56},[39,85036,52491],{"class":45},[39,85038,52543],{"class":56},[39,85040,2359],{"class":45},[39,85042,85043,85045,85047,85049,85051],{"class":41,"line":17911},[39,85044,62804],{"class":56},[39,85046,52491],{"class":45},[39,85048,1855],{"class":56},[39,85050,52546],{"class":49},[39,85052,2359],{"class":45},[39,85054,85055],{"class":41,"line":17925},[39,85056,3245],{"class":45},[39,85058,85059,85061,85063],{"class":41,"line":17937},[39,85060,53471],{"class":45},[39,85062,1133],{"class":52354},[39,85064,52361],{"class":45},[39,85066,85067,85069,85071],{"class":41,"line":17942},[39,85068,52839],{"class":45},[39,85070,52388],{"class":52354},[39,85072,52361],{"class":45},[39,85074,85075],{"class":41,"line":17955},[39,85076,3458],{"emptyLinePlaceholder":1145},[39,85078,85079,85081,85083],{"class":41,"line":17960},[39,85080,2108],{"class":45},[39,85082,52854],{"class":52354},[39,85084,52361],{"class":45},[39,85086,85087,85089,85091,85093,85095,85097],{"class":41,"line":17965},[39,85088,53198],{"class":45},[39,85090,52665],{"class":52354},[39,85092,54540],{"class":3021},[39,85094,50],{"class":45},[39,85096,63662],{"class":1319},[39,85098,52361],{"class":45},[39,85100,85101,85103,85105],{"class":41,"line":17970},[39,85102,53471],{"class":45},[39,85104,52665],{"class":52354},[39,85106,52361],{"class":45},[39,85108,85109,85111,85113,85115,85117,85119],{"class":41,"line":17983},[39,85110,53198],{"class":45},[39,85112,52665],{"class":52354},[39,85114,54540],{"class":3021},[39,85116,50],{"class":45},[39,85118,63634],{"class":1319},[39,85120,52361],{"class":45},[39,85122,85123,85125,85127,85130,85132,85134,85136,85139,85141,85143,85145,85147],{"class":41,"line":17988},[39,85124,52395],{"class":45},[39,85126,52665],{"class":52354},[39,85128,85129],{"class":45},">合计：\u003C",[39,85131,39],{"class":52354},[39,85133,54540],{"class":3021},[39,85135,50],{"class":45},[39,85137,85138],{"class":1319},"\"amount\"",[39,85140,56368],{"class":45},[39,85142,39],{"class":52354},[39,85144,56368],{"class":45},[39,85146,52665],{"class":52354},[39,85148,52361],{"class":45},[39,85150,85151,85153,85155],{"class":41,"line":33688},[39,85152,53471],{"class":45},[39,85154,52665],{"class":52354},[39,85156,52361],{"class":45},[39,85158,85159,85161,85163],{"class":41,"line":33694},[39,85160,53198],{"class":45},[39,85162,52867],{"class":52354},[39,85164,52361],{"class":45},[39,85166,85167,85169,85171,85173],{"class":41,"line":33700},[39,85168,12277],{"class":49},[39,85170,80431],{"class":56},[39,85172,14620],{"class":49},[39,85174,56501],{"class":45},[39,85176,85177],{"class":41,"line":33706},[39,85178,80440],{"class":45},[39,85180,85181,85183,85185],{"class":41,"line":33712},[39,85182,80445],{"class":45},[39,85184,80448],{"class":1319},[39,85186,32521],{"class":45},[39,85188,85189,85191,85193],{"class":41,"line":33723},[39,85190,80455],{"class":45},[39,85192,80458],{"class":1319},[39,85194,32521],{"class":45},[39,85196,85197,85199,85202],{"class":41,"line":33729},[39,85198,80465],{"class":45},[39,85200,85201],{"class":56},"289.9",[39,85203,32521],{"class":45},[39,85205,85206,85208,85210],{"class":41,"line":33749},[39,85207,80475],{"class":45},[39,85209,80478],{"class":1319},[39,85211,32521],{"class":45},[39,85213,85214,85217,85219],{"class":41,"line":33755},[39,85215,85216],{"class":45},"        count: ",[39,85218,63],{"class":56},[39,85220,32521],{"class":45},[39,85222,85223,85226,85229],{"class":41,"line":33766},[39,85224,85225],{"class":45},"        spec: { color: ",[39,85227,85228],{"class":1319},"'白色'",[39,85230,56658],{"class":45},[39,85232,85233],{"class":41,"line":33772},[39,85234,78946],{"class":45},[39,85236,85237],{"class":41,"line":33778},[39,85238,80440],{"class":45},[39,85240,85241,85243,85245],{"class":41,"line":33784},[39,85242,80445],{"class":45},[39,85244,80539],{"class":1319},[39,85246,32521],{"class":45},[39,85248,85249,85251,85253],{"class":41,"line":33790},[39,85250,80455],{"class":45},[39,85252,80548],{"class":1319},[39,85254,32521],{"class":45},[39,85256,85257,85259,85262],{"class":41,"line":33796},[39,85258,80465],{"class":45},[39,85260,85261],{"class":56},"109.8",[39,85263,32521],{"class":45},[39,85265,85266,85268,85270],{"class":41,"line":33802},[39,85267,80475],{"class":45},[39,85269,80566],{"class":1319},[39,85271,32521],{"class":45},[39,85273,85274,85276,85278],{"class":41,"line":33808},[39,85275,85216],{"class":45},[39,85277,68],{"class":56},[39,85279,32521],{"class":45},[39,85281,85282,85285,85287,85289,85291],{"class":41,"line":33828},[39,85283,85284],{"class":45},"        spec: { size: ",[39,85286,82957],{"class":1319},[39,85288,56518],{"class":45},[39,85290,82962],{"class":1319},[39,85292,56658],{"class":45},[39,85294,85295],{"class":41,"line":33834},[39,85296,78946],{"class":45},[39,85298,85299],{"class":41,"line":33850},[39,85300,80440],{"class":45},[39,85302,85303,85305,85307],{"class":41,"line":33856},[39,85304,80445],{"class":45},[39,85306,80583],{"class":1319},[39,85308,32521],{"class":45},[39,85310,85311,85313,85315],{"class":41,"line":33870},[39,85312,80455],{"class":45},[39,85314,80592],{"class":1319},[39,85316,32521],{"class":45},[39,85318,85319,85321,85324],{"class":41,"line":33876},[39,85320,80465],{"class":45},[39,85322,85323],{"class":56},"488",[39,85325,32521],{"class":45},[39,85327,85328,85330,85332],{"class":41,"line":33891},[39,85329,80475],{"class":45},[39,85331,80610],{"class":1319},[39,85333,32521],{"class":45},[39,85335,85336,85338,85340],{"class":41,"line":33897},[39,85337,85216],{"class":45},[39,85339,57],{"class":56},[39,85341,32521],{"class":45},[39,85343,85344,85346,85349,85352,85355],{"class":41,"line":33906},[39,85345,85225],{"class":45},[39,85347,85348],{"class":1319},"'青色'",[39,85350,85351],{"class":45},", sum: ",[39,85353,85354],{"class":1319},"'一大四小'",[39,85356,56658],{"class":45},[39,85358,85359],{"class":41,"line":33912},[39,85360,78946],{"class":45},[39,85362,85363],{"class":41,"line":33921},[39,85364,80440],{"class":45},[39,85366,85367,85369,85371],{"class":41,"line":33927},[39,85368,80445],{"class":45},[39,85370,80627],{"class":1319},[39,85372,32521],{"class":45},[39,85374,85375,85377,85379],{"class":41,"line":33933},[39,85376,80455],{"class":45},[39,85378,80636],{"class":1319},[39,85380,32521],{"class":45},[39,85382,85383,85385,85388],{"class":41,"line":33942},[39,85384,80465],{"class":45},[39,85386,85387],{"class":56},"139",[39,85389,32521],{"class":45},[39,85391,85392,85394,85396],{"class":41,"line":33948},[39,85393,80475],{"class":45},[39,85395,80654],{"class":1319},[39,85397,32521],{"class":45},[39,85399,85400,85402,85404],{"class":41,"line":33959},[39,85401,85216],{"class":45},[39,85403,57],{"class":56},[39,85405,32521],{"class":45},[39,85407,85408,85410,85413,85415,85418],{"class":41,"line":33965},[39,85409,85284],{"class":45},[39,85411,85412],{"class":1319},"'小号'",[39,85414,56518],{"class":45},[39,85416,85417],{"class":1319},"'紫色'",[39,85419,56524],{"class":45},[39,85421,85422,85425],{"class":41,"line":33984},[39,85423,85424],{"class":45},"        gift: ",[39,85426,85427],{"class":1319},"'50g茶叶,清洗球'\n",[39,85429,85430],{"class":41,"line":33990},[39,85431,53452],{"class":45},[39,85433,85434],{"class":41,"line":34001},[39,85435,54163],{"class":45},[39,85437,85438],{"class":41,"line":34007},[39,85439,85440],{"class":102},"    \u002F\u002F  1.根据数据渲染页面\n",[39,85442,85443,85445,85447,85449,85451,85453,85455,85457,85459,85461,85463,85465],{"class":41,"line":34027},[39,85444,53461],{"class":45},[39,85446,55453],{"class":3021},[39,85448,1221],{"class":45},[39,85450,80955],{"class":1319},[39,85452,75303],{"class":45},[39,85454,50],{"class":49},[39,85456,81102],{"class":45},[39,85458,75098],{"class":3021},[39,85460,1221],{"class":45},[39,85462,80849],{"class":254},[39,85464,80852],{"class":49},[39,85466,16628],{"class":45},[39,85468,85469],{"class":41,"line":34043},[39,85470,85471],{"class":102},"      \u002F\u002F 对象解构\n",[39,85473,85474,85476,85478,85480,85482,85484,85486,85489,85491,85493,85495,85498,85500,85503,85505,85507],{"class":41,"line":34049},[39,85475,59282],{"class":49},[39,85477,80861],{"class":45},[39,85479,80874],{"class":56},[39,85481,13491],{"class":45},[39,85483,80864],{"class":56},[39,85485,13491],{"class":45},[39,85487,85488],{"class":56},"count",[39,85490,13491],{"class":45},[39,85492,80869],{"class":56},[39,85494,13491],{"class":45},[39,85496,85497],{"class":56},"spec",[39,85499,13491],{"class":45},[39,85501,85502],{"class":56},"gift",[39,85504,80877],{"class":45},[39,85506,50],{"class":49},[39,85508,80882],{"class":45},[39,85510,85511],{"class":41,"line":34063},[39,85512,85513],{"class":102},"      \u002F\u002F 规格文字模块处理\n",[39,85515,85516,85518,85521,85523,85525,85527,85529,85531,85533,85535],{"class":41,"line":34069},[39,85517,59282],{"class":49},[39,85519,85520],{"class":56}," text",[39,85522,14620],{"class":49},[39,85524,82992],{"class":45},[39,85526,82995],{"class":3021},[39,85528,82998],{"class":45},[39,85530,75277],{"class":3021},[39,85532,1221],{"class":45},[39,85534,83005],{"class":1319},[39,85536,209],{"class":45},[39,85538,85539],{"class":41,"line":34075},[39,85540,85541],{"class":102},"      \u002F\u002F 处理赠品模块\n",[39,85543,85544,85546,85548,85550,85553,85555,85557,85559,85561,85564,85566,85568,85570,85572,85574,85577,85579,85582,85584,85586,85588,85590,85592,85594],{"class":41,"line":34086},[39,85545,59282],{"class":49},[39,85547,74973],{"class":56},[39,85549,14620],{"class":49},[39,85551,85552],{"class":45}," gift ",[39,85554,2184],{"class":49},[39,85556,84166],{"class":45},[39,85558,84169],{"class":3021},[39,85560,1221],{"class":45},[39,85562,85563],{"class":1319},"','",[39,85565,31881],{"class":45},[39,85567,75098],{"class":3021},[39,85569,1221],{"class":45},[39,85571,80849],{"class":254},[39,85573,80852],{"class":49},[39,85575,85576],{"class":1319}," `\u003Cspan class=\"tag\">【赠品】${",[39,85578,80849],{"class":45},[39,85580,85581],{"class":1319},"}\u003C\u002Fspan>`",[39,85583,31881],{"class":45},[39,85585,75277],{"class":3021},[39,85587,1221],{"class":45},[39,85589,75282],{"class":1319},[39,85591,14770],{"class":45},[39,85593,2057],{"class":49},[39,85595,71158],{"class":1319},[39,85597,85598],{"class":41,"line":34092},[39,85599,85600],{"class":102},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[39,85602,85603,85605,85608,85610,85613,85615,85617,85619,85622,85624,85626,85628,85631,85633,85635],{"class":41,"line":34098},[39,85604,59282],{"class":49},[39,85606,85607],{"class":56}," subtotal",[39,85609,14620],{"class":49},[39,85611,85612],{"class":45}," ((price ",[39,85614,1657],{"class":49},[39,85616,6810],{"class":56},[39,85618,7574],{"class":49},[39,85620,85621],{"class":45}," count) ",[39,85623,1784],{"class":49},[39,85625,6810],{"class":56},[39,85627,31881],{"class":45},[39,85629,85630],{"class":3021},"toFixed",[39,85632,1221],{"class":45},[39,85634,63],{"class":56},[39,85636,209],{"class":45},[39,85638,85639],{"class":41,"line":34108},[39,85640,3458],{"emptyLinePlaceholder":1145},[39,85642,85643,85645],{"class":41,"line":34114},[39,85644,75036],{"class":49},[39,85646,71222],{"class":1319},[39,85648,85649],{"class":41,"line":34125},[39,85650,85651],{"class":1319},"        \u003Cdiv class=\"item\">\n",[39,85653,85654,85657,85659],{"class":41,"line":34131},[39,85655,85656],{"class":1319},"          \u003Cimg src=\"${",[39,85658,80874],{"class":45},[39,85660,80906],{"class":1319},[39,85662,85663,85666,85668,85671,85673],{"class":41,"line":34141},[39,85664,85665],{"class":1319},"          \u003Cp class=\"name\">${",[39,85667,80864],{"class":45},[39,85669,85670],{"class":1319},"}${",[39,85672,2368],{"class":45},[39,85674,80916],{"class":1319},[39,85676,85677,85680,85682],{"class":41,"line":34146},[39,85678,85679],{"class":1319},"          \u003Cp class=\"spec\">${",[39,85681,6244],{"class":45},[39,85683,80916],{"class":1319},[39,85685,85686,85689,85691,85693,85695,85697,85699,85701],{"class":41,"line":34152},[39,85687,85688],{"class":1319},"          \u003Cp class=\"price\">${",[39,85690,80869],{"class":45},[39,85692,1758],{"class":1319},[39,85694,85630],{"class":3021},[39,85696,1221],{"class":1319},[39,85698,63],{"class":56},[39,85700,1632],{"class":1319},[39,85702,80916],{"class":1319},[39,85704,85705,85708,85710],{"class":41,"line":34201},[39,85706,85707],{"class":1319},"          \u003Cp class=\"count\">x${",[39,85709,85488],{"class":45},[39,85711,80916],{"class":1319},[39,85713,85714,85717,85720],{"class":41,"line":34248},[39,85715,85716],{"class":1319},"          \u003Cp class=\"sub-total\">${",[39,85718,85719],{"class":45},"subtotal",[39,85721,80916],{"class":1319},[39,85723,85724],{"class":41,"line":34253},[39,85725,85726],{"class":1319},"        \u003C\u002Fdiv> \n",[39,85728,85729],{"class":41,"line":34259},[39,85730,85731],{"class":1319},"             `\n",[39,85733,85734,85737,85739,85741,85743],{"class":41,"line":34278},[39,85735,85736],{"class":45},"    }).",[39,85738,75277],{"class":3021},[39,85740,1221],{"class":45},[39,85742,75282],{"class":1319},[39,85744,209],{"class":45},[39,85746,85747],{"class":41,"line":34284},[39,85748,85749],{"class":102},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[39,85751,85752,85754,85756,85758,85760,85763,85765,85768,85770,85772,85774,85777,85780,85782,85785,85787,85789,85791,85794,85796,85798,85800,85802],{"class":41,"line":34304},[39,85753,12277],{"class":49},[39,85755,63839],{"class":56},[39,85757,14620],{"class":49},[39,85759,81102],{"class":45},[39,85761,85762],{"class":3021},"reduce",[39,85764,3434],{"class":45},[39,85766,85767],{"class":254},"prev",[39,85769,13491],{"class":45},[39,85771,80849],{"class":254},[39,85773,14770],{"class":45},[39,85775,85776],{"class":49},"=>",[39,85778,85779],{"class":45}," prev ",[39,85781,1682],{"class":49},[39,85783,85784],{"class":45}," (item.price ",[39,85786,1657],{"class":49},[39,85788,6810],{"class":56},[39,85790,7574],{"class":49},[39,85792,85793],{"class":45}," item.count) ",[39,85795,1784],{"class":49},[39,85797,6810],{"class":56},[39,85799,13491],{"class":45},[39,85801,260],{"class":56},[39,85803,209],{"class":45},[39,85805,85806,85808,85810,85812,85815,85817,85819,85822,85824,85826,85828],{"class":41,"line":34310},[39,85807,53461],{"class":45},[39,85809,55453],{"class":3021},[39,85811,1221],{"class":45},[39,85813,85814],{"class":1319},"'.amount'",[39,85816,75303],{"class":45},[39,85818,50],{"class":49},[39,85820,85821],{"class":45}," total.",[39,85823,85630],{"class":3021},[39,85825,1221],{"class":45},[39,85827,63],{"class":56},[39,85829,209],{"class":45},[39,85831,85832,85834,85836],{"class":41,"line":34316},[39,85833,53471],{"class":45},[39,85835,52867],{"class":52354},[39,85837,52361],{"class":45},[39,85839,85840,85842,85844],{"class":41,"line":34326},[39,85841,52839],{"class":45},[39,85843,52854],{"class":52354},[39,85845,52361],{"class":45},[39,85847,85848],{"class":41,"line":34331},[39,85849,3458],{"emptyLinePlaceholder":1145},[39,85851,85852,85854,85856],{"class":41,"line":34337},[39,85853,52839],{"class":45},[39,85855,51689],{"class":52354},[39,85857,52361],{"class":45},[14,85859,85861],{"id":85860},"_411-编程思想","4.11 编程思想",[1188,85863,85865],{"id":85864},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,85867,85868,85871],{},[304,85869,85870],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,85873,85874],{},"调用就可以了",[19,85876,85877],{},[269,85878],{"alt":34,"src":85879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[1188,85881,85883],{"id":85882},"_4112-面向对象","4.11.2 面向对象",[19,85885,85886],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,85888,85889],{},[269,85890],{"alt":34,"src":85891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,85893,85894],{},"面向对象的特性：",[2205,85896,85897,85900,85903],{},[1174,85898,85899],{},"封装性",[1174,85901,85902],{},"继承性",[1174,85904,85905],{},"多态性",[1188,85907,85909],{"id":85908},"_4113-两者比较","4.11.3 两者比较",[19,85911,85912],{},[269,85913],{"alt":34,"src":85914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85916,85918],{"id":85917},"_412-构造函数回顾","4.12 构造函数回顾",[19,85920,85921],{},[269,85922],{"alt":34,"src":85923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85925,85926],{},[269,85927],{"alt":34,"src":85928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85930,85931],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85933,85934],{},[269,85935],{"alt":34,"src":85936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85938,85940],{"id":85939},"_413-原型","4.13 原型",[1188,85942,85944],{"id":85943},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85946,85947],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85949,85950],{},[269,85951],{"alt":34,"src":85952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85954,85955],{},[269,85956],{"alt":34,"src":85957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85959,85960],{},"原型是构造函数的属性，它也是一个对象",[19,85962,85963],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85965,85966],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[29,85968,85970],{"className":54121,"code":85969,"language":54123,"meta":34,"style":34},"\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",[36,85971,85972,85980,85985,85993,85998,86003,86008,86013,86018,86022,86026,86030,86035,86040,86044,86049,86054,86059,86064,86069,86073,86081],{"__ignoreMap":34},[39,85973,85974,85976,85978],{"class":41,"line":42},[39,85975,2108],{"class":45},[39,85977,52854],{"class":52354},[39,85979,52361],{"class":45},[39,85981,85982],{"class":41,"line":74},[39,85983,85984],{"class":102},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[39,85986,85987,85989,85991],{"class":41,"line":99},[39,85988,53198],{"class":45},[39,85990,52867],{"class":52354},[39,85992,52361],{"class":45},[39,85994,85995],{"class":41,"line":106},[39,85996,85997],{"class":45},"    function Star(uname, age) {\n",[39,85999,86000],{"class":41,"line":112},[39,86001,86002],{"class":45},"      this.uname = uname,\n",[39,86004,86005],{"class":41,"line":118},[39,86006,86007],{"class":45},"        this.age = age\n",[39,86009,86010],{"class":41,"line":413},[39,86011,86012],{"class":45},"      \u002F\u002F this.sing = function () {\n",[39,86014,86015],{"class":41,"line":419},[39,86016,86017],{"class":45},"      \u002F\u002F   console.log('唱歌')\n",[39,86019,86020],{"class":41,"line":425},[39,86021,3458],{"emptyLinePlaceholder":1145},[39,86023,86024],{"class":41,"line":443},[39,86025,61091],{"class":45},[39,86027,86028],{"class":41,"line":449},[39,86029,3245],{"class":45},[39,86031,86032],{"class":41,"line":455},[39,86033,86034],{"class":45},"    Star.prototype.sing = function () {\n",[39,86036,86037],{"class":41,"line":461},[39,86038,86039],{"class":45},"      console.log('唱歌')\n",[39,86041,86042],{"class":41,"line":475},[39,86043,3245],{"class":45},[39,86045,86046],{"class":41,"line":665},[39,86047,86048],{"class":45},"    \u002F\u002F console.dir(Star.prototype)\n",[39,86050,86051],{"class":41,"line":671},[39,86052,86053],{"class":45},"    const pink = new Star('pink', 18)\n",[39,86055,86056],{"class":41,"line":684},[39,86057,86058],{"class":45},"    const red = new Star('red', 20)\n",[39,86060,86061],{"class":41,"line":2732},[39,86062,86063],{"class":45},"    pink.sing()\n",[39,86065,86066],{"class":41,"line":2737},[39,86067,86068],{"class":45},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[39,86070,86071],{"class":41,"line":2751},[39,86072,3458],{"emptyLinePlaceholder":1145},[39,86074,86075,86077,86079],{"class":41,"line":2756},[39,86076,53471],{"class":45},[39,86078,52867],{"class":52354},[39,86080,52361],{"class":45},[39,86082,86083,86085,86087],{"class":41,"line":2785},[39,86084,52839],{"class":45},[39,86086,52854],{"class":52354},[39,86088,52361],{"class":45},[19,86090,86091],{},[269,86092],{"alt":34,"src":86093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[29,86095,86097],{"className":54121,"code":86096,"language":54123,"meta":34,"style":34},"\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",[36,86098,86099,86107,86115,86120,86125,86130,86135,86139,86144,86149,86154,86158,86163,86167,86171,86176,86180,86188],{"__ignoreMap":34},[39,86100,86101,86103,86105],{"class":41,"line":42},[39,86102,2108],{"class":45},[39,86104,52854],{"class":52354},[39,86106,52361],{"class":45},[39,86108,86109,86111,86113],{"class":41,"line":74},[39,86110,53198],{"class":45},[39,86112,52867],{"class":52354},[39,86114,52361],{"class":45},[39,86116,86117],{"class":41,"line":99},[39,86118,86119],{"class":45},"    let that\n",[39,86121,86122],{"class":41,"line":106},[39,86123,86124],{"class":45},"    function Star(uname) {\n",[39,86126,86127],{"class":41,"line":112},[39,86128,86129],{"class":45},"      this.uname = uname\n",[39,86131,86132],{"class":41,"line":118},[39,86133,86134],{"class":45},"      that = this\n",[39,86136,86137],{"class":41,"line":413},[39,86138,3245],{"class":45},[39,86140,86141],{"class":41,"line":419},[39,86142,86143],{"class":45},"    \u002F\u002F 实例对象是 ldh\n",[39,86145,86146],{"class":41,"line":425},[39,86147,86148],{"class":45},"    const ldh = new Star('刘德华')\n",[39,86150,86151],{"class":41,"line":443},[39,86152,86153],{"class":45},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[39,86155,86156],{"class":41,"line":449},[39,86157,3458],{"emptyLinePlaceholder":1145},[39,86159,86160],{"class":41,"line":455},[39,86161,86162],{"class":45},"    Star.sing = function () {\n",[39,86164,86165],{"class":41,"line":461},[39,86166,86039],{"class":45},[39,86168,86169],{"class":41,"line":475},[39,86170,3245],{"class":45},[39,86172,86173],{"class":41,"line":665},[39,86174,86175],{"class":45},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[39,86177,86178],{"class":41,"line":671},[39,86179,3458],{"emptyLinePlaceholder":1145},[39,86181,86182,86184,86186],{"class":41,"line":684},[39,86183,53471],{"class":45},[39,86185,52867],{"class":52354},[39,86187,52361],{"class":45},[39,86189,86190,86192,86194],{"class":41,"line":2732},[39,86191,52839],{"class":45},[39,86193,52854],{"class":52354},[39,86195,52361],{"class":45},[19,86197,86198],{},"构造函数的this指向的是实例对象；",[19,86200,86201],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[1188,86203,86205],{"id":86204},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,86207,86208],{},[269,86209],{"alt":34,"src":86210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[29,86212,86214],{"className":54121,"code":86213,"language":54123,"meta":34,"style":34},"\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",[36,86215,86216,86224,86232,86237,86242,86247,86252,86257,86262,86267,86272,86277,86282,86286,86291,86296,86301,86306,86310,86315,86320,86325,86330,86334,86339,86344,86349,86354,86358,86363,86367,86375],{"__ignoreMap":34},[39,86217,86218,86220,86222],{"class":41,"line":42},[39,86219,2108],{"class":45},[39,86221,52854],{"class":52354},[39,86223,52361],{"class":45},[39,86225,86226,86228,86230],{"class":41,"line":74},[39,86227,53198],{"class":45},[39,86229,52867],{"class":52354},[39,86231,52361],{"class":45},[39,86233,86234],{"class":41,"line":99},[39,86235,86236],{"class":45},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[39,86238,86239],{"class":41,"line":106},[39,86240,86241],{"class":45},"    const arr = [1, 2, 3]\n",[39,86243,86244],{"class":41,"line":112},[39,86245,86246],{"class":45},"    \u002F\u002F 自己定义数组的扩展方法\n",[39,86248,86249],{"class":41,"line":118},[39,86250,86251],{"class":45},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[39,86253,86254],{"class":41,"line":413},[39,86255,86256],{"class":45},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[39,86258,86259],{"class":41,"line":419},[39,86260,86261],{"class":45},"    \u002F\u002F ①.最大值\n",[39,86263,86264],{"class":41,"line":425},[39,86265,86266],{"class":45},"    Array.prototype.max = function () {\n",[39,86268,86269],{"class":41,"line":443},[39,86270,86271],{"class":45},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[39,86273,86274],{"class":41,"line":449},[39,86275,86276],{"class":45},"      return Math.max(...this)\n",[39,86278,86279],{"class":41,"line":455},[39,86280,86281],{"class":45},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[39,86283,86284],{"class":41,"line":461},[39,86285,3245],{"class":45},[39,86287,86288],{"class":41,"line":475},[39,86289,86290],{"class":45},"    console.log(arr.max())\n",[39,86292,86293],{"class":41,"line":665},[39,86294,86295],{"class":45},"    \u002F\u002F ②最小值\n",[39,86297,86298],{"class":41,"line":671},[39,86299,86300],{"class":45},"    Array.prototype.min = function () {\n",[39,86302,86303],{"class":41,"line":684},[39,86304,86305],{"class":45},"      return Math.min(...this)\n",[39,86307,86308],{"class":41,"line":2732},[39,86309,3245],{"class":45},[39,86311,86312],{"class":41,"line":2737},[39,86313,86314],{"class":45},"    console.log(arr.min())\n",[39,86316,86317],{"class":41,"line":2751},[39,86318,86319],{"class":45},"    \u002F\u002F③求和\n",[39,86321,86322],{"class":41,"line":2756},[39,86323,86324],{"class":45},"    Array.prototype.sum = function () {\n",[39,86326,86327],{"class":41,"line":2785},[39,86328,86329],{"class":45},"      return this.reduce((prev, current) => prev + current, 0)\n",[39,86331,86332],{"class":41,"line":2790},[39,86333,3245],{"class":45},[39,86335,86336],{"class":41,"line":2807},[39,86337,86338],{"class":45},"    console.log(arr.sum())\n",[39,86340,86341],{"class":41,"line":2812},[39,86342,86343],{"class":45},"    \u002F\u002F ③排序\n",[39,86345,86346],{"class":41,"line":2817},[39,86347,86348],{"class":45},"    Array.prototype.rever = function () {\n",[39,86350,86351],{"class":41,"line":2822},[39,86352,86353],{"class":45},"      return this.reverse()\n",[39,86355,86356],{"class":41,"line":2836},[39,86357,3245],{"class":45},[39,86359,86360],{"class":41,"line":2841},[39,86361,86362],{"class":45},"    console.log(arr.rever())\n",[39,86364,86365],{"class":41,"line":3635},[39,86366,3458],{"emptyLinePlaceholder":1145},[39,86368,86369,86371,86373],{"class":41,"line":3649},[39,86370,53471],{"class":45},[39,86372,52867],{"class":52354},[39,86374,52361],{"class":45},[39,86376,86377,86379,86381],{"class":41,"line":3657},[39,86378,52839],{"class":45},[39,86380,52854],{"class":52354},[39,86382,52361],{"class":45},[19,86384,86385],{},[269,86386],{"alt":34,"src":86387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[1188,86389,86391],{"id":86390},"_4133-constructor-属性","4.13.3 constructor 属性",[19,86393,86394],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,86396,86397],{},[269,86398],{"alt":34,"src":86399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[29,86401,86403],{"className":54121,"code":86402,"language":54123,"meta":34,"style":34},"\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",[36,86404,86405,86413,86421,86426,86431,86435,86440,86445,86450,86458],{"__ignoreMap":34},[39,86406,86407,86409,86411],{"class":41,"line":42},[39,86408,2108],{"class":45},[39,86410,52854],{"class":52354},[39,86412,52361],{"class":45},[39,86414,86415,86417,86419],{"class":41,"line":74},[39,86416,53198],{"class":45},[39,86418,52867],{"class":52354},[39,86420,52361],{"class":45},[39,86422,86423],{"class":41,"line":99},[39,86424,86425],{"class":45},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[39,86427,86428],{"class":41,"line":106},[39,86429,86430],{"class":45},"    function Star() {\n",[39,86432,86433],{"class":41,"line":112},[39,86434,3245],{"class":45},[39,86436,86437],{"class":41,"line":118},[39,86438,86439],{"class":45},"    const ldh = new Star()\n",[39,86441,86442],{"class":41,"line":413},[39,86443,86444],{"class":45},"    console.log(Star.prototype)\n",[39,86446,86447],{"class":41,"line":419},[39,86448,86449],{"class":45},"    console.log(Star.prototype.constructor === Star)\n",[39,86451,86452,86454,86456],{"class":41,"line":425},[39,86453,53471],{"class":45},[39,86455,52867],{"class":52354},[39,86457,52361],{"class":45},[39,86459,86460,86462,86464],{"class":41,"line":443},[39,86461,52839],{"class":45},[39,86463,52854],{"class":52354},[39,86465,52361],{"class":45},[19,86467,86468],{},[269,86469],{"alt":34,"src":86470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,86472,86473],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[29,86475,86477],{"className":54121,"code":86476,"language":54123,"meta":34,"style":34},"  \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",[36,86478,86479,86487,86491,86495,86499,86504,86509,86514,86518,86523,86528,86533,86538,86543,86548,86552,86556,86561,86566,86571,86575,86580,86585,86589,86593,86597],{"__ignoreMap":34},[39,86480,86481,86483,86485],{"class":41,"line":42},[39,86482,53198],{"class":45},[39,86484,52867],{"class":52354},[39,86486,52361],{"class":45},[39,86488,86489],{"class":41,"line":74},[39,86490,86425],{"class":45},[39,86492,86493],{"class":41,"line":99},[39,86494,86430],{"class":45},[39,86496,86497],{"class":41,"line":106},[39,86498,3245],{"class":45},[39,86500,86501],{"class":41,"line":112},[39,86502,86503],{"class":45},"    \u002F\u002F const ldh = new Star()\n",[39,86505,86506],{"class":41,"line":118},[39,86507,86508],{"class":45},"    \u002F\u002F console.log(Star.prototype)\n",[39,86510,86511],{"class":41,"line":413},[39,86512,86513],{"class":45},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[39,86515,86516],{"class":41,"line":419},[39,86517,3458],{"emptyLinePlaceholder":1145},[39,86519,86520],{"class":41,"line":425},[39,86521,86522],{"class":45},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[39,86524,86525],{"class":41,"line":443},[39,86526,86527],{"class":45},"    \u002F\u002F Star.prototype.sing = function () {\n",[39,86529,86530],{"class":41,"line":449},[39,86531,86532],{"class":45},"    \u002F\u002F   console.log('唱歌')\n",[39,86534,86535],{"class":41,"line":455},[39,86536,86537],{"class":45},"    \u002F\u002F }\n",[39,86539,86540],{"class":41,"line":461},[39,86541,86542],{"class":45},"    \u002F\u002F Star.prototype.dance = function () {\n",[39,86544,86545],{"class":41,"line":475},[39,86546,86547],{"class":45},"    \u002F\u002F   console.log('跳舞')\n",[39,86549,86550],{"class":41,"line":665},[39,86551,86537],{"class":45},[39,86553,86554],{"class":41,"line":671},[39,86555,86444],{"class":45},[39,86557,86558],{"class":41,"line":684},[39,86559,86560],{"class":45},"    Star.prototype = {\n",[39,86562,86563],{"class":41,"line":2732},[39,86564,86565],{"class":45},"      sing: function () {\n",[39,86567,86568],{"class":41,"line":2737},[39,86569,86570],{"class":45},"        console.log('唱歌')\n",[39,86572,86573],{"class":41,"line":2751},[39,86574,78946],{"class":45},[39,86576,86577],{"class":41,"line":2756},[39,86578,86579],{"class":45},"      dance: function () {\n",[39,86581,86582],{"class":41,"line":2785},[39,86583,86584],{"class":45},"        console.log('跳舞')\n",[39,86586,86587],{"class":41,"line":2790},[39,86588,53452],{"class":45},[39,86590,86591],{"class":41,"line":2807},[39,86592,3245],{"class":45},[39,86594,86595],{"class":41,"line":2812},[39,86596,86444],{"class":45},[39,86598,86599,86601,86603],{"class":41,"line":2817},[39,86600,53471],{"class":45},[39,86602,52867],{"class":52354},[39,86604,52361],{"class":45},[19,86606,86607],{},"进行输出结果后会发现：",[19,86609,86610],{},[269,86611],{"alt":34,"src":86612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,86614,86615],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,86617,86618],{},"所以，要重新指回创造这个原型对象的构造函数",[29,86620,86622],{"className":72267,"code":86621,"language":72269,"meta":34,"style":34},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[36,86623,86624,86638,86643,86648,86659,86672,86677,86688,86702,86706],{"__ignoreMap":34},[39,86625,86626,86629,86631,86634,86636],{"class":41,"line":42},[39,86627,86628],{"class":56},"Star",[39,86630,1758],{"class":45},[39,86632,86633],{"class":56},"prototype",[39,86635,14620],{"class":49},[39,86637,16628],{"class":45},[39,86639,86640],{"class":41,"line":74},[39,86641,86642],{"class":102},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[39,86644,86645],{"class":41,"line":99},[39,86646,86647],{"class":45},"  constructor: Star,\n",[39,86649,86650,86653,86655,86657],{"class":41,"line":106},[39,86651,86652],{"class":3021},"  sing",[39,86654,52491],{"class":45},[39,86656,55503],{"class":49},[39,86658,55506],{"class":45},[39,86660,86661,86663,86665,86667,86670],{"class":41,"line":112},[39,86662,74807],{"class":45},[39,86664,59301],{"class":3021},[39,86666,1221],{"class":45},[39,86668,86669],{"class":1319},"'唱歌'",[39,86671,209],{"class":45},[39,86673,86674],{"class":41,"line":118},[39,86675,86676],{"class":45},"   },\n",[39,86678,86679,86682,86684,86686],{"class":41,"line":413},[39,86680,86681],{"class":3021},"   dance",[39,86683,52491],{"class":45},[39,86685,55503],{"class":49},[39,86687,55506],{"class":45},[39,86689,86690,86693,86695,86697,86700],{"class":41,"line":419},[39,86691,86692],{"class":45},"     console.",[39,86694,59301],{"class":3021},[39,86696,1221],{"class":45},[39,86698,86699],{"class":1319},"'跳舞'",[39,86701,209],{"class":45},[39,86703,86704],{"class":41,"line":425},[39,86705,5367],{"class":45},[39,86707,86708],{"class":41,"line":443},[39,86709,2630],{"class":45},[19,86711,86712],{},[269,86713],{"alt":34,"src":86714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,86716,86717],{},"总结1：",[19,86719,86720],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,86722,86723],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,86725,86726],{},"constructor指的是他的来源",[19,86728,86729],{},[269,86730],{"alt":34,"src":86731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,86733,86734],{},[269,86735],{"alt":34,"src":86736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,86738,86739],{},"总结2：",[19,86741,86742],{},[269,86743],{"alt":34,"src":86744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,86746,86747],{},[269,86748],{"alt":34,"src":86749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,86751,86752],{},[269,86753],{"alt":34,"src":86754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[1188,86756,86758],{"id":86757},"_4134-对象原型","4.13.4 对象原型",[19,86760,86761],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,86763,86764],{},"对象原型就是__proto__这个属性",[19,86766,86767],{},[269,86768],{"alt":34,"src":86769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,86771,86772],{},[269,86773],{"alt":34,"src":86774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,86776,86777],{},[269,86778],{"alt":34,"src":86779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,86781,86782],{},[269,86783],{"alt":34,"src":86784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[29,86786,86788],{"className":54121,"code":86787,"language":54123,"meta":34,"style":34},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[36,86789,86790,86798,86806,86810,86814,86818,86823,86831],{"__ignoreMap":34},[39,86791,86792,86794,86796],{"class":41,"line":42},[39,86793,2108],{"class":45},[39,86795,52854],{"class":52354},[39,86797,52361],{"class":45},[39,86799,86800,86802,86804],{"class":41,"line":74},[39,86801,53198],{"class":45},[39,86803,52867],{"class":52354},[39,86805,52361],{"class":45},[39,86807,86808],{"class":41,"line":99},[39,86809,86430],{"class":45},[39,86811,86812],{"class":41,"line":106},[39,86813,3245],{"class":45},[39,86815,86816],{"class":41,"line":112},[39,86817,86439],{"class":45},[39,86819,86820],{"class":41,"line":118},[39,86821,86822],{"class":45},"    console.log(ldh)\n",[39,86824,86825,86827,86829],{"class":41,"line":413},[39,86826,53471],{"class":45},[39,86828,52867],{"class":52354},[39,86830,52361],{"class":45},[39,86832,86833,86835,86837],{"class":41,"line":419},[39,86834,52839],{"class":45},[39,86836,52854],{"class":52354},[39,86838,52361],{"class":45},[19,86840,86841],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,86843,86844],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,86846,86847],{},[269,86848],{"alt":34,"src":86849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,86851,86852],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,86854,86855],{},"对象原型指向原型对象",[19,86857,86858],{},[269,86859],{"alt":34,"src":86860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,86862,86863],{},[269,86864],{"alt":34,"src":86865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,86867,86868],{},[269,86869],{"alt":34,"src":86870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[1188,86872,86874],{"id":86873},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,86876,86877],{},[269,86878],{"alt":34,"src":86879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[1171,86881,86882,86885,86888,86891],{},[1174,86883,86884],{},"构造函数通过new的形式实例化得到实例对象",[1174,86886,86887],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[1174,86889,86890],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[1174,86892,86893],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,86895,86896],{},[269,86897],{"alt":34,"src":86898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,86900,86901],{},"题目梳理：",[19,86903,86904],{},[269,86905],{"alt":34,"src":86906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[1188,86908,86910],{"id":86909},"_4136-原型继承","4.13.6 原型继承",[19,86912,86913],{},[269,86914],{"alt":34,"src":86915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86917,86918],{},[269,86919],{"alt":34,"src":86920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86922,86923],{},[269,86924],{"alt":34,"src":86925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86927,86928],{},[269,86929],{"alt":34,"src":86930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86932,86933],{},[269,86934],{"alt":34,"src":86935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86937,86938],{},[269,86939],{"alt":34,"src":86940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86942,86943],{},[269,86944],{"alt":34,"src":86945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86947,86948],{},[269,86949],{"alt":34,"src":86950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86952,86953],{},"回顾：构造函数每次new得到对象都是不同的",[1188,86955,86957],{"id":86956},"_4137-原型链","4.13.7 原型链",[19,86959,86960],{},[269,86961],{"alt":34,"src":86962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86964,86965],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86967,86968],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86970,86971],{},"大哥是Object",[19,86973,86974],{},[269,86975],{"alt":34,"src":86976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86978,86979],{},[269,86980],{"alt":34,"src":86981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86983,86984],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86986,86987],{},"万物皆对象",[1188,86989,86991],{"id":86990},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86993,86994],{},"模态框",[19,86996,86997],{},"以后遇见这个效果直接使用这个就行",[19,86999,87000],{},[269,87001],{"alt":34,"src":87002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87004,87005],{},[269,87006],{"alt":34,"src":87007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87009,87010],{},[269,87011],{"alt":34,"src":87012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87014,87015],{},[269,87016],{"alt":34,"src":87017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87019,87020],{},"补充知识点：",[1171,87022,87023],{},[1174,87024,87025],{},"append()",[19,87027,87028],{},[269,87029],{"alt":34,"src":87030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[29,87032,87034],{"className":51687,"code":87033,"language":51689,"meta":34,"style":34},"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",[36,87035,87036,87041,87046,87051,87055,87059,87063,87068,87073,87078,87082],{"__ignoreMap":34},[39,87037,87038],{"class":41,"line":42},[39,87039,87040],{"class":45},"append(param1)\n",[39,87042,87043],{"class":41,"line":74},[39,87044,87045],{"class":45},"append(param1, param2)\n",[39,87047,87048],{"class":41,"line":99},[39,87049,87050],{"class":45},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[39,87052,87053],{"class":41,"line":106},[39,87054,3458],{"emptyLinePlaceholder":1145},[39,87056,87057],{"class":41,"line":112},[39,87058,3458],{"emptyLinePlaceholder":1145},[39,87060,87061],{"class":41,"line":118},[39,87062,3458],{"emptyLinePlaceholder":1145},[39,87064,87065],{"class":41,"line":413},[39,87066,87067],{"class":45},"let div = document.createElement(\"div\");\n",[39,87069,87070],{"class":41,"line":419},[39,87071,87072],{"class":45},"let p = document.createElement(\"p\");\n",[39,87074,87075],{"class":41,"line":425},[39,87076,87077],{"class":45},"div.append(p);\n",[39,87079,87080],{"class":41,"line":443},[39,87081,3458],{"emptyLinePlaceholder":1145},[39,87083,87084,87087,87089],{"class":41,"line":449},[39,87085,87086],{"class":45},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[39,87088,19],{"class":52354},[39,87090,87091],{"class":45},"> ]\n",[1171,87093,87094],{"start":74},[1174,87095,87096],{},"remove()",[19,87098,87099],{},"自己删自己",[19,87101,87102],{},[269,87103],{"alt":34,"src":87104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[29,87106,87108],{"className":51687,"code":87107,"language":51689,"meta":34,"style":34},"\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",[36,87109,87110,87120,87134,87138,87146,87160,87180,87192,87200,87207,87219,87232,87267,87279,87290,87302,87314,87326,87353,87363,87367,87371,87380,87392,87406,87416,87428,87432,87436,87446,87457,87467,87477,87490,87503,87513,87517,87521,87530,87540,87552,87556,87560,87569,87579,87589,87601,87605,87609,87619,87635,87646,87656,87666,87678,87690,87702,87706,87710,87723,87734,87738,87746,87754,87758,87766,87786,87806,87814,87819,87845,87850,87855,87874,87879,87891,87896,87907,87917,87927,87932,87937,87941,87946,87951,87956,87976,87981,88001,88006,88020,88025,88030,88035,88051,88055,88060,88089,88094,88099,88104,88115,88119,88123,88127,88132,88157,88162,88187,88192,88201,88205,88210,88235,88239,88264,88268,88277,88281,88286,88304,88314,88318,88326,88334,88338],{"__ignoreMap":34},[39,87111,87112,87114,87116,87118],{"class":41,"line":42},[39,87113,52351],{"class":45},[39,87115,52355],{"class":52354},[39,87117,52358],{"class":3021},[39,87119,52361],{"class":45},[39,87121,87122,87124,87126,87128,87130,87132],{"class":41,"line":74},[39,87123,2108],{"class":45},[39,87125,51689],{"class":52354},[39,87127,52370],{"class":3021},[39,87129,50],{"class":45},[39,87131,52375],{"class":1319},[39,87133,52361],{"class":45},[39,87135,87136],{"class":41,"line":99},[39,87137,3458],{"emptyLinePlaceholder":1145},[39,87139,87140,87142,87144],{"class":41,"line":106},[39,87141,2108],{"class":45},[39,87143,52388],{"class":52354},[39,87145,52361],{"class":45},[39,87147,87148,87150,87152,87154,87156,87158],{"class":41,"line":112},[39,87149,53198],{"class":45},[39,87151,52398],{"class":52354},[39,87153,52401],{"class":3021},[39,87155,50],{"class":45},[39,87157,52406],{"class":1319},[39,87159,52361],{"class":45},[39,87161,87162,87164,87166,87168,87170,87172,87174,87176,87178],{"class":41,"line":118},[39,87163,53198],{"class":45},[39,87165,52398],{"class":52354},[39,87167,15976],{"class":3021},[39,87169,50],{"class":45},[39,87171,52445],{"class":1319},[39,87173,52425],{"class":3021},[39,87175,50],{"class":45},[39,87177,52452],{"class":1319},[39,87179,52361],{"class":45},[39,87181,87182,87184,87186,87188,87190],{"class":41,"line":413},[39,87183,53198],{"class":45},[39,87185,52461],{"class":52354},[39,87187,52464],{"class":45},[39,87189,52461],{"class":52354},[39,87191,52361],{"class":45},[39,87193,87194,87196,87198],{"class":41,"line":419},[39,87195,53198],{"class":45},[39,87197,1133],{"class":52354},[39,87199,52361],{"class":45},[39,87201,87202,87205],{"class":41,"line":425},[39,87203,87204],{"class":3021},"    .modal",[39,87206,16628],{"class":45},[39,87208,87209,87211,87213,87215,87217],{"class":41,"line":443},[39,87210,55825],{"class":56},[39,87212,52491],{"class":45},[39,87214,5031],{"class":56},[39,87216,52546],{"class":49},[39,87218,2359],{"class":45},[39,87220,87221,87224,87226,87228,87230],{"class":41,"line":449},[39,87222,87223],{"class":56},"      min-height",[39,87225,52491],{"class":45},[39,87227,1519],{"class":56},[39,87229,52546],{"class":49},[39,87231,2359],{"class":45},[39,87233,87234,87236,87238,87240,87242,87244,87246,87248,87250,87252,87254,87256,87258,87260,87262,87265],{"class":41,"line":455},[39,87235,79804],{"class":56},[39,87237,52491],{"class":45},[39,87239,260],{"class":56},[39,87241,5151],{"class":56},[39,87243,3096],{"class":56},[39,87245,52546],{"class":49},[39,87247,79821],{"class":56},[39,87249,1221],{"class":45},[39,87251,260],{"class":56},[39,87253,13491],{"class":45},[39,87255,260],{"class":56},[39,87257,13491],{"class":45},[39,87259,260],{"class":56},[39,87261,13491],{"class":45},[39,87263,87264],{"class":56},"0.1",[39,87266,3777],{"class":45},[39,87268,87269,87271,87273,87275,87277],{"class":41,"line":461},[39,87270,56188],{"class":56},[39,87272,52491],{"class":45},[39,87274,84],{"class":56},[39,87276,52546],{"class":49},[39,87278,2359],{"class":45},[39,87280,87281,87283,87285,87288],{"class":41,"line":475},[39,87282,55813],{"class":56},[39,87284,52491],{"class":45},[39,87286,87287],{"class":56},"fixed",[39,87289,2359],{"class":45},[39,87291,87292,87295,87297,87300],{"class":41,"line":665},[39,87293,87294],{"class":56},"      z-index",[39,87296,52491],{"class":45},[39,87298,87299],{"class":56},"999",[39,87301,2359],{"class":45},[39,87303,87304,87306,87308,87310,87312],{"class":41,"line":671},[39,87305,55892],{"class":56},[39,87307,52491],{"class":45},[39,87309,1855],{"class":56},[39,87311,1534],{"class":49},[39,87313,2359],{"class":45},[39,87315,87316,87318,87320,87322,87324],{"class":41,"line":684},[39,87317,56001],{"class":56},[39,87319,52491],{"class":45},[39,87321,1855],{"class":56},[39,87323,1534],{"class":49},[39,87325,2359],{"class":45},[39,87327,87328,87330,87332,87334,87336,87339,87341,87343,87345,87347,87349,87351],{"class":41,"line":2732},[39,87329,79845],{"class":56},[39,87331,52491],{"class":45},[39,87333,79850],{"class":56},[39,87335,1221],{"class":45},[39,87337,87338],{"class":56},"-50",[39,87340,1534],{"class":49},[39,87342,13491],{"class":45},[39,87344,87338],{"class":56},[39,87346,1534],{"class":49},[39,87348,13491],{"class":45},[39,87350,260],{"class":56},[39,87352,3777],{"class":45},[39,87354,87355,87357,87359,87361],{"class":41,"line":2737},[39,87356,55938],{"class":56},[39,87358,52491],{"class":45},[39,87360,61896],{"class":56},[39,87362,2359],{"class":45},[39,87364,87365],{"class":41,"line":2751},[39,87366,3245],{"class":45},[39,87368,87369],{"class":41,"line":2756},[39,87370,3458],{"emptyLinePlaceholder":1145},[39,87372,87373,87375,87378],{"class":41,"line":2785},[39,87374,87204],{"class":3021},[39,87376,87377],{"class":3021}," .header",[39,87379,16628],{"class":45},[39,87381,87382,87384,87386,87388,87390],{"class":41,"line":2790},[39,87383,58413],{"class":56},[39,87385,52491],{"class":45},[39,87387,1604],{"class":56},[39,87389,52546],{"class":49},[39,87391,2359],{"class":45},[39,87393,87394,87396,87398,87400,87402,87404],{"class":41,"line":2807},[39,87395,55749],{"class":56},[39,87397,52491],{"class":45},[39,87399,260],{"class":56},[39,87401,3096],{"class":56},[39,87403,52546],{"class":49},[39,87405,2359],{"class":45},[39,87407,87408,87410,87412,87414],{"class":41,"line":2812},[39,87409,55813],{"class":56},[39,87411,52491],{"class":45},[39,87413,55818],{"class":56},[39,87415,2359],{"class":45},[39,87417,87418,87420,87422,87424,87426],{"class":41,"line":2817},[39,87419,55976],{"class":56},[39,87421,52491],{"class":45},[39,87423,1898],{"class":56},[39,87425,52546],{"class":49},[39,87427,2359],{"class":45},[39,87429,87430],{"class":41,"line":2822},[39,87431,3245],{"class":45},[39,87433,87434],{"class":41,"line":2836},[39,87435,3458],{"emptyLinePlaceholder":1145},[39,87437,87438,87440,87442,87444],{"class":41,"line":2841},[39,87439,87204],{"class":3021},[39,87441,87377],{"class":3021},[39,87443,4090],{"class":52354},[39,87445,16628],{"class":45},[39,87447,87448,87451,87453,87455],{"class":41,"line":3635},[39,87449,87450],{"class":56},"      font-style",[39,87452,52491],{"class":45},[39,87454,64895],{"class":56},[39,87456,2359],{"class":45},[39,87458,87459,87461,87463,87465],{"class":41,"line":3649},[39,87460,58470],{"class":56},[39,87462,52491],{"class":45},[39,87464,63124],{"class":56},[39,87466,2359],{"class":45},[39,87468,87469,87471,87473,87475],{"class":41,"line":3657},[39,87470,55813],{"class":56},[39,87472,52491],{"class":45},[39,87474,55885],{"class":56},[39,87476,2359],{"class":45},[39,87478,87479,87482,87484,87486,87488],{"class":41,"line":3662},[39,87480,87481],{"class":56},"      right",[39,87483,52491],{"class":45},[39,87485,1775],{"class":56},[39,87487,52546],{"class":49},[39,87489,2359],{"class":45},[39,87491,87492,87494,87496,87499,87501],{"class":41,"line":3668},[39,87493,56001],{"class":56},[39,87495,52491],{"class":45},[39,87497,87498],{"class":56},"-2",[39,87500,52546],{"class":49},[39,87502,2359],{"class":45},[39,87504,87505,87507,87509,87511],{"class":41,"line":3674},[39,87506,63079],{"class":56},[39,87508,52491],{"class":45},[39,87510,63084],{"class":56},[39,87512,2359],{"class":45},[39,87514,87515],{"class":41,"line":3679},[39,87516,3245],{"class":45},[39,87518,87519],{"class":41,"line":9004},[39,87520,3458],{"emptyLinePlaceholder":1145},[39,87522,87523,87525,87528],{"class":41,"line":9028},[39,87524,87204],{"class":3021},[39,87526,87527],{"class":3021}," .body",[39,87529,16628],{"class":45},[39,87531,87532,87534,87536,87538],{"class":41,"line":9033},[39,87533,58340],{"class":56},[39,87535,52491],{"class":45},[39,87537,52646],{"class":56},[39,87539,2359],{"class":45},[39,87541,87542,87544,87546,87548,87550],{"class":41,"line":9039},[39,87543,55749],{"class":56},[39,87545,52491],{"class":45},[39,87547,146],{"class":56},[39,87549,52546],{"class":49},[39,87551,2359],{"class":45},[39,87553,87554],{"class":41,"line":9066},[39,87555,3245],{"class":45},[39,87557,87558],{"class":41,"line":9071},[39,87559,3458],{"emptyLinePlaceholder":1145},[39,87561,87562,87564,87567],{"class":41,"line":9077},[39,87563,87204],{"class":3021},[39,87565,87566],{"class":3021}," .footer",[39,87568,16628],{"class":45},[39,87570,87571,87573,87575,87577],{"class":41,"line":9089},[39,87572,56063],{"class":56},[39,87574,52491],{"class":45},[39,87576,52531],{"class":56},[39,87578,2359],{"class":45},[39,87580,87581,87583,87585,87587],{"class":41,"line":9101},[39,87582,56074],{"class":56},[39,87584,52491],{"class":45},[39,87586,52634],{"class":56},[39,87588,2359],{"class":45},[39,87590,87591,87593,87595,87597,87599],{"class":41,"line":9113},[39,87592,55749],{"class":56},[39,87594,52491],{"class":45},[39,87596,146],{"class":56},[39,87598,52546],{"class":49},[39,87600,2359],{"class":45},[39,87602,87603],{"class":41,"line":10772},[39,87604,3245],{"class":45},[39,87606,87607],{"class":41,"line":10797},[39,87608,3458],{"emptyLinePlaceholder":1145},[39,87610,87611,87613,87615,87617],{"class":41,"line":10820},[39,87612,87204],{"class":3021},[39,87614,87566],{"class":3021},[39,87616,2464],{"class":52354},[39,87618,16628],{"class":45},[39,87620,87621,87623,87625,87627,87629,87631,87633],{"class":41,"line":10844},[39,87622,55749],{"class":56},[39,87624,52491],{"class":45},[39,87626,68],{"class":56},[39,87628,52546],{"class":49},[39,87630,3141],{"class":56},[39,87632,52546],{"class":49},[39,87634,2359],{"class":45},[39,87636,87637,87639,87641,87644],{"class":41,"line":10849},[39,87638,62775],{"class":56},[39,87640,52491],{"class":45},[39,87642,87643],{"class":56},"#ccc",[39,87645,2359],{"class":45},[39,87647,87648,87650,87652,87654],{"class":41,"line":10854},[39,87649,65024],{"class":56},[39,87651,52491],{"class":45},[39,87653,55791],{"class":56},[39,87655,2359],{"class":45},[39,87657,87658,87660,87662,87664],{"class":41,"line":10859},[39,87659,58470],{"class":56},[39,87661,52491],{"class":45},[39,87663,61896],{"class":56},[39,87665,2359],{"class":45},[39,87667,87668,87670,87672,87674,87676],{"class":41,"line":10868},[39,87669,56188],{"class":56},[39,87671,52491],{"class":45},[39,87673,63],{"class":56},[39,87675,52546],{"class":49},[39,87677,2359],{"class":45},[39,87679,87680,87682,87684,87686,87688],{"class":41,"line":10873},[39,87681,62804],{"class":56},[39,87683,52491],{"class":45},[39,87685,146],{"class":56},[39,87687,52546],{"class":49},[39,87689,2359],{"class":45},[39,87691,87692,87694,87696,87698,87700],{"class":41,"line":10879},[39,87693,55976],{"class":56},[39,87695,52491],{"class":45},[39,87697,1749],{"class":56},[39,87699,52546],{"class":49},[39,87701,2359],{"class":45},[39,87703,87704],{"class":41,"line":10900},[39,87705,3245],{"class":45},[39,87707,87708],{"class":41,"line":10906},[39,87709,3458],{"emptyLinePlaceholder":1145},[39,87711,87712,87714,87716,87718,87721],{"class":41,"line":10920},[39,87713,87204],{"class":3021},[39,87715,87566],{"class":3021},[39,87717,2464],{"class":52354},[39,87719,87720],{"class":3021},".submit",[39,87722,16628],{"class":45},[39,87724,87725,87727,87729,87732],{"class":41,"line":10926},[39,87726,55938],{"class":56},[39,87728,52491],{"class":45},[39,87730,87731],{"class":56},"#369",[39,87733,2359],{"class":45},[39,87735,87736],{"class":41,"line":10953},[39,87737,3245],{"class":45},[39,87739,87740,87742,87744],{"class":41,"line":10962},[39,87741,53471],{"class":45},[39,87743,1133],{"class":52354},[39,87745,52361],{"class":45},[39,87747,87748,87750,87752],{"class":41,"line":10968},[39,87749,52839],{"class":45},[39,87751,52388],{"class":52354},[39,87753,52361],{"class":45},[39,87755,87756],{"class":41,"line":10976},[39,87757,3458],{"emptyLinePlaceholder":1145},[39,87759,87760,87762,87764],{"class":41,"line":10981},[39,87761,2108],{"class":45},[39,87763,52854],{"class":52354},[39,87765,52361],{"class":45},[39,87767,87768,87770,87772,87774,87776,87779,87782,87784],{"class":41,"line":17660},[39,87769,53198],{"class":45},[39,87771,54941],{"class":52354},[39,87773,16015],{"class":3021},[39,87775,50],{"class":45},[39,87777,87778],{"class":1319},"\"delete\"",[39,87780,87781],{"class":45},">删除\u003C\u002F",[39,87783,54941],{"class":52354},[39,87785,52361],{"class":45},[39,87787,87788,87790,87792,87794,87796,87799,87802,87804],{"class":41,"line":17666},[39,87789,53198],{"class":45},[39,87791,54941],{"class":52354},[39,87793,16015],{"class":3021},[39,87795,50],{"class":45},[39,87797,87798],{"class":1319},"\"login\"",[39,87800,87801],{"class":45},">登录\u003C\u002F",[39,87803,54941],{"class":52354},[39,87805,52361],{"class":45},[39,87807,87808,87810,87812],{"class":41,"line":17689},[39,87809,53198],{"class":45},[39,87811,52867],{"class":52354},[39,87813,52361],{"class":45},[39,87815,87816],{"class":41,"line":17695},[39,87817,87818],{"class":102},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[39,87820,87821,87823,87826,87828,87830,87832,87834,87836,87839,87841,87843],{"class":41,"line":17718},[39,87822,71138],{"class":49},[39,87824,87825],{"class":3021}," Modal",[39,87827,1221],{"class":45},[39,87829,52461],{"class":254},[39,87831,14620],{"class":49},[39,87833,70984],{"class":1319},[39,87835,13491],{"class":45},[39,87837,87838],{"class":254},"message",[39,87840,14620],{"class":49},[39,87842,70984],{"class":1319},[39,87844,13498],{"class":45},[39,87846,87847],{"class":41,"line":17732},[39,87848,87849],{"class":102},"      \u002F\u002F 创建Model 模态框盒子\n",[39,87851,87852],{"class":41,"line":17752},[39,87853,87854],{"class":102},"      \u002F\u002F 1.1 创建div标签\n",[39,87856,87857,87859,87862,87864,87866,87868,87870,87872],{"class":41,"line":17758},[39,87858,71105],{"class":56},[39,87860,87861],{"class":45},".modalBox ",[39,87863,50],{"class":49},[39,87865,55450],{"class":45},[39,87867,71205],{"class":3021},[39,87869,1221],{"class":45},[39,87871,82985],{"class":1319},[39,87873,209],{"class":45},[39,87875,87876],{"class":41,"line":17769},[39,87877,87878],{"class":102},"      \u002F\u002F 1.2 给div 添加类名为model\n",[39,87880,87881,87883,87886,87888],{"class":41,"line":17792},[39,87882,71105],{"class":56},[39,87884,87885],{"class":45},".modalBox.className ",[39,87887,50],{"class":49},[39,87889,87890],{"class":1319}," 'modal'\n",[39,87892,87893],{"class":41,"line":17814},[39,87894,87895],{"class":102},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[39,87897,87898,87900,87903,87905],{"class":41,"line":17819},[39,87899,71105],{"class":56},[39,87901,87902],{"class":45},".modalBox.innerHTML ",[39,87904,50],{"class":49},[39,87906,71222],{"class":1319},[39,87908,87909,87912,87914],{"class":41,"line":17825},[39,87910,87911],{"class":1319},"        \u003Cdiv class=\"header\">${",[39,87913,52461],{"class":45},[39,87915,87916],{"class":1319},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[39,87918,87919,87922,87924],{"class":41,"line":17839},[39,87920,87921],{"class":1319},"        \u003Cdiv class=\"body\">${",[39,87923,87838],{"class":45},[39,87925,87926],{"class":1319},"}\u003C\u002Fdiv>\n",[39,87928,87929],{"class":41,"line":17852},[39,87930,87931],{"class":1319},"      `\n",[39,87933,87934],{"class":41,"line":17857},[39,87935,87936],{"class":102},"      \u002F\u002F console.log(this.modalBox)\n",[39,87938,87939],{"class":41,"line":17871},[39,87940,3245],{"class":45},[39,87942,87943],{"class":41,"line":17876},[39,87944,87945],{"class":102},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[39,87947,87948],{"class":41,"line":17882},[39,87949,87950],{"class":102},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[39,87952,87953],{"class":41,"line":17887},[39,87954,87955],{"class":102},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[39,87957,87958,87961,87963,87965,87967,87970,87972,87974],{"class":41,"line":17901},[39,87959,87960],{"class":56},"    Modal",[39,87962,1758],{"class":45},[39,87964,86633],{"class":56},[39,87966,1758],{"class":45},[39,87968,87969],{"class":3021},"open",[39,87971,14620],{"class":49},[39,87973,59972],{"class":49},[39,87975,55506],{"class":45},[39,87977,87978],{"class":41,"line":17906},[39,87979,87980],{"class":102},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[39,87982,87983,87985,87988,87990,87992,87994,87996,87999],{"class":41,"line":17911},[39,87984,59282],{"class":49},[39,87986,87987],{"class":56}," box",[39,87989,14620],{"class":49},[39,87991,55450],{"class":45},[39,87993,55453],{"class":3021},[39,87995,1221],{"class":45},[39,87997,87998],{"class":1319},"'.modal'",[39,88000,209],{"class":45},[39,88002,88003],{"class":41,"line":17925},[39,88004,88005],{"class":102},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[39,88007,88008,88011,88013,88016,88018],{"class":41,"line":17937},[39,88009,88010],{"class":45},"      box ",[39,88012,2773],{"class":49},[39,88014,88015],{"class":45}," box.",[39,88017,58060],{"class":3021},[39,88019,3034],{"class":45},[39,88021,88022],{"class":41,"line":17942},[39,88023,88024],{"class":102},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[39,88026,88027],{"class":41,"line":17955},[39,88028,88029],{"class":102},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[39,88031,88032],{"class":41,"line":17960},[39,88033,88034],{"class":102},"      \u002F\u002F append可以增加对象\n",[39,88036,88037,88040,88043,88045,88048],{"class":41,"line":17965},[39,88038,88039],{"class":45},"      document.body.",[39,88041,88042],{"class":3021},"append",[39,88044,1221],{"class":45},[39,88046,88047],{"class":56},"this",[39,88049,88050],{"class":45},".modalBox)\n",[39,88052,88053],{"class":41,"line":17970},[39,88054,3458],{"emptyLinePlaceholder":1145},[39,88056,88057],{"class":41,"line":17983},[39,88058,88059],{"class":102},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[39,88061,88062,88064,88067,88069,88071,88074,88076,88078,88080,88082,88085,88087],{"class":41,"line":17988},[39,88063,71105],{"class":56},[39,88065,88066],{"class":45},".modalBox.",[39,88068,55453],{"class":3021},[39,88070,1221],{"class":45},[39,88072,88073],{"class":1319},"'i'",[39,88075,31881],{"class":45},[39,88077,58867],{"class":3021},[39,88079,1221],{"class":45},[39,88081,58872],{"class":1319},[39,88083,88084],{"class":45},", () ",[39,88086,85776],{"class":49},[39,88088,16628],{"class":45},[39,88090,88091],{"class":41,"line":33688},[39,88092,88093],{"class":102},"        \u002F\u002F 这个地方需要用到箭头函数\n",[39,88095,88096],{"class":41,"line":33694},[39,88097,88098],{"class":102},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[39,88100,88101],{"class":41,"line":33700},[39,88102,88103],{"class":102},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[39,88105,88106,88108,88110,88113],{"class":41,"line":33706},[39,88107,65780],{"class":56},[39,88109,1758],{"class":45},[39,88111,88112],{"class":3021},"close",[39,88114,3034],{"class":45},[39,88116,88117],{"class":41,"line":33712},[39,88118,65869],{"class":45},[39,88120,88121],{"class":41,"line":33723},[39,88122,3245],{"class":45},[39,88124,88125],{"class":41,"line":33729},[39,88126,3458],{"emptyLinePlaceholder":1145},[39,88128,88129],{"class":41,"line":33749},[39,88130,88131],{"class":102},"    \u002F\u002F 测试一下 点击 删除按钮\n",[39,88133,88134,88136,88138,88140,88143,88145,88147,88149,88151,88153,88155],{"class":41,"line":33755},[39,88135,53461],{"class":45},[39,88137,55453],{"class":3021},[39,88139,1221],{"class":45},[39,88141,88142],{"class":1319},"'#delete'",[39,88144,31881],{"class":45},[39,88146,58867],{"class":3021},[39,88148,1221],{"class":45},[39,88150,58872],{"class":1319},[39,88152,88084],{"class":45},[39,88154,85776],{"class":49},[39,88156,16628],{"class":45},[39,88158,88159],{"class":41,"line":33766},[39,88160,88161],{"class":102},"      \u002F\u002F 先调用Model构造函数\n",[39,88163,88164,88166,88169,88171,88173,88175,88177,88180,88182,88185],{"class":41,"line":33772},[39,88165,59282],{"class":49},[39,88167,88168],{"class":56}," del",[39,88170,14620],{"class":49},[39,88172,12634],{"class":49},[39,88174,87825],{"class":3021},[39,88176,1221],{"class":45},[39,88178,88179],{"class":1319},"'温馨的提示'",[39,88181,13491],{"class":45},[39,88183,88184],{"class":1319},"'您没有删除权限操作'",[39,88186,209],{"class":45},[39,88188,88189],{"class":41,"line":33778},[39,88190,88191],{"class":102},"      \u002F\u002F 实例对象调用open方法\n",[39,88193,88194,88197,88199],{"class":41,"line":33784},[39,88195,88196],{"class":45},"      del.",[39,88198,87969],{"class":3021},[39,88200,3034],{"class":45},[39,88202,88203],{"class":41,"line":33790},[39,88204,34516],{"class":45},[39,88206,88207],{"class":41,"line":33796},[39,88208,88209],{"class":102},"    \u002F\u002F 测试一下 点击 登录按钮\n",[39,88211,88212,88214,88216,88218,88221,88223,88225,88227,88229,88231,88233],{"class":41,"line":33802},[39,88213,53461],{"class":45},[39,88215,55453],{"class":3021},[39,88217,1221],{"class":45},[39,88219,88220],{"class":1319},"'#login'",[39,88222,31881],{"class":45},[39,88224,58867],{"class":3021},[39,88226,1221],{"class":45},[39,88228,58872],{"class":1319},[39,88230,88084],{"class":45},[39,88232,85776],{"class":49},[39,88234,16628],{"class":45},[39,88236,88237],{"class":41,"line":33808},[39,88238,88161],{"class":102},[39,88240,88241,88243,88246,88248,88250,88252,88254,88257,88259,88262],{"class":41,"line":33828},[39,88242,59282],{"class":49},[39,88244,88245],{"class":56}," log",[39,88247,14620],{"class":49},[39,88249,12634],{"class":49},[39,88251,87825],{"class":3021},[39,88253,1221],{"class":45},[39,88255,88256],{"class":1319},"'友情提示'",[39,88258,13491],{"class":45},[39,88260,88261],{"class":1319},"'您还没有登录呢'",[39,88263,209],{"class":45},[39,88265,88266],{"class":41,"line":33834},[39,88267,88191],{"class":102},[39,88269,88270,88273,88275],{"class":41,"line":33850},[39,88271,88272],{"class":45},"      log.",[39,88274,87969],{"class":3021},[39,88276,3034],{"class":45},[39,88278,88279],{"class":41,"line":33856},[39,88280,34516],{"class":45},[39,88282,88283],{"class":41,"line":33870},[39,88284,88285],{"class":102},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[39,88287,88288,88290,88292,88294,88296,88298,88300,88302],{"class":41,"line":33876},[39,88289,87960],{"class":56},[39,88291,1758],{"class":45},[39,88293,86633],{"class":56},[39,88295,1758],{"class":45},[39,88297,88112],{"class":3021},[39,88299,14620],{"class":49},[39,88301,59972],{"class":49},[39,88303,55506],{"class":45},[39,88305,88306,88308,88310,88312],{"class":41,"line":33891},[39,88307,71105],{"class":56},[39,88309,88066],{"class":45},[39,88311,58060],{"class":3021},[39,88313,3034],{"class":45},[39,88315,88316],{"class":41,"line":33897},[39,88317,3245],{"class":45},[39,88319,88320,88322,88324],{"class":41,"line":33906},[39,88321,53471],{"class":45},[39,88323,52867],{"class":52354},[39,88325,52361],{"class":45},[39,88327,88328,88330,88332],{"class":41,"line":33912},[39,88329,52839],{"class":45},[39,88331,52854],{"class":52354},[39,88333,52361],{"class":45},[39,88335,88336],{"class":41,"line":33921},[39,88337,3458],{"emptyLinePlaceholder":1145},[39,88339,88340,88342,88344],{"class":41,"line":33927},[39,88341,52839],{"class":45},[39,88343,51689],{"class":52354},[39,88345,52361],{"class":45},[19,88347,88348],{},[269,88349],{"alt":34,"src":88350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,88352,88354],{"id":88353},"_414-深浅拷贝","4.14 深浅拷贝",[1188,88356,88358],{"id":88357},"_4141-浅拷贝","4.14.1 浅拷贝",[19,88360,88361],{},[269,88362],{"alt":34,"src":88363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,88365,88366],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,88368,88369],{},[269,88370],{"alt":34,"src":88371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,88373,88374],{},[269,88375],{"alt":34,"src":88376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,88378,88379],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,88381,88382],{},[269,88383],{"alt":34,"src":88384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,88386,12388],{},[19,88388,88389],{},[269,88390],{"alt":34,"src":88391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[1188,88393,88395],{"id":88394},"_4142-深拷贝","4.14.2 深拷贝",[19,88397,88398],{},"深拷贝：拷贝的是对象，不是地址",[19,88400,88401],{},"常用的三种方法：",[1171,88403,88404,88407,88410],{},[1174,88405,88406],{},"通过递归实现深拷贝",[1174,88408,88409],{},"lodash\u002FcloneDeep",[1174,88411,88412],{},"通过JSON.stringify()实现",[23054,88414,88416],{"id":88415},"_41421-递归函数","4.14.2.1 递归函数",[19,88418,88419],{},[269,88420],{"alt":34,"src":88421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[1171,88423,88424],{},[1174,88425,88426],{},"死递归占溢出：",[29,88428,88430],{"className":54121,"code":88429,"language":54123,"meta":34,"style":34},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[36,88431,88432,88440,88448,88452,88457,88461,88466,88474],{"__ignoreMap":34},[39,88433,88434,88436,88438],{"class":41,"line":42},[39,88435,2108],{"class":45},[39,88437,52854],{"class":52354},[39,88439,52361],{"class":45},[39,88441,88442,88444,88446],{"class":41,"line":74},[39,88443,53198],{"class":45},[39,88445,52867],{"class":52354},[39,88447,52361],{"class":45},[39,88449,88450],{"class":41,"line":99},[39,88451,78197],{"class":45},[39,88453,88454],{"class":41,"line":106},[39,88455,88456],{"class":45},"      fn()\n",[39,88458,88459],{"class":41,"line":112},[39,88460,3245],{"class":45},[39,88462,88463],{"class":41,"line":118},[39,88464,88465],{"class":45},"    fn()\n",[39,88467,88468,88470,88472],{"class":41,"line":413},[39,88469,53471],{"class":45},[39,88471,52867],{"class":52354},[39,88473,52361],{"class":45},[39,88475,88476,88478,88480],{"class":41,"line":419},[39,88477,52839],{"class":45},[39,88479,52854],{"class":52354},[39,88481,52361],{"class":45},[1171,88483,88484],{"start":74},[1174,88485,88486],{},"递归函数要加判断条件：",[19,88488,88489],{},[269,88490],{"alt":34,"src":88491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[1171,88493,88494],{"start":99},[1174,88495,88496],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[29,88498,88500],{"className":51687,"code":88499,"language":51689,"meta":34,"style":34},"\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",[36,88501,88502,88512,88526,88530,88538,88552,88572,88584,88592,88596,88604,88616,88624,88632,88657,88669,88673,88680,88688,88696,88700],{"__ignoreMap":34},[39,88503,88504,88506,88508,88510],{"class":41,"line":42},[39,88505,52351],{"class":45},[39,88507,52355],{"class":52354},[39,88509,52358],{"class":3021},[39,88511,52361],{"class":45},[39,88513,88514,88516,88518,88520,88522,88524],{"class":41,"line":74},[39,88515,2108],{"class":45},[39,88517,51689],{"class":52354},[39,88519,52370],{"class":3021},[39,88521,50],{"class":45},[39,88523,52375],{"class":1319},[39,88525,52361],{"class":45},[39,88527,88528],{"class":41,"line":99},[39,88529,3458],{"emptyLinePlaceholder":1145},[39,88531,88532,88534,88536],{"class":41,"line":106},[39,88533,2108],{"class":45},[39,88535,52388],{"class":52354},[39,88537,52361],{"class":45},[39,88539,88540,88542,88544,88546,88548,88550],{"class":41,"line":112},[39,88541,53198],{"class":45},[39,88543,52398],{"class":52354},[39,88545,52401],{"class":3021},[39,88547,50],{"class":45},[39,88549,52406],{"class":1319},[39,88551,52361],{"class":45},[39,88553,88554,88556,88558,88560,88562,88564,88566,88568,88570],{"class":41,"line":118},[39,88555,53198],{"class":45},[39,88557,52398],{"class":52354},[39,88559,15976],{"class":3021},[39,88561,50],{"class":45},[39,88563,52445],{"class":1319},[39,88565,52425],{"class":3021},[39,88567,50],{"class":45},[39,88569,52452],{"class":1319},[39,88571,52361],{"class":45},[39,88573,88574,88576,88578,88580,88582],{"class":41,"line":413},[39,88575,53198],{"class":45},[39,88577,52461],{"class":52354},[39,88579,52464],{"class":45},[39,88581,52461],{"class":52354},[39,88583,52361],{"class":45},[39,88585,88586,88588,88590],{"class":41,"line":419},[39,88587,52839],{"class":45},[39,88589,52388],{"class":52354},[39,88591,52361],{"class":45},[39,88593,88594],{"class":41,"line":425},[39,88595,3458],{"emptyLinePlaceholder":1145},[39,88597,88598,88600,88602],{"class":41,"line":443},[39,88599,2108],{"class":45},[39,88601,52854],{"class":52354},[39,88603,52361],{"class":45},[39,88605,88606,88608,88610,88612,88614],{"class":41,"line":449},[39,88607,53198],{"class":45},[39,88609,52665],{"class":52354},[39,88611,56368],{"class":45},[39,88613,52665],{"class":52354},[39,88615,52361],{"class":45},[39,88617,88618,88620,88622],{"class":41,"line":455},[39,88619,53198],{"class":45},[39,88621,52867],{"class":52354},[39,88623,52361],{"class":45},[39,88625,88626,88628,88630],{"class":41,"line":461},[39,88627,71138],{"class":49},[39,88629,74827],{"class":3021},[39,88631,11909],{"class":45},[39,88633,88634,88636,88638,88640,88642,88644,88646,88648,88650,88652,88655],{"class":41,"line":475},[39,88635,56825],{"class":45},[39,88637,55453],{"class":3021},[39,88639,1221],{"class":45},[39,88641,82985],{"class":1319},[39,88643,75303],{"class":45},[39,88645,50],{"class":49},[39,88647,12634],{"class":49},[39,88649,74843],{"class":3021},[39,88651,18317],{"class":45},[39,88653,88654],{"class":3021},"toLocaleString",[39,88656,3034],{"class":45},[39,88658,88659,88662,88665,88667],{"class":41,"line":665},[39,88660,88661],{"class":3021},"      setTimeout",[39,88663,88664],{"class":45},"(getTime, ",[39,88666,7466],{"class":56},[39,88668,209],{"class":45},[39,88670,88671],{"class":41,"line":671},[39,88672,3245],{"class":45},[39,88674,88675,88678],{"class":41,"line":684},[39,88676,88677],{"class":3021},"    getTime",[39,88679,3034],{"class":45},[39,88681,88682,88684,88686],{"class":41,"line":2732},[39,88683,53471],{"class":45},[39,88685,52867],{"class":52354},[39,88687,52361],{"class":45},[39,88689,88690,88692,88694],{"class":41,"line":2737},[39,88691,52839],{"class":45},[39,88693,52854],{"class":52354},[39,88695,52361],{"class":45},[39,88697,88698],{"class":41,"line":2751},[39,88699,3458],{"emptyLinePlaceholder":1145},[39,88701,88702,88704,88706],{"class":41,"line":2756},[39,88703,52839],{"class":45},[39,88705,51689],{"class":52354},[39,88707,52361],{"class":45},[19,88709,88710],{},[269,88711],{"alt":34,"src":88712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[1171,88714,88715],{"start":106},[1174,88716,88406],{},[19,88718,88719],{},[269,88720],{"alt":34,"src":88721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,88723,88724],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,88726,40244],{},[19,88728,88729],{},"这个是简易版的递归函数深拷贝",[19,88731,88732],{},"一定要注意先数组再对象，因为万物皆可对象",[29,88734,88736],{"className":51687,"code":88735,"language":51689,"meta":34,"style":34},"\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",[36,88737,88738,88748,88762,88766,88774,88788,88808,88820,88828,88832,88840,88848,88858,88867,88875,88891,88895,88903,88907,88911,88923,88928,88947,88963,88968,88973,88978,88993,88998,89003,89012,89020,89037,89045,89051,89059,89064,89069,89078,89082,89086,89090,89101,89110,89120,89134,89144,89152,89160,89168,89172],{"__ignoreMap":34},[39,88739,88740,88742,88744,88746],{"class":41,"line":42},[39,88741,52351],{"class":45},[39,88743,52355],{"class":52354},[39,88745,52358],{"class":3021},[39,88747,52361],{"class":45},[39,88749,88750,88752,88754,88756,88758,88760],{"class":41,"line":74},[39,88751,2108],{"class":45},[39,88753,51689],{"class":52354},[39,88755,52370],{"class":3021},[39,88757,50],{"class":45},[39,88759,52375],{"class":1319},[39,88761,52361],{"class":45},[39,88763,88764],{"class":41,"line":99},[39,88765,3458],{"emptyLinePlaceholder":1145},[39,88767,88768,88770,88772],{"class":41,"line":106},[39,88769,2108],{"class":45},[39,88771,52388],{"class":52354},[39,88773,52361],{"class":45},[39,88775,88776,88778,88780,88782,88784,88786],{"class":41,"line":112},[39,88777,53198],{"class":45},[39,88779,52398],{"class":52354},[39,88781,52401],{"class":3021},[39,88783,50],{"class":45},[39,88785,52406],{"class":1319},[39,88787,52361],{"class":45},[39,88789,88790,88792,88794,88796,88798,88800,88802,88804,88806],{"class":41,"line":118},[39,88791,53198],{"class":45},[39,88793,52398],{"class":52354},[39,88795,15976],{"class":3021},[39,88797,50],{"class":45},[39,88799,52445],{"class":1319},[39,88801,52425],{"class":3021},[39,88803,50],{"class":45},[39,88805,52452],{"class":1319},[39,88807,52361],{"class":45},[39,88809,88810,88812,88814,88816,88818],{"class":41,"line":413},[39,88811,53198],{"class":45},[39,88813,52461],{"class":52354},[39,88815,52464],{"class":45},[39,88817,52461],{"class":52354},[39,88819,52361],{"class":45},[39,88821,88822,88824,88826],{"class":41,"line":419},[39,88823,52839],{"class":45},[39,88825,52388],{"class":52354},[39,88827,52361],{"class":45},[39,88829,88830],{"class":41,"line":425},[39,88831,3458],{"emptyLinePlaceholder":1145},[39,88833,88834,88836,88838],{"class":41,"line":443},[39,88835,2108],{"class":45},[39,88837,52854],{"class":52354},[39,88839,52361],{"class":45},[39,88841,88842,88844,88846],{"class":41,"line":449},[39,88843,53198],{"class":45},[39,88845,52867],{"class":52354},[39,88847,52361],{"class":45},[39,88849,88850,88852,88854,88856],{"class":41,"line":455},[39,88851,12277],{"class":49},[39,88853,71025],{"class":56},[39,88855,14620],{"class":49},[39,88857,16628],{"class":45},[39,88859,88860,88862,88865],{"class":41,"line":461},[39,88861,72670],{"class":45},[39,88863,88864],{"class":1319},"'pink'",[39,88866,32521],{"class":45},[39,88868,88869,88871,88873],{"class":41,"line":475},[39,88870,72680],{"class":45},[39,88872,1849],{"class":56},[39,88874,32521],{"class":45},[39,88876,88877,88880,88883,88885,88888],{"class":41,"line":665},[39,88878,88879],{"class":45},"      hobby: [",[39,88881,88882],{"class":1319},"'乒乓球'",[39,88884,13491],{"class":45},[39,88886,88887],{"class":1319},"'足球'",[39,88889,88890],{"class":45},"],\n",[39,88892,88893],{"class":41,"line":671},[39,88894,78926],{"class":45},[39,88896,88897,88900],{"class":41,"line":684},[39,88898,88899],{"class":45},"        baby: ",[39,88901,88902],{"class":1319},"'小pink'\n",[39,88904,88905],{"class":41,"line":2732},[39,88906,53452],{"class":45},[39,88908,88909],{"class":41,"line":2737},[39,88910,3245],{"class":45},[39,88912,88913,88915,88918,88920],{"class":41,"line":2751},[39,88914,12277],{"class":49},[39,88916,88917],{"class":56}," o",[39,88919,14620],{"class":49},[39,88921,88922],{"class":45}," {}\n",[39,88924,88925],{"class":41,"line":2756},[39,88926,88927],{"class":102},"    \u002F\u002F 拷贝函数\n",[39,88929,88930,88932,88935,88937,88940,88942,88945],{"class":41,"line":2785},[39,88931,71138],{"class":49},[39,88933,88934],{"class":3021}," deepCopy",[39,88936,1221],{"class":45},[39,88938,88939],{"class":254},"newObj",[39,88941,13491],{"class":45},[39,88943,88944],{"class":254},"oldObj",[39,88946,13498],{"class":45},[39,88948,88949,88951,88953,88955,88958,88960],{"class":41,"line":2790},[39,88950,53338],{"class":49},[39,88952,2716],{"class":45},[39,88954,52901],{"class":49},[39,88956,88957],{"class":45}," k ",[39,88959,27100],{"class":49},[39,88961,88962],{"class":45}," oldObj) {\n",[39,88964,88965],{"class":41,"line":2807},[39,88966,88967],{"class":102},"        \u002F\u002F 处理数组的问题\n",[39,88969,88970],{"class":41,"line":2812},[39,88971,88972],{"class":102},"        \u002F\u002F 判断是否属于数组\n",[39,88974,88975],{"class":41,"line":2817},[39,88976,88977],{"class":102},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[39,88979,88980,88982,88985,88988,88991],{"class":41,"line":2822},[39,88981,3555],{"class":49},[39,88983,88984],{"class":45}," (oldObj[k] ",[39,88986,88987],{"class":49},"instanceof",[39,88989,88990],{"class":3021}," Array",[39,88992,13498],{"class":45},[39,88994,88995],{"class":41,"line":2836},[39,88996,88997],{"class":102},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[39,88999,89000],{"class":41,"line":2841},[39,89001,89002],{"class":102},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[39,89004,89005,89008,89010],{"class":41,"line":3635},[39,89006,89007],{"class":45},"          newObj[k] ",[39,89009,50],{"class":49},[39,89011,52892],{"class":45},[39,89013,89014,89017],{"class":41,"line":3649},[39,89015,89016],{"class":3021},"          deepCopy",[39,89018,89019],{"class":45},"(newObj[k], oldObj[k])\n",[39,89021,89022,89024,89026,89028,89030,89032,89035],{"class":41,"line":3657},[39,89023,81134],{"class":45},[39,89025,2759],{"class":49},[39,89027,2762],{"class":49},[39,89029,88984],{"class":45},[39,89031,88987],{"class":49},[39,89033,89034],{"class":3021}," Object",[39,89036,13498],{"class":45},[39,89038,89039,89041,89043],{"class":41,"line":3662},[39,89040,89007],{"class":45},[39,89042,50],{"class":49},[39,89044,88922],{"class":45},[39,89046,89047,89049],{"class":41,"line":3668},[39,89048,89016],{"class":3021},[39,89050,89019],{"class":45},[39,89052,89053,89055,89057],{"class":41,"line":3674},[39,89054,81134],{"class":45},[39,89056,2759],{"class":49},[39,89058,16628],{"class":45},[39,89060,89061],{"class":41,"line":3679},[39,89062,89063],{"class":102},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[39,89065,89066],{"class":41,"line":9004},[39,89067,89068],{"class":102},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[39,89070,89071,89073,89075],{"class":41,"line":9028},[39,89072,89007],{"class":45},[39,89074,50],{"class":49},[39,89076,89077],{"class":45}," oldObj[k]\n",[39,89079,89080],{"class":41,"line":9033},[39,89081,3587],{"class":45},[39,89083,89084],{"class":41,"line":9039},[39,89085,53452],{"class":45},[39,89087,89088],{"class":41,"line":9066},[39,89089,3245],{"class":45},[39,89091,89092,89095,89098],{"class":41,"line":9071},[39,89093,89094],{"class":3021},"    deepCopy",[39,89096,89097],{"class":45},"(o, obj) ",[39,89099,89100],{"class":102},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[39,89102,89103,89105,89107],{"class":41,"line":9077},[39,89104,74807],{"class":45},[39,89106,59301],{"class":3021},[39,89108,89109],{"class":45},"(o)\n",[39,89111,89112,89115,89117],{"class":41,"line":9089},[39,89113,89114],{"class":45},"    o.age ",[39,89116,50],{"class":49},[39,89118,89119],{"class":56}," 20\n",[39,89121,89122,89125,89127,89129,89131],{"class":41,"line":9101},[39,89123,89124],{"class":45},"    o.hobby[",[39,89126,260],{"class":56},[39,89128,5501],{"class":45},[39,89130,50],{"class":49},[39,89132,89133],{"class":1319}," '篮球'\n",[39,89135,89136,89139,89141],{"class":41,"line":9113},[39,89137,89138],{"class":45},"    o.family ",[39,89140,50],{"class":49},[39,89142,89143],{"class":1319}," '老pink'\n",[39,89145,89146,89148,89150],{"class":41,"line":10772},[39,89147,74807],{"class":45},[39,89149,59301],{"class":3021},[39,89151,71090],{"class":45},[39,89153,89154,89156,89158],{"class":41,"line":10797},[39,89155,53471],{"class":45},[39,89157,52867],{"class":52354},[39,89159,52361],{"class":45},[39,89161,89162,89164,89166],{"class":41,"line":10820},[39,89163,52839],{"class":45},[39,89165,52854],{"class":52354},[39,89167,52361],{"class":45},[39,89169,89170],{"class":41,"line":10844},[39,89171,3458],{"emptyLinePlaceholder":1145},[39,89173,89174,89176,89178],{"class":41,"line":10849},[39,89175,52839],{"class":45},[39,89177,51689],{"class":52354},[39,89179,52361],{"class":45},[19,89181,89182],{},[269,89183],{"alt":34,"src":89184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23054,89186,89188,89189],{"id":89187},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[304,89190,89191],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,89193,89194],{},[46,89195,89196],{"href":89196,"rel":89197},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24921],[19,89199,89200],{},"lodash里边的方法都要加上一个下划线_",[19,89202,89203],{},"_.cloneDeep()",[29,89205,89207],{"className":51687,"code":89206,"language":51689,"meta":34,"style":34},"\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",[36,89208,89209,89219,89233,89237,89245,89259,89279,89291,89299,89303,89311,89316,89335,89343,89353,89361,89369,89381,89385,89391,89395,89399,89415,89423,89432,89440,89448,89456,89460],{"__ignoreMap":34},[39,89210,89211,89213,89215,89217],{"class":41,"line":42},[39,89212,52351],{"class":45},[39,89214,52355],{"class":52354},[39,89216,52358],{"class":3021},[39,89218,52361],{"class":45},[39,89220,89221,89223,89225,89227,89229,89231],{"class":41,"line":74},[39,89222,2108],{"class":45},[39,89224,51689],{"class":52354},[39,89226,52370],{"class":3021},[39,89228,50],{"class":45},[39,89230,52375],{"class":1319},[39,89232,52361],{"class":45},[39,89234,89235],{"class":41,"line":99},[39,89236,3458],{"emptyLinePlaceholder":1145},[39,89238,89239,89241,89243],{"class":41,"line":106},[39,89240,2108],{"class":45},[39,89242,52388],{"class":52354},[39,89244,52361],{"class":45},[39,89246,89247,89249,89251,89253,89255,89257],{"class":41,"line":112},[39,89248,53198],{"class":45},[39,89250,52398],{"class":52354},[39,89252,52401],{"class":3021},[39,89254,50],{"class":45},[39,89256,52406],{"class":1319},[39,89258,52361],{"class":45},[39,89260,89261,89263,89265,89267,89269,89271,89273,89275,89277],{"class":41,"line":118},[39,89262,53198],{"class":45},[39,89264,52398],{"class":52354},[39,89266,15976],{"class":3021},[39,89268,50],{"class":45},[39,89270,52445],{"class":1319},[39,89272,52425],{"class":3021},[39,89274,50],{"class":45},[39,89276,52452],{"class":1319},[39,89278,52361],{"class":45},[39,89280,89281,89283,89285,89287,89289],{"class":41,"line":413},[39,89282,53198],{"class":45},[39,89284,52461],{"class":52354},[39,89286,52464],{"class":45},[39,89288,52461],{"class":52354},[39,89290,52361],{"class":45},[39,89292,89293,89295,89297],{"class":41,"line":419},[39,89294,52839],{"class":45},[39,89296,52388],{"class":52354},[39,89298,52361],{"class":45},[39,89300,89301],{"class":41,"line":425},[39,89302,3458],{"emptyLinePlaceholder":1145},[39,89304,89305,89307,89309],{"class":41,"line":443},[39,89306,2108],{"class":45},[39,89308,52854],{"class":52354},[39,89310,52361],{"class":45},[39,89312,89313],{"class":41,"line":449},[39,89314,89315],{"class":102},"  \u003C!-- 先引用这个库 -->\n",[39,89317,89318,89320,89322,89324,89326,89329,89331,89333],{"class":41,"line":455},[39,89319,53198],{"class":45},[39,89321,52867],{"class":52354},[39,89323,56293],{"class":3021},[39,89325,50],{"class":45},[39,89327,89328],{"class":1319},"\"lodash.min.js\"",[39,89330,56368],{"class":45},[39,89332,52867],{"class":52354},[39,89334,52361],{"class":45},[39,89336,89337,89339,89341],{"class":41,"line":461},[39,89338,53198],{"class":45},[39,89340,52867],{"class":52354},[39,89342,52361],{"class":45},[39,89344,89345,89347,89349,89351],{"class":41,"line":475},[39,89346,12277],{"class":49},[39,89348,71025],{"class":56},[39,89350,14620],{"class":49},[39,89352,16628],{"class":45},[39,89354,89355,89357,89359],{"class":41,"line":665},[39,89356,72670],{"class":45},[39,89358,88864],{"class":1319},[39,89360,32521],{"class":45},[39,89362,89363,89365,89367],{"class":41,"line":671},[39,89364,72680],{"class":45},[39,89366,1849],{"class":56},[39,89368,32521],{"class":45},[39,89370,89371,89373,89375,89377,89379],{"class":41,"line":684},[39,89372,88879],{"class":45},[39,89374,88882],{"class":1319},[39,89376,13491],{"class":45},[39,89378,88887],{"class":1319},[39,89380,88890],{"class":45},[39,89382,89383],{"class":41,"line":2732},[39,89384,78926],{"class":45},[39,89386,89387,89389],{"class":41,"line":2737},[39,89388,88899],{"class":45},[39,89390,88902],{"class":1319},[39,89392,89393],{"class":41,"line":2751},[39,89394,53452],{"class":45},[39,89396,89397],{"class":41,"line":2756},[39,89398,3245],{"class":45},[39,89400,89401,89403,89405,89407,89410,89413],{"class":41,"line":2785},[39,89402,12277],{"class":49},[39,89404,88917],{"class":56},[39,89406,14620],{"class":49},[39,89408,89409],{"class":45}," _.",[39,89411,89412],{"class":3021},"cloneDeep",[39,89414,71090],{"class":45},[39,89416,89417,89419,89421],{"class":41,"line":2790},[39,89418,74807],{"class":45},[39,89420,59301],{"class":3021},[39,89422,89109],{"class":45},[39,89424,89425,89428,89430],{"class":41,"line":2807},[39,89426,89427],{"class":45},"    o.family.baby ",[39,89429,50],{"class":49},[39,89431,89143],{"class":1319},[39,89433,89434,89436,89438],{"class":41,"line":2812},[39,89435,74807],{"class":45},[39,89437,59301],{"class":3021},[39,89439,71090],{"class":45},[39,89441,89442,89444,89446],{"class":41,"line":2817},[39,89443,53471],{"class":45},[39,89445,52867],{"class":52354},[39,89447,52361],{"class":45},[39,89449,89450,89452,89454],{"class":41,"line":2822},[39,89451,52839],{"class":45},[39,89453,52854],{"class":52354},[39,89455,52361],{"class":45},[39,89457,89458],{"class":41,"line":2836},[39,89459,3458],{"emptyLinePlaceholder":1145},[39,89461,89462,89464,89466],{"class":41,"line":2841},[39,89463,52839],{"class":45},[39,89465,51689],{"class":52354},[39,89467,52361],{"class":45},[19,89469,89470],{},[269,89471],{"alt":34,"src":89472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23054,89474,89476],{"id":89475},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[29,89478,89480],{"className":51687,"code":89479,"language":51689,"meta":34,"style":34},"\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",[36,89481,89482,89492,89506,89510,89518,89532,89552,89564,89572,89576,89584,89592,89602,89610,89618,89630,89634,89640,89644,89648,89653,89658,89663,89689,89697,89706,89714,89722,89730,89734],{"__ignoreMap":34},[39,89483,89484,89486,89488,89490],{"class":41,"line":42},[39,89485,52351],{"class":45},[39,89487,52355],{"class":52354},[39,89489,52358],{"class":3021},[39,89491,52361],{"class":45},[39,89493,89494,89496,89498,89500,89502,89504],{"class":41,"line":74},[39,89495,2108],{"class":45},[39,89497,51689],{"class":52354},[39,89499,52370],{"class":3021},[39,89501,50],{"class":45},[39,89503,52375],{"class":1319},[39,89505,52361],{"class":45},[39,89507,89508],{"class":41,"line":99},[39,89509,3458],{"emptyLinePlaceholder":1145},[39,89511,89512,89514,89516],{"class":41,"line":106},[39,89513,2108],{"class":45},[39,89515,52388],{"class":52354},[39,89517,52361],{"class":45},[39,89519,89520,89522,89524,89526,89528,89530],{"class":41,"line":112},[39,89521,53198],{"class":45},[39,89523,52398],{"class":52354},[39,89525,52401],{"class":3021},[39,89527,50],{"class":45},[39,89529,52406],{"class":1319},[39,89531,52361],{"class":45},[39,89533,89534,89536,89538,89540,89542,89544,89546,89548,89550],{"class":41,"line":118},[39,89535,53198],{"class":45},[39,89537,52398],{"class":52354},[39,89539,15976],{"class":3021},[39,89541,50],{"class":45},[39,89543,52445],{"class":1319},[39,89545,52425],{"class":3021},[39,89547,50],{"class":45},[39,89549,52452],{"class":1319},[39,89551,52361],{"class":45},[39,89553,89554,89556,89558,89560,89562],{"class":41,"line":413},[39,89555,53198],{"class":45},[39,89557,52461],{"class":52354},[39,89559,52464],{"class":45},[39,89561,52461],{"class":52354},[39,89563,52361],{"class":45},[39,89565,89566,89568,89570],{"class":41,"line":419},[39,89567,52839],{"class":45},[39,89569,52388],{"class":52354},[39,89571,52361],{"class":45},[39,89573,89574],{"class":41,"line":425},[39,89575,3458],{"emptyLinePlaceholder":1145},[39,89577,89578,89580,89582],{"class":41,"line":443},[39,89579,2108],{"class":45},[39,89581,52854],{"class":52354},[39,89583,52361],{"class":45},[39,89585,89586,89588,89590],{"class":41,"line":449},[39,89587,53198],{"class":45},[39,89589,52867],{"class":52354},[39,89591,52361],{"class":45},[39,89593,89594,89596,89598,89600],{"class":41,"line":455},[39,89595,12277],{"class":49},[39,89597,71025],{"class":56},[39,89599,14620],{"class":49},[39,89601,16628],{"class":45},[39,89603,89604,89606,89608],{"class":41,"line":461},[39,89605,72670],{"class":45},[39,89607,88864],{"class":1319},[39,89609,32521],{"class":45},[39,89611,89612,89614,89616],{"class":41,"line":475},[39,89613,72680],{"class":45},[39,89615,1849],{"class":56},[39,89617,32521],{"class":45},[39,89619,89620,89622,89624,89626,89628],{"class":41,"line":665},[39,89621,88879],{"class":45},[39,89623,88882],{"class":1319},[39,89625,13491],{"class":45},[39,89627,88887],{"class":1319},[39,89629,88890],{"class":45},[39,89631,89632],{"class":41,"line":671},[39,89633,78926],{"class":45},[39,89635,89636,89638],{"class":41,"line":684},[39,89637,88899],{"class":45},[39,89639,88902],{"class":1319},[39,89641,89642],{"class":41,"line":2732},[39,89643,53452],{"class":45},[39,89645,89646],{"class":41,"line":2737},[39,89647,3245],{"class":45},[39,89649,89650],{"class":41,"line":2751},[39,89651,89652],{"class":102},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[39,89654,89655],{"class":41,"line":2756},[39,89656,89657],{"class":102},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[39,89659,89660],{"class":41,"line":2785},[39,89661,89662],{"class":102},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[39,89664,89665,89667,89669,89671,89674,89676,89679,89681,89683,89685,89687],{"class":41,"line":2790},[39,89666,12277],{"class":49},[39,89668,88917],{"class":56},[39,89670,14620],{"class":49},[39,89672,89673],{"class":56}," JSON",[39,89675,1758],{"class":45},[39,89677,89678],{"class":3021},"parse",[39,89680,1221],{"class":45},[39,89682,72718],{"class":56},[39,89684,1758],{"class":45},[39,89686,72723],{"class":3021},[39,89688,72726],{"class":45},[39,89690,89691,89693,89695],{"class":41,"line":2807},[39,89692,74807],{"class":45},[39,89694,59301],{"class":3021},[39,89696,89109],{"class":45},[39,89698,89699,89701,89703],{"class":41,"line":2812},[39,89700,89427],{"class":45},[39,89702,50],{"class":49},[39,89704,89705],{"class":1319}," '123'\n",[39,89707,89708,89710,89712],{"class":41,"line":2817},[39,89709,74807],{"class":45},[39,89711,59301],{"class":3021},[39,89713,71090],{"class":45},[39,89715,89716,89718,89720],{"class":41,"line":2822},[39,89717,53471],{"class":45},[39,89719,52867],{"class":52354},[39,89721,52361],{"class":45},[39,89723,89724,89726,89728],{"class":41,"line":2836},[39,89725,52839],{"class":45},[39,89727,52854],{"class":52354},[39,89729,52361],{"class":45},[39,89731,89732],{"class":41,"line":2841},[39,89733,3458],{"emptyLinePlaceholder":1145},[39,89735,89736,89738,89740],{"class":41,"line":3635},[39,89737,52839],{"class":45},[39,89739,51689],{"class":52354},[39,89741,52361],{"class":45},[19,89743,89744],{},[269,89745],{"alt":34,"src":89746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,89748,89750],{"id":89749},"_415-异常处理","4.15 异常处理",[1171,89752,89753],{},[1174,89754,89755],{},"throw抛异常",[19,89757,89758],{},[269,89759],{"alt":34,"src":89760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[1171,89762,89763],{"start":74},[1174,89764,89765],{},"try\u002Fcatch 捕获错误信息",[19,89767,89768],{},[269,89769],{"alt":34,"src":89770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[29,89772,89774],{"className":51687,"code":89773,"language":51689,"meta":34,"style":34},"\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",[36,89775,89776,89786,89800,89804,89812,89826,89846,89858,89866,89870,89878,89890,89898,89907,89914,89919,89938,89947,89958,89963,89973,89978,89983,89988,90005,90009,90014,90021,90033,90037,90049,90053,90057,90062,90067,90074,90082,90090,90094],{"__ignoreMap":34},[39,89777,89778,89780,89782,89784],{"class":41,"line":42},[39,89779,52351],{"class":45},[39,89781,52355],{"class":52354},[39,89783,52358],{"class":3021},[39,89785,52361],{"class":45},[39,89787,89788,89790,89792,89794,89796,89798],{"class":41,"line":74},[39,89789,2108],{"class":45},[39,89791,51689],{"class":52354},[39,89793,52370],{"class":3021},[39,89795,50],{"class":45},[39,89797,52375],{"class":1319},[39,89799,52361],{"class":45},[39,89801,89802],{"class":41,"line":99},[39,89803,3458],{"emptyLinePlaceholder":1145},[39,89805,89806,89808,89810],{"class":41,"line":106},[39,89807,2108],{"class":45},[39,89809,52388],{"class":52354},[39,89811,52361],{"class":45},[39,89813,89814,89816,89818,89820,89822,89824],{"class":41,"line":112},[39,89815,53198],{"class":45},[39,89817,52398],{"class":52354},[39,89819,52401],{"class":3021},[39,89821,50],{"class":45},[39,89823,52406],{"class":1319},[39,89825,52361],{"class":45},[39,89827,89828,89830,89832,89834,89836,89838,89840,89842,89844],{"class":41,"line":118},[39,89829,53198],{"class":45},[39,89831,52398],{"class":52354},[39,89833,15976],{"class":3021},[39,89835,50],{"class":45},[39,89837,52445],{"class":1319},[39,89839,52425],{"class":3021},[39,89841,50],{"class":45},[39,89843,52452],{"class":1319},[39,89845,52361],{"class":45},[39,89847,89848,89850,89852,89854,89856],{"class":41,"line":413},[39,89849,53198],{"class":45},[39,89851,52461],{"class":52354},[39,89853,52464],{"class":45},[39,89855,52461],{"class":52354},[39,89857,52361],{"class":45},[39,89859,89860,89862,89864],{"class":41,"line":419},[39,89861,52839],{"class":45},[39,89863,52388],{"class":52354},[39,89865,52361],{"class":45},[39,89867,89868],{"class":41,"line":425},[39,89869,3458],{"emptyLinePlaceholder":1145},[39,89871,89872,89874,89876],{"class":41,"line":443},[39,89873,2108],{"class":45},[39,89875,52854],{"class":52354},[39,89877,52361],{"class":45},[39,89879,89880,89882,89884,89886,89888],{"class":41,"line":449},[39,89881,53198],{"class":45},[39,89883,19],{"class":52354},[39,89885,54548],{"class":45},[39,89887,19],{"class":52354},[39,89889,52361],{"class":45},[39,89891,89892,89894,89896],{"class":41,"line":455},[39,89893,53198],{"class":45},[39,89895,52867],{"class":52354},[39,89897,52361],{"class":45},[39,89899,89900,89902,89905],{"class":41,"line":461},[39,89901,71138],{"class":49},[39,89903,89904],{"class":3021}," fn",[39,89906,11909],{"class":45},[39,89908,89909,89912],{"class":41,"line":475},[39,89910,89911],{"class":49},"      try",[39,89913,16628],{"class":45},[39,89915,89916],{"class":41,"line":665},[39,89917,89918],{"class":102},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[39,89920,89921,89923,89925,89927,89929,89931,89933,89936],{"class":41,"line":671},[39,89922,62324],{"class":49},[39,89924,7881],{"class":56},[39,89926,14620],{"class":49},[39,89928,55450],{"class":45},[39,89930,55453],{"class":3021},[39,89932,1221],{"class":45},[39,89934,89935],{"class":1319},"'.p'",[39,89937,209],{"class":45},[39,89939,89940,89943,89945],{"class":41,"line":684},[39,89941,89942],{"class":45},"        p.style.color ",[39,89944,50],{"class":49},[39,89946,68105],{"class":1319},[39,89948,89949,89952,89955],{"class":41,"line":2732},[39,89950,89951],{"class":45},"      } ",[39,89953,89954],{"class":49},"catch",[39,89956,89957],{"class":45}," (err) {\n",[39,89959,89960],{"class":41,"line":2737},[39,89961,89962],{"class":102},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[39,89964,89965,89968,89970],{"class":41,"line":2751},[39,89966,89967],{"class":45},"        console.",[39,89969,59301],{"class":3021},[39,89971,89972],{"class":45},"(err.message)\n",[39,89974,89975],{"class":41,"line":2756},[39,89976,89977],{"class":102},"        \u002F\u002F 想要中断程序，需要加return\n",[39,89979,89980],{"class":41,"line":2785},[39,89981,89982],{"class":102},"        \u002F\u002F return\n",[39,89984,89985],{"class":41,"line":2790},[39,89986,89987],{"class":102},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[39,89989,89990,89993,89995,89998,90000,90003],{"class":41,"line":2807},[39,89991,89992],{"class":49},"        throw",[39,89994,12634],{"class":49},[39,89996,89997],{"class":3021}," Error",[39,89999,1221],{"class":45},[39,90001,90002],{"class":1319},"'你看看，选择器错误了吧'",[39,90004,209],{"class":45},[39,90006,90007],{"class":41,"line":2812},[39,90008,53452],{"class":45},[39,90010,90011],{"class":41,"line":2817},[39,90012,90013],{"class":102},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[39,90015,90016,90019],{"class":41,"line":2822},[39,90017,90018],{"class":49},"      finally",[39,90020,16628],{"class":45},[39,90022,90023,90026,90028,90031],{"class":41,"line":2836},[39,90024,90025],{"class":3021},"        alert",[39,90027,1221],{"class":45},[39,90029,90030],{"class":1319},"'弹出对话框'",[39,90032,209],{"class":45},[39,90034,90035],{"class":41,"line":2841},[39,90036,53452],{"class":45},[39,90038,90039,90041,90043,90045,90047],{"class":41,"line":3635},[39,90040,59298],{"class":45},[39,90042,59301],{"class":3021},[39,90044,1221],{"class":45},[39,90046,151],{"class":56},[39,90048,209],{"class":45},[39,90050,90051],{"class":41,"line":3649},[39,90052,3458],{"emptyLinePlaceholder":1145},[39,90054,90055],{"class":41,"line":3657},[39,90056,3245],{"class":45},[39,90058,90059],{"class":41,"line":3662},[39,90060,90061],{"class":102},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[39,90063,90064],{"class":41,"line":3668},[39,90065,90066],{"class":102},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[39,90068,90069,90072],{"class":41,"line":3674},[39,90070,90071],{"class":3021},"    fn",[39,90073,3034],{"class":45},[39,90075,90076,90078,90080],{"class":41,"line":3679},[39,90077,53471],{"class":45},[39,90079,52867],{"class":52354},[39,90081,52361],{"class":45},[39,90083,90084,90086,90088],{"class":41,"line":9004},[39,90085,52839],{"class":45},[39,90087,52854],{"class":52354},[39,90089,52361],{"class":45},[39,90091,90092],{"class":41,"line":9028},[39,90093,3458],{"emptyLinePlaceholder":1145},[39,90095,90096,90098,90100],{"class":41,"line":9033},[39,90097,52839],{"class":45},[39,90099,51689],{"class":52354},[39,90101,52361],{"class":45},[19,90103,90104],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[1171,90106,90107],{"start":99},[1174,90108,90109],{},"debugger",[19,90111,90112],{},[269,90113],{"alt":34,"src":90114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,90116,90117],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90119,90121],{"id":90120},"_416-处理this","4.16 处理this",[1188,90123,90125],{"id":90124},"_4161-this的指向","4.16.1 this的指向",[1171,90127,90128],{},[1174,90129,90130],{},"普通函数的this",[19,90132,90133],{},[269,90134],{"alt":34,"src":90135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[1171,90137,90138],{"start":74},[1174,90139,90140],{},"箭头函数的this",[19,90142,90143],{},[269,90144],{"alt":34,"src":90145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,90147,90148],{},[269,90149],{"alt":34,"src":90150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,90152,90153],{},[269,90154],{"alt":34,"src":90155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[1188,90157,90159],{"id":90158},"_4162-this的改变","4.16.2 this的改变",[19,90161,90162],{},"call() apply() bind()",[1171,90164,90165],{},[1174,90166,90167],{},"call()",[19,90169,90170],{},[269,90171],{"alt":34,"src":90172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,90174,90175],{},"两个作用：①调用函数；②改变this指向",[29,90177,90179],{"className":54121,"code":90178,"language":54123,"meta":34,"style":34},"\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",[36,90180,90181,90189,90197,90201,90206,90210,90215,90220,90225,90229,90234,90242],{"__ignoreMap":34},[39,90182,90183,90185,90187],{"class":41,"line":42},[39,90184,2108],{"class":45},[39,90186,52854],{"class":52354},[39,90188,52361],{"class":45},[39,90190,90191,90193,90195],{"class":41,"line":74},[39,90192,53198],{"class":45},[39,90194,52867],{"class":52354},[39,90196,52361],{"class":45},[39,90198,90199],{"class":41,"line":99},[39,90200,72577],{"class":45},[39,90202,90203],{"class":41,"line":106},[39,90204,90205],{"class":45},"      uname: 'pink'\n",[39,90207,90208],{"class":41,"line":112},[39,90209,3245],{"class":45},[39,90211,90212],{"class":41,"line":118},[39,90213,90214],{"class":45},"    function fn(x, y) {\n",[39,90216,90217],{"class":41,"line":413},[39,90218,90219],{"class":45},"      console.log(this)  \u002F\u002Fwindow\n",[39,90221,90222],{"class":41,"line":419},[39,90223,90224],{"class":45},"      console.log(x + y)\n",[39,90226,90227],{"class":41,"line":425},[39,90228,3245],{"class":45},[39,90230,90231],{"class":41,"line":443},[39,90232,90233],{"class":45},"    fn.call(obj, 1, 2)\n",[39,90235,90236,90238,90240],{"class":41,"line":449},[39,90237,53471],{"class":45},[39,90239,52867],{"class":52354},[39,90241,52361],{"class":45},[39,90243,90244,90246,90248],{"class":41,"line":455},[39,90245,52839],{"class":45},[39,90247,52854],{"class":52354},[39,90249,52361],{"class":45},[19,90251,90252],{},[269,90253],{"alt":34,"src":90254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[1171,90256,90257],{"start":74},[1174,90258,90259],{},"apply()",[19,90261,90262],{},[269,90263],{"alt":34,"src":90264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,90266,90175],{},[19,90268,90269],{},"call传递的是普通参数，而apply必须传递的是数组",[29,90271,90273],{"className":51687,"code":90272,"language":51689,"meta":34,"style":34},"\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",[36,90274,90275,90285,90299,90303,90311,90325,90345,90357,90365,90369,90377,90385,90395,90402,90406,90411,90427,90439,90453,90457,90462,90481,90486,90490,90495,90500,90508,90513,90535,90540,90556,90572,90584,90588,90593,90612,90620,90628,90632],{"__ignoreMap":34},[39,90276,90277,90279,90281,90283],{"class":41,"line":42},[39,90278,52351],{"class":45},[39,90280,52355],{"class":52354},[39,90282,52358],{"class":3021},[39,90284,52361],{"class":45},[39,90286,90287,90289,90291,90293,90295,90297],{"class":41,"line":74},[39,90288,2108],{"class":45},[39,90290,51689],{"class":52354},[39,90292,52370],{"class":3021},[39,90294,50],{"class":45},[39,90296,52375],{"class":1319},[39,90298,52361],{"class":45},[39,90300,90301],{"class":41,"line":99},[39,90302,3458],{"emptyLinePlaceholder":1145},[39,90304,90305,90307,90309],{"class":41,"line":106},[39,90306,2108],{"class":45},[39,90308,52388],{"class":52354},[39,90310,52361],{"class":45},[39,90312,90313,90315,90317,90319,90321,90323],{"class":41,"line":112},[39,90314,53198],{"class":45},[39,90316,52398],{"class":52354},[39,90318,52401],{"class":3021},[39,90320,50],{"class":45},[39,90322,52406],{"class":1319},[39,90324,52361],{"class":45},[39,90326,90327,90329,90331,90333,90335,90337,90339,90341,90343],{"class":41,"line":118},[39,90328,53198],{"class":45},[39,90330,52398],{"class":52354},[39,90332,15976],{"class":3021},[39,90334,50],{"class":45},[39,90336,52445],{"class":1319},[39,90338,52425],{"class":3021},[39,90340,50],{"class":45},[39,90342,52452],{"class":1319},[39,90344,52361],{"class":45},[39,90346,90347,90349,90351,90353,90355],{"class":41,"line":413},[39,90348,53198],{"class":45},[39,90350,52461],{"class":52354},[39,90352,52464],{"class":45},[39,90354,52461],{"class":52354},[39,90356,52361],{"class":45},[39,90358,90359,90361,90363],{"class":41,"line":419},[39,90360,52839],{"class":45},[39,90362,52388],{"class":52354},[39,90364,52361],{"class":45},[39,90366,90367],{"class":41,"line":425},[39,90368,3458],{"emptyLinePlaceholder":1145},[39,90370,90371,90373,90375],{"class":41,"line":443},[39,90372,2108],{"class":45},[39,90374,52854],{"class":52354},[39,90376,52361],{"class":45},[39,90378,90379,90381,90383],{"class":41,"line":449},[39,90380,53198],{"class":45},[39,90382,52867],{"class":52354},[39,90384,52361],{"class":45},[39,90386,90387,90389,90391,90393],{"class":41,"line":455},[39,90388,12277],{"class":49},[39,90390,71025],{"class":56},[39,90392,14620],{"class":49},[39,90394,16628],{"class":45},[39,90396,90397,90399],{"class":41,"line":461},[39,90398,72680],{"class":45},[39,90400,90401],{"class":56},"18\n",[39,90403,90404],{"class":41,"line":475},[39,90405,3245],{"class":45},[39,90407,90408],{"class":41,"line":665},[39,90409,90410],{"class":102},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[39,90412,90413,90415,90417,90419,90421,90423,90425],{"class":41,"line":671},[39,90414,71138],{"class":49},[39,90416,89904],{"class":3021},[39,90418,1221],{"class":45},[39,90420,2018],{"class":254},[39,90422,13491],{"class":45},[39,90424,2043],{"class":254},[39,90426,13498],{"class":45},[39,90428,90429,90431,90433,90435,90437],{"class":41,"line":684},[39,90430,59298],{"class":45},[39,90432,59301],{"class":3021},[39,90434,1221],{"class":45},[39,90436,88047],{"class":56},[39,90438,209],{"class":45},[39,90440,90441,90443,90445,90448,90450],{"class":41,"line":2732},[39,90442,59298],{"class":45},[39,90444,59301],{"class":3021},[39,90446,90447],{"class":45},"(x ",[39,90449,1682],{"class":49},[39,90451,90452],{"class":45}," y)\n",[39,90454,90455],{"class":41,"line":2737},[39,90456,3245],{"class":45},[39,90458,90459],{"class":41,"line":2751},[39,90460,90461],{"class":102},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[39,90463,90464,90467,90470,90473,90475,90477,90479],{"class":41,"line":2756},[39,90465,90466],{"class":45},"    fn.",[39,90468,90469],{"class":3021},"apply",[39,90471,90472],{"class":45},"(obj, [",[39,90474,57],{"class":56},[39,90476,13491],{"class":45},[39,90478,63],{"class":56},[39,90480,71],{"class":45},[39,90482,90483],{"class":41,"line":2785},[39,90484,90485],{"class":102},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[39,90487,90488],{"class":41,"line":2790},[39,90489,3458],{"emptyLinePlaceholder":1145},[39,90491,90492],{"class":41,"line":2807},[39,90493,90494],{"class":102},"    \u002F\u002F 使用场景：求数组最大值\n",[39,90496,90497],{"class":41,"line":2812},[39,90498,90499],{"class":102},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[39,90501,90502,90505],{"class":41,"line":2817},[39,90503,90504],{"class":102},"    \u002F\u002F console.log(max)",[39,90506,90507],{"class":102},"   \u002F\u002F3\n",[39,90509,90510],{"class":41,"line":2822},[39,90511,90512],{"class":102},"    \u002F\u002F 指向空或者Math都是可以的\n",[39,90514,90515,90517,90519,90521,90523,90525,90527,90529,90531,90533],{"class":41,"line":2836},[39,90516,12277],{"class":49},[39,90518,58749],{"class":56},[39,90520,14620],{"class":49},[39,90522,53280],{"class":45},[39,90524,1519],{"class":56},[39,90526,13491],{"class":45},[39,90528,1705],{"class":56},[39,90530,13491],{"class":45},[39,90532,1735],{"class":56},[39,90534,34301],{"class":45},[39,90536,90537],{"class":41,"line":2841},[39,90538,90539],{"class":102},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[39,90541,90542,90544,90546,90548,90551,90553],{"class":41,"line":3635},[39,90543,12277],{"class":49},[39,90545,7007],{"class":56},[39,90547,14620],{"class":49},[39,90549,90550],{"class":45}," Math.max.",[39,90552,90469],{"class":3021},[39,90554,90555],{"class":45},"(Math, arr)\n",[39,90557,90558,90560,90563,90565,90568,90570],{"class":41,"line":3649},[39,90559,12277],{"class":49},[39,90561,90562],{"class":56}," min",[39,90564,14620],{"class":49},[39,90566,90567],{"class":45}," Math.min.",[39,90569,90469],{"class":3021},[39,90571,90555],{"class":45},[39,90573,90574,90576,90578,90581],{"class":41,"line":3657},[39,90575,74807],{"class":45},[39,90577,59301],{"class":3021},[39,90579,90580],{"class":45},"(max, min)     ",[39,90582,90583],{"class":102},"\u002F\u002F100,4\n",[39,90585,90586],{"class":41,"line":3662},[39,90587,3458],{"emptyLinePlaceholder":1145},[39,90589,90590],{"class":41,"line":3668},[39,90591,90592],{"class":102},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[39,90594,90595,90597,90599,90602,90604,90606,90609],{"class":41,"line":3674},[39,90596,74807],{"class":45},[39,90598,59301],{"class":3021},[39,90600,90601],{"class":45},"(Max.",[39,90603,7071],{"class":3021},[39,90605,1221],{"class":45},[39,90607,90608],{"class":49},"...",[39,90610,90611],{"class":45},"arr))\n",[39,90613,90614,90616,90618],{"class":41,"line":3679},[39,90615,53471],{"class":45},[39,90617,52867],{"class":52354},[39,90619,52361],{"class":45},[39,90621,90622,90624,90626],{"class":41,"line":9004},[39,90623,52839],{"class":45},[39,90625,52854],{"class":52354},[39,90627,52361],{"class":45},[39,90629,90630],{"class":41,"line":9028},[39,90631,3458],{"emptyLinePlaceholder":1145},[39,90633,90634,90636,90638],{"class":41,"line":9033},[39,90635,52839],{"class":45},[39,90637,51689],{"class":52354},[39,90639,52361],{"class":45},[19,90641,90642],{},[269,90643],{"alt":34,"src":90644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[1171,90646,90647],{"start":99},[1174,90648,90649],{},"bind()",[19,90651,90652],{},[269,90653],{"alt":34,"src":90654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,90656,90657],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,90659,90660],{},"bind的语法跟call很相似",[29,90662,90664],{"className":54121,"code":90663,"language":54123,"meta":34,"style":34},"\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",[36,90665,90666,90674,90682,90686,90691,90695,90699,90704,90708,90713,90718,90723,90728,90733,90738,90743,90747,90755],{"__ignoreMap":34},[39,90667,90668,90670,90672],{"class":41,"line":42},[39,90669,2108],{"class":45},[39,90671,52854],{"class":52354},[39,90673,52361],{"class":45},[39,90675,90676,90678,90680],{"class":41,"line":74},[39,90677,53198],{"class":45},[39,90679,52867],{"class":52354},[39,90681,52361],{"class":45},[39,90683,90684],{"class":41,"line":99},[39,90685,72577],{"class":45},[39,90687,90688],{"class":41,"line":106},[39,90689,90690],{"class":45},"      age: 18\n",[39,90692,90693],{"class":41,"line":112},[39,90694,3245],{"class":45},[39,90696,90697],{"class":41,"line":118},[39,90698,78197],{"class":45},[39,90700,90701],{"class":41,"line":413},[39,90702,90703],{"class":45},"      console.log(this)\n",[39,90705,90706],{"class":41,"line":419},[39,90707,3245],{"class":45},[39,90709,90710],{"class":41,"line":425},[39,90711,90712],{"class":45},"    \u002F\u002F 1.bind 不会调用函数\n",[39,90714,90715],{"class":41,"line":443},[39,90716,90717],{"class":45},"    \u002F\u002F 2.bind能改变this的指向\n",[39,90719,90720],{"class":41,"line":449},[39,90721,90722],{"class":45},"    fn.bind()\n",[39,90724,90725],{"class":41,"line":455},[39,90726,90727],{"class":45},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[39,90729,90730],{"class":41,"line":461},[39,90731,90732],{"class":45},"    const fun = fn.bind(obj)\n",[39,90734,90735],{"class":41,"line":475},[39,90736,90737],{"class":45},"    \u002F\u002F console.log(fun)\n",[39,90739,90740],{"class":41,"line":665},[39,90741,90742],{"class":45},"    \u002F\u002F 调用,查看this的指向\n",[39,90744,90745],{"class":41,"line":671},[39,90746,53705],{"class":45},[39,90748,90749,90751,90753],{"class":41,"line":684},[39,90750,53471],{"class":45},[39,90752,52867],{"class":52354},[39,90754,52361],{"class":45},[39,90756,90757,90759,90761],{"class":41,"line":2732},[39,90758,52839],{"class":45},[39,90760,52854],{"class":52354},[39,90762,52361],{"class":45},[19,90764,90765],{},[269,90766],{"alt":34,"src":90767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[1171,90769,90770],{"start":106},[1174,90771,90772],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[29,90774,90776],{"className":54121,"code":90775,"language":54123,"meta":34,"style":34},"\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",[36,90777,90778,90786,90799,90807,90812,90816,90821,90826,90831,90836,90841,90846,90851,90856,90860,90868],{"__ignoreMap":34},[39,90779,90780,90782,90784],{"class":41,"line":42},[39,90781,2108],{"class":45},[39,90783,52854],{"class":52354},[39,90785,52361],{"class":45},[39,90787,90788,90790,90792,90795,90797],{"class":41,"line":74},[39,90789,53198],{"class":45},[39,90791,54941],{"class":52354},[39,90793,90794],{"class":45},">禁用\u003C\u002F",[39,90796,54941],{"class":52354},[39,90798,52361],{"class":45},[39,90800,90801,90803,90805],{"class":41,"line":99},[39,90802,53198],{"class":45},[39,90804,52867],{"class":52354},[39,90806,52361],{"class":45},[39,90808,90809],{"class":41,"line":106},[39,90810,90811],{"class":45},"    const btn = document.querySelector('button')\n",[39,90813,90814],{"class":41,"line":112},[39,90815,60070],{"class":45},[39,90817,90818],{"class":41,"line":118},[39,90819,90820],{"class":45},"      this.disabled = true\n",[39,90822,90823],{"class":41,"line":413},[39,90824,90825],{"class":45},"      \u002F\u002F 定时器是window进行调用的\n",[39,90827,90828],{"class":41,"line":419},[39,90829,90830],{"class":45},"      setTimeout(function () {\n",[39,90832,90833],{"class":41,"line":425},[39,90834,90835],{"class":45},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[39,90837,90838],{"class":41,"line":443},[39,90839,90840],{"class":45},"        this.disabled = false\n",[39,90842,90843],{"class":41,"line":449},[39,90844,90845],{"class":45},"      }.bind(this), 2000)\n",[39,90847,90848],{"class":41,"line":455},[39,90849,90850],{"class":45},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[39,90852,90853],{"class":41,"line":461},[39,90854,90855],{"class":45},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[39,90857,90858],{"class":41,"line":475},[39,90859,34516],{"class":45},[39,90861,90862,90864,90866],{"class":41,"line":665},[39,90863,53471],{"class":45},[39,90865,52867],{"class":52354},[39,90867,52361],{"class":45},[39,90869,90870,90872,90874],{"class":41,"line":671},[39,90871,52839],{"class":45},[39,90873,52854],{"class":52354},[39,90875,52361],{"class":45},[1171,90877,90878],{"start":112},[1174,90879,23009],{},[19,90881,90882],{},[269,90883],{"alt":34,"src":90884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90886,90888],{"id":90887},"_417-性能优化","4.17 性能优化",[1188,90890,90892],{"id":90891},"_4171-防抖","4.17.1 防抖",[19,90894,90895],{},[269,90896],{"alt":34,"src":90897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,90899,90900],{},[304,90901,90902],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,90904,90905],{},"防抖实现方式：",[2205,90907,90908],{},[1174,90909,90910],{},"lodash 提供了防抖处理",[19,90912,90913],{},"_.debounce(func,[wait=0],[options={}])",[19,90915,90916],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[29,90918,90920],{"className":51687,"code":90919,"language":51689,"meta":34,"style":34},"\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",[36,90921,90922,90932,90946,90950,90958,90972,90992,91004,91012,91018,91028,91040,91052,91063,91075,91085,91095,91108,91112,91120,91128,91132,91140,91158,91176,91184,91203,91213,91222,91233,91238,91242,91247,91252,91257,91282,91290,91298,91302],{"__ignoreMap":34},[39,90923,90924,90926,90928,90930],{"class":41,"line":42},[39,90925,52351],{"class":45},[39,90927,52355],{"class":52354},[39,90929,52358],{"class":3021},[39,90931,52361],{"class":45},[39,90933,90934,90936,90938,90940,90942,90944],{"class":41,"line":74},[39,90935,2108],{"class":45},[39,90937,51689],{"class":52354},[39,90939,52370],{"class":3021},[39,90941,50],{"class":45},[39,90943,52375],{"class":1319},[39,90945,52361],{"class":45},[39,90947,90948],{"class":41,"line":99},[39,90949,3458],{"emptyLinePlaceholder":1145},[39,90951,90952,90954,90956],{"class":41,"line":106},[39,90953,2108],{"class":45},[39,90955,52388],{"class":52354},[39,90957,52361],{"class":45},[39,90959,90960,90962,90964,90966,90968,90970],{"class":41,"line":112},[39,90961,53198],{"class":45},[39,90963,52398],{"class":52354},[39,90965,52401],{"class":3021},[39,90967,50],{"class":45},[39,90969,52406],{"class":1319},[39,90971,52361],{"class":45},[39,90973,90974,90976,90978,90980,90982,90984,90986,90988,90990],{"class":41,"line":118},[39,90975,53198],{"class":45},[39,90977,52398],{"class":52354},[39,90979,15976],{"class":3021},[39,90981,50],{"class":45},[39,90983,52445],{"class":1319},[39,90985,52425],{"class":3021},[39,90987,50],{"class":45},[39,90989,52452],{"class":1319},[39,90991,52361],{"class":45},[39,90993,90994,90996,90998,91000,91002],{"class":41,"line":413},[39,90995,53198],{"class":45},[39,90997,52461],{"class":52354},[39,90999,52464],{"class":45},[39,91001,52461],{"class":52354},[39,91003,52361],{"class":45},[39,91005,91006,91008,91010],{"class":41,"line":419},[39,91007,53198],{"class":45},[39,91009,1133],{"class":52354},[39,91011,52361],{"class":45},[39,91013,91014,91016],{"class":41,"line":425},[39,91015,55806],{"class":3021},[39,91017,16628],{"class":45},[39,91019,91020,91022,91024,91026],{"class":41,"line":443},[39,91021,73650],{"class":56},[39,91023,52491],{"class":45},[39,91025,61559],{"class":56},[39,91027,2359],{"class":45},[39,91029,91030,91032,91034,91036,91038],{"class":41,"line":449},[39,91031,55825],{"class":56},[39,91033,52491],{"class":45},[39,91035,2780],{"class":56},[39,91037,52546],{"class":49},[39,91039,2359],{"class":45},[39,91041,91042,91044,91046,91048,91050],{"class":41,"line":455},[39,91043,55839],{"class":56},[39,91045,52491],{"class":45},[39,91047,2780],{"class":56},[39,91049,52546],{"class":49},[39,91051,2359],{"class":45},[39,91053,91054,91056,91058,91061],{"class":41,"line":461},[39,91055,55938],{"class":56},[39,91057,52491],{"class":45},[39,91059,91060],{"class":56},"gray",[39,91062,2359],{"class":45},[39,91064,91065,91067,91069,91071,91073],{"class":41,"line":475},[39,91066,55976],{"class":56},[39,91068,52491],{"class":45},[39,91070,2023],{"class":56},[39,91072,52546],{"class":49},[39,91074,2359],{"class":45},[39,91076,91077,91079,91081,91083],{"class":41,"line":665},[39,91078,58470],{"class":56},[39,91080,52491],{"class":45},[39,91082,61896],{"class":56},[39,91084,2359],{"class":45},[39,91086,91087,91089,91091,91093],{"class":41,"line":671},[39,91088,58340],{"class":56},[39,91090,52491],{"class":45},[39,91092,52646],{"class":56},[39,91094,2359],{"class":45},[39,91096,91097,91100,91102,91104,91106],{"class":41,"line":684},[39,91098,91099],{"class":56},"      padding-top",[39,91101,52491],{"class":45},[39,91103,89],{"class":56},[39,91105,52546],{"class":49},[39,91107,2359],{"class":45},[39,91109,91110],{"class":41,"line":2732},[39,91111,3245],{"class":45},[39,91113,91114,91116,91118],{"class":41,"line":2737},[39,91115,53471],{"class":45},[39,91117,1133],{"class":52354},[39,91119,52361],{"class":45},[39,91121,91122,91124,91126],{"class":41,"line":2751},[39,91123,52839],{"class":45},[39,91125,52388],{"class":52354},[39,91127,52361],{"class":45},[39,91129,91130],{"class":41,"line":2756},[39,91131,3458],{"emptyLinePlaceholder":1145},[39,91133,91134,91136,91138],{"class":41,"line":2785},[39,91135,2108],{"class":45},[39,91137,52854],{"class":52354},[39,91139,52361],{"class":45},[39,91141,91142,91144,91146,91148,91150,91152,91154,91156],{"class":41,"line":2790},[39,91143,53198],{"class":45},[39,91145,52665],{"class":52354},[39,91147,54540],{"class":3021},[39,91149,50],{"class":45},[39,91151,54545],{"class":1319},[39,91153,56368],{"class":45},[39,91155,52665],{"class":52354},[39,91157,52361],{"class":45},[39,91159,91160,91162,91164,91166,91168,91170,91172,91174],{"class":41,"line":2807},[39,91161,53198],{"class":45},[39,91163,52867],{"class":52354},[39,91165,56293],{"class":3021},[39,91167,50],{"class":45},[39,91169,89328],{"class":1319},[39,91171,56368],{"class":45},[39,91173,52867],{"class":52354},[39,91175,52361],{"class":45},[39,91177,91178,91180,91182],{"class":41,"line":2812},[39,91179,53198],{"class":45},[39,91181,52867],{"class":52354},[39,91183,52361],{"class":45},[39,91185,91186,91188,91190,91192,91194,91196,91198,91201],{"class":41,"line":2817},[39,91187,12277],{"class":49},[39,91189,87987],{"class":56},[39,91191,14620],{"class":49},[39,91193,55450],{"class":45},[39,91195,55453],{"class":3021},[39,91197,1221],{"class":45},[39,91199,91200],{"class":1319},"'.box'",[39,91202,209],{"class":45},[39,91204,91205,91207,91209,91211],{"class":41,"line":2822},[39,91206,53273],{"class":49},[39,91208,10494],{"class":45},[39,91210,50],{"class":49},[39,91212,48388],{"class":56},[39,91214,91215,91217,91220],{"class":41,"line":2836},[39,91216,71138],{"class":49},[39,91218,91219],{"class":3021}," mouseMove",[39,91221,11909],{"class":45},[39,91223,91224,91227,91229,91231],{"class":41,"line":2841},[39,91225,91226],{"class":45},"      box.innerHTML ",[39,91228,50],{"class":49},[39,91230,4090],{"class":45},[39,91232,3760],{"class":49},[39,91234,91235],{"class":41,"line":3635},[39,91236,91237],{"class":102},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[39,91239,91240],{"class":41,"line":3649},[39,91241,3245],{"class":45},[39,91243,91244],{"class":41,"line":3657},[39,91245,91246],{"class":102},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[39,91248,91249],{"class":41,"line":3662},[39,91250,91251],{"class":102},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[39,91253,91254],{"class":41,"line":3668},[39,91255,91256],{"class":102},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[39,91258,91259,91262,91264,91266,91269,91272,91275,91278,91280],{"class":41,"line":3674},[39,91260,91261],{"class":45},"    box.",[39,91263,58867],{"class":3021},[39,91265,1221],{"class":45},[39,91267,91268],{"class":1319},"'mousemove'",[39,91270,91271],{"class":45},", _.",[39,91273,91274],{"class":3021},"debounce",[39,91276,91277],{"class":45},"(mouseMove, ",[39,91279,66128],{"class":56},[39,91281,31552],{"class":45},[39,91283,91284,91286,91288],{"class":41,"line":3679},[39,91285,53471],{"class":45},[39,91287,52867],{"class":52354},[39,91289,52361],{"class":45},[39,91291,91292,91294,91296],{"class":41,"line":9004},[39,91293,52839],{"class":45},[39,91295,52854],{"class":52354},[39,91297,52361],{"class":45},[39,91299,91300],{"class":41,"line":9028},[39,91301,3458],{"emptyLinePlaceholder":1145},[39,91303,91304,91306,91308],{"class":41,"line":9033},[39,91305,52839],{"class":45},[39,91307,51689],{"class":52354},[39,91309,52361],{"class":45},[2205,91311,91312],{},[1174,91313,91314],{},"手写一个防抖函数来处理",[19,91316,91317],{},"防抖的核心就是利用定时器来实现的：",[19,91319,91320],{},"①声明一个定时器变量",[19,91322,91323],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,91325,91326],{},"③如果没有定时器则开启定时器，记得存到变量里面",[29,91328,91330],{"className":51687,"code":91329,"language":51689,"meta":34,"style":34},"\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",[36,91331,91332,91342,91356,91360,91368,91382,91402,91414,91422,91428,91438,91450,91462,91472,91484,91494,91504,91516,91520,91528,91536,91540,91548,91566,91584,91592,91610,91620,91628,91638,91642,91646,91650,91655,91660,91665,91670,91675,91680,91698,91705,91710,91718,91723,91736,91752,91762,91767,91771,91775,91795,91799,91804,91809,91814,91819,91827,91835,91839],{"__ignoreMap":34},[39,91333,91334,91336,91338,91340],{"class":41,"line":42},[39,91335,52351],{"class":45},[39,91337,52355],{"class":52354},[39,91339,52358],{"class":3021},[39,91341,52361],{"class":45},[39,91343,91344,91346,91348,91350,91352,91354],{"class":41,"line":74},[39,91345,2108],{"class":45},[39,91347,51689],{"class":52354},[39,91349,52370],{"class":3021},[39,91351,50],{"class":45},[39,91353,52375],{"class":1319},[39,91355,52361],{"class":45},[39,91357,91358],{"class":41,"line":99},[39,91359,3458],{"emptyLinePlaceholder":1145},[39,91361,91362,91364,91366],{"class":41,"line":106},[39,91363,2108],{"class":45},[39,91365,52388],{"class":52354},[39,91367,52361],{"class":45},[39,91369,91370,91372,91374,91376,91378,91380],{"class":41,"line":112},[39,91371,53198],{"class":45},[39,91373,52398],{"class":52354},[39,91375,52401],{"class":3021},[39,91377,50],{"class":45},[39,91379,52406],{"class":1319},[39,91381,52361],{"class":45},[39,91383,91384,91386,91388,91390,91392,91394,91396,91398,91400],{"class":41,"line":118},[39,91385,53198],{"class":45},[39,91387,52398],{"class":52354},[39,91389,15976],{"class":3021},[39,91391,50],{"class":45},[39,91393,52445],{"class":1319},[39,91395,52425],{"class":3021},[39,91397,50],{"class":45},[39,91399,52452],{"class":1319},[39,91401,52361],{"class":45},[39,91403,91404,91406,91408,91410,91412],{"class":41,"line":413},[39,91405,53198],{"class":45},[39,91407,52461],{"class":52354},[39,91409,52464],{"class":45},[39,91411,52461],{"class":52354},[39,91413,52361],{"class":45},[39,91415,91416,91418,91420],{"class":41,"line":419},[39,91417,53198],{"class":45},[39,91419,1133],{"class":52354},[39,91421,52361],{"class":45},[39,91423,91424,91426],{"class":41,"line":425},[39,91425,55806],{"class":3021},[39,91427,16628],{"class":45},[39,91429,91430,91432,91434,91436],{"class":41,"line":443},[39,91431,73650],{"class":56},[39,91433,52491],{"class":45},[39,91435,61559],{"class":56},[39,91437,2359],{"class":45},[39,91439,91440,91442,91444,91446,91448],{"class":41,"line":449},[39,91441,55825],{"class":56},[39,91443,52491],{"class":45},[39,91445,2780],{"class":56},[39,91447,52546],{"class":49},[39,91449,2359],{"class":45},[39,91451,91452,91454,91456,91458,91460],{"class":41,"line":455},[39,91453,55839],{"class":56},[39,91455,52491],{"class":45},[39,91457,2780],{"class":56},[39,91459,52546],{"class":49},[39,91461,2359],{"class":45},[39,91463,91464,91466,91468,91470],{"class":41,"line":461},[39,91465,55938],{"class":56},[39,91467,52491],{"class":45},[39,91469,91060],{"class":56},[39,91471,2359],{"class":45},[39,91473,91474,91476,91478,91480,91482],{"class":41,"line":475},[39,91475,55976],{"class":56},[39,91477,52491],{"class":45},[39,91479,2023],{"class":56},[39,91481,52546],{"class":49},[39,91483,2359],{"class":45},[39,91485,91486,91488,91490,91492],{"class":41,"line":665},[39,91487,58470],{"class":56},[39,91489,52491],{"class":45},[39,91491,61896],{"class":56},[39,91493,2359],{"class":45},[39,91495,91496,91498,91500,91502],{"class":41,"line":671},[39,91497,58340],{"class":56},[39,91499,52491],{"class":45},[39,91501,52646],{"class":56},[39,91503,2359],{"class":45},[39,91505,91506,91508,91510,91512,91514],{"class":41,"line":684},[39,91507,91099],{"class":56},[39,91509,52491],{"class":45},[39,91511,89],{"class":56},[39,91513,52546],{"class":49},[39,91515,2359],{"class":45},[39,91517,91518],{"class":41,"line":2732},[39,91519,3245],{"class":45},[39,91521,91522,91524,91526],{"class":41,"line":2737},[39,91523,53471],{"class":45},[39,91525,1133],{"class":52354},[39,91527,52361],{"class":45},[39,91529,91530,91532,91534],{"class":41,"line":2751},[39,91531,52839],{"class":45},[39,91533,52388],{"class":52354},[39,91535,52361],{"class":45},[39,91537,91538],{"class":41,"line":2756},[39,91539,3458],{"emptyLinePlaceholder":1145},[39,91541,91542,91544,91546],{"class":41,"line":2785},[39,91543,2108],{"class":45},[39,91545,52854],{"class":52354},[39,91547,52361],{"class":45},[39,91549,91550,91552,91554,91556,91558,91560,91562,91564],{"class":41,"line":2790},[39,91551,53198],{"class":45},[39,91553,52665],{"class":52354},[39,91555,54540],{"class":3021},[39,91557,50],{"class":45},[39,91559,54545],{"class":1319},[39,91561,56368],{"class":45},[39,91563,52665],{"class":52354},[39,91565,52361],{"class":45},[39,91567,91568,91570,91572,91574,91576,91578,91580,91582],{"class":41,"line":2807},[39,91569,53198],{"class":45},[39,91571,52867],{"class":52354},[39,91573,56293],{"class":3021},[39,91575,50],{"class":45},[39,91577,89328],{"class":1319},[39,91579,56368],{"class":45},[39,91581,52867],{"class":52354},[39,91583,52361],{"class":45},[39,91585,91586,91588,91590],{"class":41,"line":2812},[39,91587,53198],{"class":45},[39,91589,52867],{"class":52354},[39,91591,52361],{"class":45},[39,91593,91594,91596,91598,91600,91602,91604,91606,91608],{"class":41,"line":2817},[39,91595,12277],{"class":49},[39,91597,87987],{"class":56},[39,91599,14620],{"class":49},[39,91601,55450],{"class":45},[39,91603,55453],{"class":3021},[39,91605,1221],{"class":45},[39,91607,91200],{"class":1319},[39,91609,209],{"class":45},[39,91611,91612,91614,91616,91618],{"class":41,"line":2822},[39,91613,53273],{"class":49},[39,91615,10494],{"class":45},[39,91617,50],{"class":49},[39,91619,48388],{"class":56},[39,91621,91622,91624,91626],{"class":41,"line":2836},[39,91623,71138],{"class":49},[39,91625,91219],{"class":3021},[39,91627,11909],{"class":45},[39,91629,91630,91632,91634,91636],{"class":41,"line":2841},[39,91631,91226],{"class":45},[39,91633,50],{"class":49},[39,91635,4090],{"class":45},[39,91637,3760],{"class":49},[39,91639,91640],{"class":41,"line":3635},[39,91641,91237],{"class":102},[39,91643,91644],{"class":41,"line":3649},[39,91645,3245],{"class":45},[39,91647,91648],{"class":41,"line":3657},[39,91649,91246],{"class":102},[39,91651,91652],{"class":41,"line":3662},[39,91653,91654],{"class":102},"    \u002F\u002F 手写防抖函数\n",[39,91656,91657],{"class":41,"line":3668},[39,91658,91659],{"class":102},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[39,91661,91662],{"class":41,"line":3674},[39,91663,91664],{"class":102},"    \u002F\u002F 1.声明定时器变量\n",[39,91666,91667],{"class":41,"line":3679},[39,91668,91669],{"class":102},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[39,91671,91672],{"class":41,"line":9004},[39,91673,91674],{"class":102},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[39,91676,91677],{"class":41,"line":9028},[39,91678,91679],{"class":102},"    \u002F\u002F 4.定时器里面写函数调用\n",[39,91681,91682,91684,91687,91689,91692,91694,91696],{"class":41,"line":9033},[39,91683,71138],{"class":49},[39,91685,91686],{"class":3021}," debounce",[39,91688,1221],{"class":45},[39,91690,91691],{"class":254},"fn",[39,91693,13491],{"class":45},[39,91695,1918],{"class":254},[39,91697,13498],{"class":45},[39,91699,91700,91702],{"class":41,"line":9039},[39,91701,80826],{"class":49},[39,91703,91704],{"class":45}," timer\n",[39,91706,91707],{"class":41,"line":9066},[39,91708,91709],{"class":102},"      \u002F\u002F return 返回一个匿名函数\n",[39,91711,91712,91714,91716],{"class":41,"line":9071},[39,91713,75036],{"class":49},[39,91715,59972],{"class":49},[39,91717,55506],{"class":45},[39,91719,91720],{"class":41,"line":9077},[39,91721,91722],{"class":102},"        \u002F\u002F 这里边写第二三四步\n",[39,91724,91725,91727,91730,91733],{"class":41,"line":9089},[39,91726,3555],{"class":49},[39,91728,91729],{"class":45}," (timer) ",[39,91731,91732],{"class":3021},"clearTimeout",[39,91734,91735],{"class":45},"(timer)\n",[39,91737,91738,91741,91743,91746,91748,91750],{"class":41,"line":9101},[39,91739,91740],{"class":45},"        timer ",[39,91742,50],{"class":49},[39,91744,91745],{"class":3021}," setTimeout",[39,91747,1221],{"class":45},[39,91749,55503],{"class":49},[39,91751,55506],{"class":45},[39,91753,91754,91757,91759],{"class":41,"line":9113},[39,91755,91756],{"class":3021},"          fn",[39,91758,14106],{"class":45},[39,91760,91761],{"class":102},"\u002F\u002F加小括号调用fn }, t)\n",[39,91763,91764],{"class":41,"line":10772},[39,91765,91766],{"class":45},"        }, t)\n",[39,91768,91769],{"class":41,"line":10797},[39,91770,53452],{"class":45},[39,91772,91773],{"class":41,"line":10820},[39,91774,3245],{"class":45},[39,91776,91777,91779,91781,91783,91785,91787,91789,91791,91793],{"class":41,"line":10844},[39,91778,91261],{"class":45},[39,91780,58867],{"class":3021},[39,91782,1221],{"class":45},[39,91784,91268],{"class":1319},[39,91786,13491],{"class":45},[39,91788,91274],{"class":3021},[39,91790,91277],{"class":45},[39,91792,66128],{"class":56},[39,91794,31552],{"class":45},[39,91796,91797],{"class":41,"line":10849},[39,91798,3458],{"emptyLinePlaceholder":1145},[39,91800,91801],{"class":41,"line":10854},[39,91802,91803],{"class":102},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[39,91805,91806],{"class":41,"line":10859},[39,91807,91808],{"class":102},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[39,91810,91811],{"class":41,"line":10868},[39,91812,91813],{"class":102},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[39,91815,91816],{"class":41,"line":10873},[39,91817,91818],{"class":102},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[39,91820,91821,91823,91825],{"class":41,"line":10879},[39,91822,53471],{"class":45},[39,91824,52867],{"class":52354},[39,91826,52361],{"class":45},[39,91828,91829,91831,91833],{"class":41,"line":10900},[39,91830,52839],{"class":45},[39,91832,52854],{"class":52354},[39,91834,52361],{"class":45},[39,91836,91837],{"class":41,"line":10906},[39,91838,3458],{"emptyLinePlaceholder":1145},[39,91840,91841,91843,91845],{"class":41,"line":10920},[39,91842,52839],{"class":45},[39,91844,51689],{"class":52354},[39,91846,52361],{"class":45},[1188,91848,91850],{"id":91849},"_4172-节流","4.17.2 节流",[19,91852,91853],{},[269,91854],{"alt":34,"src":91855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,91857,91858],{},[269,91859],{"alt":34,"src":91860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,91862,91863],{},[304,91864,91865],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,91867,91868],{},"实现方式：",[2205,91870,91871],{},[1174,91872,91873],{},"lodash 提供的节流函数来处理",[19,91875,91876],{},"_.throttle(func,[wait=0],[options=])",[19,91878,91879],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[29,91881,91883],{"className":51687,"code":91882,"language":51689,"meta":34,"style":34},"\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",[36,91884,91885,91895,91909,91913,91921,91935,91955,91967,91975,91981,91991,92003,92015,92025,92037,92047,92057,92069,92073,92081,92089,92093,92101,92119,92137,92145,92163,92173,92181,92191,92195,92199,92203,92208,92213,92234,92242,92250,92254],{"__ignoreMap":34},[39,91886,91887,91889,91891,91893],{"class":41,"line":42},[39,91888,52351],{"class":45},[39,91890,52355],{"class":52354},[39,91892,52358],{"class":3021},[39,91894,52361],{"class":45},[39,91896,91897,91899,91901,91903,91905,91907],{"class":41,"line":74},[39,91898,2108],{"class":45},[39,91900,51689],{"class":52354},[39,91902,52370],{"class":3021},[39,91904,50],{"class":45},[39,91906,52375],{"class":1319},[39,91908,52361],{"class":45},[39,91910,91911],{"class":41,"line":99},[39,91912,3458],{"emptyLinePlaceholder":1145},[39,91914,91915,91917,91919],{"class":41,"line":106},[39,91916,2108],{"class":45},[39,91918,52388],{"class":52354},[39,91920,52361],{"class":45},[39,91922,91923,91925,91927,91929,91931,91933],{"class":41,"line":112},[39,91924,53198],{"class":45},[39,91926,52398],{"class":52354},[39,91928,52401],{"class":3021},[39,91930,50],{"class":45},[39,91932,52406],{"class":1319},[39,91934,52361],{"class":45},[39,91936,91937,91939,91941,91943,91945,91947,91949,91951,91953],{"class":41,"line":118},[39,91938,53198],{"class":45},[39,91940,52398],{"class":52354},[39,91942,15976],{"class":3021},[39,91944,50],{"class":45},[39,91946,52445],{"class":1319},[39,91948,52425],{"class":3021},[39,91950,50],{"class":45},[39,91952,52452],{"class":1319},[39,91954,52361],{"class":45},[39,91956,91957,91959,91961,91963,91965],{"class":41,"line":413},[39,91958,53198],{"class":45},[39,91960,52461],{"class":52354},[39,91962,52464],{"class":45},[39,91964,52461],{"class":52354},[39,91966,52361],{"class":45},[39,91968,91969,91971,91973],{"class":41,"line":419},[39,91970,53198],{"class":45},[39,91972,1133],{"class":52354},[39,91974,52361],{"class":45},[39,91976,91977,91979],{"class":41,"line":425},[39,91978,55806],{"class":3021},[39,91980,16628],{"class":45},[39,91982,91983,91985,91987,91989],{"class":41,"line":443},[39,91984,73650],{"class":56},[39,91986,52491],{"class":45},[39,91988,61559],{"class":56},[39,91990,2359],{"class":45},[39,91992,91993,91995,91997,91999,92001],{"class":41,"line":449},[39,91994,55825],{"class":56},[39,91996,52491],{"class":45},[39,91998,2780],{"class":56},[39,92000,52546],{"class":49},[39,92002,2359],{"class":45},[39,92004,92005,92007,92009,92011,92013],{"class":41,"line":455},[39,92006,55839],{"class":56},[39,92008,52491],{"class":45},[39,92010,2780],{"class":56},[39,92012,52546],{"class":49},[39,92014,2359],{"class":45},[39,92016,92017,92019,92021,92023],{"class":41,"line":461},[39,92018,55938],{"class":56},[39,92020,52491],{"class":45},[39,92022,91060],{"class":56},[39,92024,2359],{"class":45},[39,92026,92027,92029,92031,92033,92035],{"class":41,"line":475},[39,92028,55976],{"class":56},[39,92030,52491],{"class":45},[39,92032,2023],{"class":56},[39,92034,52546],{"class":49},[39,92036,2359],{"class":45},[39,92038,92039,92041,92043,92045],{"class":41,"line":665},[39,92040,58470],{"class":56},[39,92042,52491],{"class":45},[39,92044,61896],{"class":56},[39,92046,2359],{"class":45},[39,92048,92049,92051,92053,92055],{"class":41,"line":671},[39,92050,58340],{"class":56},[39,92052,52491],{"class":45},[39,92054,52646],{"class":56},[39,92056,2359],{"class":45},[39,92058,92059,92061,92063,92065,92067],{"class":41,"line":684},[39,92060,91099],{"class":56},[39,92062,52491],{"class":45},[39,92064,89],{"class":56},[39,92066,52546],{"class":49},[39,92068,2359],{"class":45},[39,92070,92071],{"class":41,"line":2732},[39,92072,3245],{"class":45},[39,92074,92075,92077,92079],{"class":41,"line":2737},[39,92076,53471],{"class":45},[39,92078,1133],{"class":52354},[39,92080,52361],{"class":45},[39,92082,92083,92085,92087],{"class":41,"line":2751},[39,92084,52839],{"class":45},[39,92086,52388],{"class":52354},[39,92088,52361],{"class":45},[39,92090,92091],{"class":41,"line":2756},[39,92092,3458],{"emptyLinePlaceholder":1145},[39,92094,92095,92097,92099],{"class":41,"line":2785},[39,92096,2108],{"class":45},[39,92098,52854],{"class":52354},[39,92100,52361],{"class":45},[39,92102,92103,92105,92107,92109,92111,92113,92115,92117],{"class":41,"line":2790},[39,92104,53198],{"class":45},[39,92106,52665],{"class":52354},[39,92108,54540],{"class":3021},[39,92110,50],{"class":45},[39,92112,54545],{"class":1319},[39,92114,56368],{"class":45},[39,92116,52665],{"class":52354},[39,92118,52361],{"class":45},[39,92120,92121,92123,92125,92127,92129,92131,92133,92135],{"class":41,"line":2807},[39,92122,53198],{"class":45},[39,92124,52867],{"class":52354},[39,92126,56293],{"class":3021},[39,92128,50],{"class":45},[39,92130,89328],{"class":1319},[39,92132,56368],{"class":45},[39,92134,52867],{"class":52354},[39,92136,52361],{"class":45},[39,92138,92139,92141,92143],{"class":41,"line":2812},[39,92140,53198],{"class":45},[39,92142,52867],{"class":52354},[39,92144,52361],{"class":45},[39,92146,92147,92149,92151,92153,92155,92157,92159,92161],{"class":41,"line":2817},[39,92148,12277],{"class":49},[39,92150,87987],{"class":56},[39,92152,14620],{"class":49},[39,92154,55450],{"class":45},[39,92156,55453],{"class":3021},[39,92158,1221],{"class":45},[39,92160,91200],{"class":1319},[39,92162,209],{"class":45},[39,92164,92165,92167,92169,92171],{"class":41,"line":2822},[39,92166,53273],{"class":49},[39,92168,10494],{"class":45},[39,92170,50],{"class":49},[39,92172,48388],{"class":56},[39,92174,92175,92177,92179],{"class":41,"line":2836},[39,92176,71138],{"class":49},[39,92178,91219],{"class":3021},[39,92180,11909],{"class":45},[39,92182,92183,92185,92187,92189],{"class":41,"line":2841},[39,92184,91226],{"class":45},[39,92186,50],{"class":49},[39,92188,4090],{"class":45},[39,92190,3760],{"class":49},[39,92192,92193],{"class":41,"line":3635},[39,92194,91237],{"class":102},[39,92196,92197],{"class":41,"line":3649},[39,92198,3245],{"class":45},[39,92200,92201],{"class":41,"line":3657},[39,92202,91246],{"class":102},[39,92204,92205],{"class":41,"line":3662},[39,92206,92207],{"class":102},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[39,92209,92210],{"class":41,"line":3668},[39,92211,92212],{"class":102},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[39,92214,92215,92217,92219,92221,92223,92225,92228,92230,92232],{"class":41,"line":3674},[39,92216,91261],{"class":45},[39,92218,58867],{"class":3021},[39,92220,1221],{"class":45},[39,92222,91268],{"class":1319},[39,92224,91271],{"class":45},[39,92226,92227],{"class":3021},"throttle",[39,92229,91277],{"class":45},[39,92231,66128],{"class":56},[39,92233,31552],{"class":45},[39,92235,92236,92238,92240],{"class":41,"line":3679},[39,92237,53471],{"class":45},[39,92239,52867],{"class":52354},[39,92241,52361],{"class":45},[39,92243,92244,92246,92248],{"class":41,"line":9004},[39,92245,52839],{"class":45},[39,92247,52854],{"class":52354},[39,92249,52361],{"class":45},[39,92251,92252],{"class":41,"line":9028},[39,92253,3458],{"emptyLinePlaceholder":1145},[39,92255,92256,92258,92260],{"class":41,"line":9033},[39,92257,52839],{"class":45},[39,92259,51689],{"class":52354},[39,92261,52361],{"class":45},[2205,92263,92264],{},[1174,92265,92266],{},"手写一个节流函数来处理",[19,92268,72006],{},[19,92270,91320],{},[19,92272,92273],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,92275,92276],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[29,92278,92280],{"className":51687,"code":92279,"language":51689,"meta":34,"style":34},"\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",[36,92281,92282,92292,92306,92310,92318,92332,92352,92364,92372,92378,92388,92400,92412,92422,92434,92444,92454,92466,92470,92478,92486,92490,92498,92516,92534,92542,92560,92570,92578,92588,92592,92596,92600,92605,92610,92615,92620,92625,92630,92647,92653,92661,92672,92687,92694,92699,92704,92714,92719,92724,92729,92733,92737,92741,92761,92769,92777,92781],{"__ignoreMap":34},[39,92283,92284,92286,92288,92290],{"class":41,"line":42},[39,92285,52351],{"class":45},[39,92287,52355],{"class":52354},[39,92289,52358],{"class":3021},[39,92291,52361],{"class":45},[39,92293,92294,92296,92298,92300,92302,92304],{"class":41,"line":74},[39,92295,2108],{"class":45},[39,92297,51689],{"class":52354},[39,92299,52370],{"class":3021},[39,92301,50],{"class":45},[39,92303,52375],{"class":1319},[39,92305,52361],{"class":45},[39,92307,92308],{"class":41,"line":99},[39,92309,3458],{"emptyLinePlaceholder":1145},[39,92311,92312,92314,92316],{"class":41,"line":106},[39,92313,2108],{"class":45},[39,92315,52388],{"class":52354},[39,92317,52361],{"class":45},[39,92319,92320,92322,92324,92326,92328,92330],{"class":41,"line":112},[39,92321,53198],{"class":45},[39,92323,52398],{"class":52354},[39,92325,52401],{"class":3021},[39,92327,50],{"class":45},[39,92329,52406],{"class":1319},[39,92331,52361],{"class":45},[39,92333,92334,92336,92338,92340,92342,92344,92346,92348,92350],{"class":41,"line":118},[39,92335,53198],{"class":45},[39,92337,52398],{"class":52354},[39,92339,15976],{"class":3021},[39,92341,50],{"class":45},[39,92343,52445],{"class":1319},[39,92345,52425],{"class":3021},[39,92347,50],{"class":45},[39,92349,52452],{"class":1319},[39,92351,52361],{"class":45},[39,92353,92354,92356,92358,92360,92362],{"class":41,"line":413},[39,92355,53198],{"class":45},[39,92357,52461],{"class":52354},[39,92359,52464],{"class":45},[39,92361,52461],{"class":52354},[39,92363,52361],{"class":45},[39,92365,92366,92368,92370],{"class":41,"line":419},[39,92367,53198],{"class":45},[39,92369,1133],{"class":52354},[39,92371,52361],{"class":45},[39,92373,92374,92376],{"class":41,"line":425},[39,92375,55806],{"class":3021},[39,92377,16628],{"class":45},[39,92379,92380,92382,92384,92386],{"class":41,"line":443},[39,92381,73650],{"class":56},[39,92383,52491],{"class":45},[39,92385,61559],{"class":56},[39,92387,2359],{"class":45},[39,92389,92390,92392,92394,92396,92398],{"class":41,"line":449},[39,92391,55825],{"class":56},[39,92393,52491],{"class":45},[39,92395,2780],{"class":56},[39,92397,52546],{"class":49},[39,92399,2359],{"class":45},[39,92401,92402,92404,92406,92408,92410],{"class":41,"line":455},[39,92403,55839],{"class":56},[39,92405,52491],{"class":45},[39,92407,2780],{"class":56},[39,92409,52546],{"class":49},[39,92411,2359],{"class":45},[39,92413,92414,92416,92418,92420],{"class":41,"line":461},[39,92415,55938],{"class":56},[39,92417,52491],{"class":45},[39,92419,91060],{"class":56},[39,92421,2359],{"class":45},[39,92423,92424,92426,92428,92430,92432],{"class":41,"line":475},[39,92425,55976],{"class":56},[39,92427,52491],{"class":45},[39,92429,2023],{"class":56},[39,92431,52546],{"class":49},[39,92433,2359],{"class":45},[39,92435,92436,92438,92440,92442],{"class":41,"line":665},[39,92437,58470],{"class":56},[39,92439,52491],{"class":45},[39,92441,61896],{"class":56},[39,92443,2359],{"class":45},[39,92445,92446,92448,92450,92452],{"class":41,"line":671},[39,92447,58340],{"class":56},[39,92449,52491],{"class":45},[39,92451,52646],{"class":56},[39,92453,2359],{"class":45},[39,92455,92456,92458,92460,92462,92464],{"class":41,"line":684},[39,92457,91099],{"class":56},[39,92459,52491],{"class":45},[39,92461,89],{"class":56},[39,92463,52546],{"class":49},[39,92465,2359],{"class":45},[39,92467,92468],{"class":41,"line":2732},[39,92469,3245],{"class":45},[39,92471,92472,92474,92476],{"class":41,"line":2737},[39,92473,53471],{"class":45},[39,92475,1133],{"class":52354},[39,92477,52361],{"class":45},[39,92479,92480,92482,92484],{"class":41,"line":2751},[39,92481,52839],{"class":45},[39,92483,52388],{"class":52354},[39,92485,52361],{"class":45},[39,92487,92488],{"class":41,"line":2756},[39,92489,3458],{"emptyLinePlaceholder":1145},[39,92491,92492,92494,92496],{"class":41,"line":2785},[39,92493,2108],{"class":45},[39,92495,52854],{"class":52354},[39,92497,52361],{"class":45},[39,92499,92500,92502,92504,92506,92508,92510,92512,92514],{"class":41,"line":2790},[39,92501,53198],{"class":45},[39,92503,52665],{"class":52354},[39,92505,54540],{"class":3021},[39,92507,50],{"class":45},[39,92509,54545],{"class":1319},[39,92511,56368],{"class":45},[39,92513,52665],{"class":52354},[39,92515,52361],{"class":45},[39,92517,92518,92520,92522,92524,92526,92528,92530,92532],{"class":41,"line":2807},[39,92519,53198],{"class":45},[39,92521,52867],{"class":52354},[39,92523,56293],{"class":3021},[39,92525,50],{"class":45},[39,92527,89328],{"class":1319},[39,92529,56368],{"class":45},[39,92531,52867],{"class":52354},[39,92533,52361],{"class":45},[39,92535,92536,92538,92540],{"class":41,"line":2812},[39,92537,53198],{"class":45},[39,92539,52867],{"class":52354},[39,92541,52361],{"class":45},[39,92543,92544,92546,92548,92550,92552,92554,92556,92558],{"class":41,"line":2817},[39,92545,12277],{"class":49},[39,92547,87987],{"class":56},[39,92549,14620],{"class":49},[39,92551,55450],{"class":45},[39,92553,55453],{"class":3021},[39,92555,1221],{"class":45},[39,92557,91200],{"class":1319},[39,92559,209],{"class":45},[39,92561,92562,92564,92566,92568],{"class":41,"line":2822},[39,92563,53273],{"class":49},[39,92565,10494],{"class":45},[39,92567,50],{"class":49},[39,92569,48388],{"class":56},[39,92571,92572,92574,92576],{"class":41,"line":2836},[39,92573,71138],{"class":49},[39,92575,91219],{"class":3021},[39,92577,11909],{"class":45},[39,92579,92580,92582,92584,92586],{"class":41,"line":2841},[39,92581,91226],{"class":45},[39,92583,50],{"class":49},[39,92585,4090],{"class":45},[39,92587,3760],{"class":49},[39,92589,92590],{"class":41,"line":3635},[39,92591,91237],{"class":102},[39,92593,92594],{"class":41,"line":3649},[39,92595,3245],{"class":45},[39,92597,92598],{"class":41,"line":3657},[39,92599,91246],{"class":102},[39,92601,92602],{"class":41,"line":3662},[39,92603,92604],{"class":102},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[39,92606,92607],{"class":41,"line":3668},[39,92608,92609],{"class":102},"    \u002F\u002F 1.声明一个定时器变量\n",[39,92611,92612],{"class":41,"line":3674},[39,92613,92614],{"class":102},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[39,92616,92617],{"class":41,"line":3679},[39,92618,92619],{"class":102},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[39,92621,92622],{"class":41,"line":9004},[39,92623,92624],{"class":102},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[39,92626,92627],{"class":41,"line":9028},[39,92628,92629],{"class":102},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[39,92631,92632,92634,92637,92639,92641,92643,92645],{"class":41,"line":9033},[39,92633,71138],{"class":49},[39,92635,92636],{"class":3021}," throttle",[39,92638,1221],{"class":45},[39,92640,91691],{"class":254},[39,92642,13491],{"class":45},[39,92644,1918],{"class":254},[39,92646,13498],{"class":45},[39,92648,92649,92651],{"class":41,"line":9039},[39,92650,80826],{"class":49},[39,92652,91704],{"class":45},[39,92654,92655,92657,92659],{"class":41,"line":9066},[39,92656,75036],{"class":49},[39,92658,59972],{"class":49},[39,92660,55506],{"class":45},[39,92662,92663,92665,92667,92669],{"class":41,"line":9071},[39,92664,3555],{"class":49},[39,92666,2716],{"class":45},[39,92668,1438],{"class":49},[39,92670,92671],{"class":45},"timer) {\n",[39,92673,92674,92677,92679,92681,92683,92685],{"class":41,"line":9077},[39,92675,92676],{"class":45},"          timer ",[39,92678,50],{"class":49},[39,92680,91745],{"class":3021},[39,92682,1221],{"class":45},[39,92684,55503],{"class":49},[39,92686,55506],{"class":45},[39,92688,92689,92692],{"class":41,"line":9089},[39,92690,92691],{"class":3021},"            fn",[39,92693,3034],{"class":45},[39,92695,92696],{"class":41,"line":9101},[39,92697,92698],{"class":102},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[39,92700,92701],{"class":41,"line":9113},[39,92702,92703],{"class":102},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[39,92705,92706,92709,92711],{"class":41,"line":10772},[39,92707,92708],{"class":45},"            timer ",[39,92710,50],{"class":49},[39,92712,92713],{"class":56}," null\n",[39,92715,92716],{"class":41,"line":10797},[39,92717,92718],{"class":102},"            \u002F\u002F 不能用clearTimeout(timer)\n",[39,92720,92721],{"class":41,"line":10820},[39,92722,92723],{"class":102},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[39,92725,92726],{"class":41,"line":10844},[39,92727,92728],{"class":45},"          }, t)\n",[39,92730,92731],{"class":41,"line":10849},[39,92732,3587],{"class":45},[39,92734,92735],{"class":41,"line":10854},[39,92736,53452],{"class":45},[39,92738,92739],{"class":41,"line":10859},[39,92740,3245],{"class":45},[39,92742,92743,92745,92747,92749,92751,92753,92755,92757,92759],{"class":41,"line":10868},[39,92744,91261],{"class":45},[39,92746,58867],{"class":3021},[39,92748,1221],{"class":45},[39,92750,91268],{"class":1319},[39,92752,13491],{"class":45},[39,92754,92227],{"class":3021},[39,92756,91277],{"class":45},[39,92758,66128],{"class":56},[39,92760,31552],{"class":45},[39,92762,92763,92765,92767],{"class":41,"line":10873},[39,92764,53471],{"class":45},[39,92766,52867],{"class":52354},[39,92768,52361],{"class":45},[39,92770,92771,92773,92775],{"class":41,"line":10879},[39,92772,52839],{"class":45},[39,92774,52854],{"class":52354},[39,92776,52361],{"class":45},[39,92778,92779],{"class":41,"line":10900},[39,92780,3458],{"emptyLinePlaceholder":1145},[39,92782,92783,92785,92787],{"class":41,"line":10906},[39,92784,52839],{"class":45},[39,92786,51689],{"class":52354},[39,92788,52361],{"class":45},[1188,92790,92792],{"id":92791},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[29,92794,92796],{"className":54121,"code":92795,"language":54123,"meta":34,"style":34},"\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",[36,92797,92798,92806,92814,92819,92824,92829,92834,92838,92846],{"__ignoreMap":34},[39,92799,92800,92802,92804],{"class":41,"line":42},[39,92801,2108],{"class":45},[39,92803,52854],{"class":52354},[39,92805,52361],{"class":45},[39,92807,92808,92810,92812],{"class":41,"line":74},[39,92809,53198],{"class":45},[39,92811,52867],{"class":52354},[39,92813,52361],{"class":45},[39,92815,92816],{"class":41,"line":99},[39,92817,92818],{"class":45},"    let timer = null\n",[39,92820,92821],{"class":41,"line":106},[39,92822,92823],{"class":45},"    timer = setTimeout(() => {\n",[39,92825,92826],{"class":41,"line":112},[39,92827,92828],{"class":45},"      clearTimeout(timer)\n",[39,92830,92831],{"class":41,"line":118},[39,92832,92833],{"class":45},"      console.log(timer)\n",[39,92835,92836],{"class":41,"line":413},[39,92837,61279],{"class":45},[39,92839,92840,92842,92844],{"class":41,"line":419},[39,92841,53471],{"class":45},[39,92843,52867],{"class":52354},[39,92845,52361],{"class":45},[39,92847,92848,92850,92852],{"class":41,"line":425},[39,92849,52839],{"class":45},[39,92851,52854],{"class":52354},[39,92853,52361],{"class":45},[19,92855,92856],{},"输出为1",[19,92858,92859],{},"在开启的定时器里边写清除定时器",[19,92861,92862],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[1188,92864,92866],{"id":92865},"_4174-节流综合案例","4.17.4 节流综合案例",[19,92868,92869],{},"页面打开，可以记录上一次的视频播放位置",[19,92871,92872],{},[269,92873],{"alt":34,"src":92874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,92876,92877],{},[269,92878],{"alt":34,"src":92879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[29,92881,92883],{"className":51687,"code":92882,"language":51689,"meta":34,"style":34},"\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",[36,92884,92885,92895,92909,92913,92921,92935,92955,92975,92997,93010,93018,93024,93034,93044,93054,93058,93062,93069,93082,93094,93098,93102,93112,93124,93138,93142,93146,93153,93163,93176,93188,93198,93208,93224,93236,93240,93244,93252,93262,93274,93284,93294,93304,93308,93312,93322,93333,93337,93345,93353,93357,93365,93380,93395,93410,93431,93439,93447,93462,93484,93492,93507,93533,93559,93585,93593,93601,93620,93628,93633,93652,93657,93675,93680,93685,93693,93698,93712,93720,93725,93742,93746,93751,93773,93777,93785,93793,93797],{"__ignoreMap":34},[39,92886,92887,92889,92891,92893],{"class":41,"line":42},[39,92888,52351],{"class":45},[39,92890,52355],{"class":52354},[39,92892,52358],{"class":3021},[39,92894,52361],{"class":45},[39,92896,92897,92899,92901,92903,92905,92907],{"class":41,"line":74},[39,92898,2108],{"class":45},[39,92900,51689],{"class":52354},[39,92902,52370],{"class":3021},[39,92904,50],{"class":45},[39,92906,52375],{"class":1319},[39,92908,52361],{"class":45},[39,92910,92911],{"class":41,"line":99},[39,92912,3458],{"emptyLinePlaceholder":1145},[39,92914,92915,92917,92919],{"class":41,"line":106},[39,92916,2108],{"class":45},[39,92918,52388],{"class":52354},[39,92920,52361],{"class":45},[39,92922,92923,92925,92927,92929,92931,92933],{"class":41,"line":112},[39,92924,53198],{"class":45},[39,92926,52398],{"class":52354},[39,92928,52401],{"class":3021},[39,92930,50],{"class":45},[39,92932,52406],{"class":1319},[39,92934,60181],{"class":45},[39,92936,92937,92939,92941,92943,92945,92947,92949,92951,92953],{"class":41,"line":118},[39,92938,53198],{"class":45},[39,92940,52398],{"class":52354},[39,92942,52417],{"class":3021},[39,92944,50],{"class":45},[39,92946,52422],{"class":1319},[39,92948,52425],{"class":3021},[39,92950,50],{"class":45},[39,92952,52430],{"class":1319},[39,92954,60181],{"class":45},[39,92956,92957,92959,92961,92963,92965,92967,92969,92971,92973],{"class":41,"line":413},[39,92958,53198],{"class":45},[39,92960,52398],{"class":52354},[39,92962,15976],{"class":3021},[39,92964,50],{"class":45},[39,92966,52445],{"class":1319},[39,92968,52425],{"class":3021},[39,92970,50],{"class":45},[39,92972,52452],{"class":1319},[39,92974,60181],{"class":45},[39,92976,92977,92979,92981,92983,92985,92988,92990,92992,92995],{"class":41,"line":419},[39,92978,53198],{"class":45},[39,92980,52398],{"class":52354},[39,92982,15976],{"class":3021},[39,92984,50],{"class":45},[39,92986,92987],{"class":1319},"\"referrer\"",[39,92989,52425],{"class":3021},[39,92991,50],{"class":45},[39,92993,92994],{"class":1319},"\"never\"",[39,92996,60181],{"class":45},[39,92998,92999,93001,93003,93006,93008],{"class":41,"line":425},[39,93000,53198],{"class":45},[39,93002,52461],{"class":52354},[39,93004,93005],{"class":45},">综合案例\u003C\u002F",[39,93007,52461],{"class":52354},[39,93009,52361],{"class":45},[39,93011,93012,93014,93016],{"class":41,"line":443},[39,93013,53198],{"class":45},[39,93015,1133],{"class":52354},[39,93017,52361],{"class":45},[39,93019,93020,93022],{"class":41,"line":449},[39,93021,7459],{"class":52354},[39,93023,16628],{"class":45},[39,93025,93026,93028,93030,93032],{"class":41,"line":455},[39,93027,55749],{"class":56},[39,93029,52491],{"class":45},[39,93031,260],{"class":56},[39,93033,2359],{"class":45},[39,93035,93036,93038,93040,93042],{"class":41,"line":461},[39,93037,55760],{"class":56},[39,93039,52491],{"class":45},[39,93041,260],{"class":56},[39,93043,2359],{"class":45},[39,93045,93046,93048,93050,93052],{"class":41,"line":475},[39,93047,73650],{"class":56},[39,93049,52491],{"class":45},[39,93051,61559],{"class":56},[39,93053,2359],{"class":45},[39,93055,93056],{"class":41,"line":665},[39,93057,3245],{"class":45},[39,93059,93060],{"class":41,"line":671},[39,93061,3458],{"emptyLinePlaceholder":1145},[39,93063,93064,93067],{"class":41,"line":684},[39,93065,93066],{"class":3021},"    .container",[39,93068,16628],{"class":45},[39,93070,93071,93073,93075,93078,93080],{"class":41,"line":2732},[39,93072,55825],{"class":56},[39,93074,52491],{"class":45},[39,93076,93077],{"class":56},"1200",[39,93079,52546],{"class":49},[39,93081,2359],{"class":45},[39,93083,93084,93086,93088,93090,93092],{"class":41,"line":2737},[39,93085,55760],{"class":56},[39,93087,52491],{"class":45},[39,93089,260],{"class":56},[39,93091,52610],{"class":56},[39,93093,2359],{"class":45},[39,93095,93096],{"class":41,"line":2751},[39,93097,3245],{"class":45},[39,93099,93100],{"class":41,"line":2756},[39,93101,3458],{"emptyLinePlaceholder":1145},[39,93103,93104,93107,93110],{"class":41,"line":2785},[39,93105,93106],{"class":3021},"    .video",[39,93108,93109],{"class":52354}," video",[39,93111,16628],{"class":45},[39,93113,93114,93116,93118,93120,93122],{"class":41,"line":2790},[39,93115,55825],{"class":56},[39,93117,52491],{"class":45},[39,93119,1519],{"class":56},[39,93121,1534],{"class":49},[39,93123,2359],{"class":45},[39,93125,93126,93128,93130,93132,93134,93136],{"class":41,"line":2807},[39,93127,55749],{"class":56},[39,93129,52491],{"class":45},[39,93131,1898],{"class":56},[39,93133,52546],{"class":49},[39,93135,5151],{"class":56},[39,93137,2359],{"class":45},[39,93139,93140],{"class":41,"line":2812},[39,93141,3245],{"class":45},[39,93143,93144],{"class":41,"line":2817},[39,93145,3458],{"emptyLinePlaceholder":1145},[39,93147,93148,93151],{"class":41,"line":2822},[39,93149,93150],{"class":3021},"    .elevator",[39,93152,16628],{"class":45},[39,93154,93155,93157,93159,93161],{"class":41,"line":2836},[39,93156,55813],{"class":56},[39,93158,52491],{"class":45},[39,93160,87287],{"class":56},[39,93162,2359],{"class":45},[39,93164,93165,93167,93169,93172,93174],{"class":41,"line":2841},[39,93166,56001],{"class":56},[39,93168,52491],{"class":45},[39,93170,93171],{"class":56},"280",[39,93173,52546],{"class":49},[39,93175,2359],{"class":45},[39,93177,93178,93180,93182,93184,93186],{"class":41,"line":3635},[39,93179,87481],{"class":56},[39,93181,52491],{"class":45},[39,93183,1898],{"class":56},[39,93185,52546],{"class":49},[39,93187,2359],{"class":45},[39,93189,93190,93192,93194,93196],{"class":41,"line":3649},[39,93191,87294],{"class":56},[39,93193,52491],{"class":45},[39,93195,87299],{"class":56},[39,93197,2359],{"class":45},[39,93199,93200,93202,93204,93206],{"class":41,"line":3657},[39,93201,62775],{"class":56},[39,93203,52491],{"class":45},[39,93205,61896],{"class":56},[39,93207,2359],{"class":45},[39,93209,93210,93212,93214,93216,93218,93220,93222],{"class":41,"line":3662},[39,93211,63031],{"class":56},[39,93213,52491],{"class":45},[39,93215,57],{"class":56},[39,93217,52546],{"class":49},[39,93219,52575],{"class":56},[39,93221,63298],{"class":56},[39,93223,2359],{"class":45},[39,93225,93226,93228,93230,93232,93234],{"class":41,"line":3668},[39,93227,55825],{"class":56},[39,93229,52491],{"class":45},[39,93231,2105],{"class":56},[39,93233,52546],{"class":49},[39,93235,2359],{"class":45},[39,93237,93238],{"class":41,"line":3674},[39,93239,3245],{"class":45},[39,93241,93242],{"class":41,"line":3679},[39,93243,3458],{"emptyLinePlaceholder":1145},[39,93245,93246,93248,93250],{"class":41,"line":9004},[39,93247,93150],{"class":3021},[39,93249,2464],{"class":52354},[39,93251,16628],{"class":45},[39,93253,93254,93256,93258,93260],{"class":41,"line":9028},[39,93255,56063],{"class":56},[39,93257,52491],{"class":45},[39,93259,61923],{"class":56},[39,93261,2359],{"class":45},[39,93263,93264,93266,93268,93270,93272],{"class":41,"line":9033},[39,93265,55749],{"class":56},[39,93267,52491],{"class":45},[39,93269,146],{"class":56},[39,93271,52546],{"class":49},[39,93273,2359],{"class":45},[39,93275,93276,93278,93280,93282],{"class":41,"line":9039},[39,93277,65024],{"class":56},[39,93279,52491],{"class":45},[39,93281,55791],{"class":56},[39,93283,2359],{"class":45},[39,93285,93286,93288,93290,93292],{"class":41,"line":9066},[39,93287,58340],{"class":56},[39,93289,52491],{"class":45},[39,93291,52646],{"class":56},[39,93293,2359],{"class":45},[39,93295,93296,93298,93300,93302],{"class":41,"line":9071},[39,93297,58470],{"class":56},[39,93299,52491],{"class":45},[39,93301,63124],{"class":56},[39,93303,2359],{"class":45},[39,93305,93306],{"class":41,"line":9077},[39,93307,3245],{"class":45},[39,93309,93310],{"class":41,"line":9089},[39,93311,3458],{"emptyLinePlaceholder":1145},[39,93313,93314,93316,93318,93320],{"class":41,"line":9101},[39,93315,93150],{"class":3021},[39,93317,2464],{"class":52354},[39,93319,65078],{"class":3021},[39,93321,16628],{"class":45},[39,93323,93324,93326,93328,93331],{"class":41,"line":9113},[39,93325,58470],{"class":56},[39,93327,52491],{"class":45},[39,93329,93330],{"class":56},"#1286ff",[39,93332,2359],{"class":45},[39,93334,93335],{"class":41,"line":10772},[39,93336,3245],{"class":45},[39,93338,93339,93341,93343],{"class":41,"line":10797},[39,93340,53471],{"class":45},[39,93342,1133],{"class":52354},[39,93344,52361],{"class":45},[39,93346,93347,93349,93351],{"class":41,"line":10820},[39,93348,52839],{"class":45},[39,93350,52388],{"class":52354},[39,93352,52361],{"class":45},[39,93354,93355],{"class":41,"line":10844},[39,93356,3458],{"emptyLinePlaceholder":1145},[39,93358,93359,93361,93363],{"class":41,"line":10849},[39,93360,2108],{"class":45},[39,93362,52854],{"class":52354},[39,93364,52361],{"class":45},[39,93366,93367,93369,93371,93373,93375,93378],{"class":41,"line":10854},[39,93368,53198],{"class":45},[39,93370,52665],{"class":52354},[39,93372,54540],{"class":3021},[39,93374,50],{"class":45},[39,93376,93377],{"class":1319},"\"container\"",[39,93379,52361],{"class":45},[39,93381,93382,93384,93386,93388,93390,93393],{"class":41,"line":10859},[39,93383,52395],{"class":45},[39,93385,52665],{"class":52354},[39,93387,54540],{"class":3021},[39,93389,50],{"class":45},[39,93391,93392],{"class":1319},"\"header\"",[39,93394,52361],{"class":45},[39,93396,93397,93399,93401,93403,93405,93408],{"class":41,"line":10868},[39,93398,56288],{"class":45},[39,93400,46],{"class":52354},[39,93402,62111],{"class":3021},[39,93404,50],{"class":45},[39,93406,93407],{"class":1319},"\"http:\u002F\u002Fpip.itcast.cn\"",[39,93409,52361],{"class":45},[39,93411,93412,93414,93416,93418,93420,93423,93425,93427,93429],{"class":41,"line":10873},[39,93413,56356],{"class":45},[39,93415,269],{"class":52354},[39,93417,56293],{"class":3021},[39,93419,50],{"class":45},[39,93421,93422],{"class":1319},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[39,93424,56301],{"class":3021},[39,93426,50],{"class":45},[39,93428,8708],{"class":1319},[39,93430,60181],{"class":45},[39,93432,93433,93435,93437],{"class":41,"line":10879},[39,93434,56461],{"class":45},[39,93436,46],{"class":52354},[39,93438,52361],{"class":45},[39,93440,93441,93443,93445],{"class":41,"line":10900},[39,93442,52830],{"class":45},[39,93444,52665],{"class":52354},[39,93446,52361],{"class":45},[39,93448,93449,93451,93453,93455,93457,93460],{"class":41,"line":10906},[39,93450,52395],{"class":45},[39,93452,52665],{"class":52354},[39,93454,54540],{"class":3021},[39,93456,50],{"class":45},[39,93458,93459],{"class":1319},"\"video\"",[39,93461,52361],{"class":45},[39,93463,93464,93466,93468,93470,93472,93475,93478,93480,93482],{"class":41,"line":10920},[39,93465,56288],{"class":45},[39,93467,29240],{"class":52354},[39,93469,56293],{"class":3021},[39,93471,50],{"class":45},[39,93473,93474],{"class":1319},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[39,93476,93477],{"class":3021}," controls",[39,93479,56368],{"class":45},[39,93481,29240],{"class":52354},[39,93483,52361],{"class":45},[39,93485,93486,93488,93490],{"class":41,"line":10926},[39,93487,52830],{"class":45},[39,93489,52665],{"class":52354},[39,93491,52361],{"class":45},[39,93493,93494,93496,93498,93500,93502,93505],{"class":41,"line":10953},[39,93495,52395],{"class":45},[39,93497,52665],{"class":52354},[39,93499,54540],{"class":3021},[39,93501,50],{"class":45},[39,93503,93504],{"class":1319},"\"elevator\"",[39,93506,52361],{"class":45},[39,93508,93509,93511,93513,93515,93517,93519,93522,93524,93526,93529,93531],{"class":41,"line":10962},[39,93510,56288],{"class":45},[39,93512,46],{"class":52354},[39,93514,62111],{"class":3021},[39,93516,50],{"class":45},[39,93518,65290],{"class":1319},[39,93520,93521],{"class":3021}," data-ref",[39,93523,50],{"class":45},[39,93525,93459],{"class":1319},[39,93527,93528],{"class":45},">视频介绍\u003C\u002F",[39,93530,46],{"class":52354},[39,93532,52361],{"class":45},[39,93534,93535,93537,93539,93541,93543,93545,93547,93549,93552,93555,93557],{"class":41,"line":10968},[39,93536,56288],{"class":45},[39,93538,46],{"class":52354},[39,93540,62111],{"class":3021},[39,93542,50],{"class":45},[39,93544,65290],{"class":1319},[39,93546,93521],{"class":3021},[39,93548,50],{"class":45},[39,93550,93551],{"class":1319},"\"intro\"",[39,93553,93554],{"class":45},">课程简介\u003C\u002F",[39,93556,46],{"class":52354},[39,93558,52361],{"class":45},[39,93560,93561,93563,93565,93567,93569,93571,93573,93575,93578,93581,93583],{"class":41,"line":10976},[39,93562,56288],{"class":45},[39,93564,46],{"class":52354},[39,93566,62111],{"class":3021},[39,93568,50],{"class":45},[39,93570,65290],{"class":1319},[39,93572,93521],{"class":3021},[39,93574,50],{"class":45},[39,93576,93577],{"class":1319},"\"outline\"",[39,93579,93580],{"class":45},">评论列表\u003C\u002F",[39,93582,46],{"class":52354},[39,93584,52361],{"class":45},[39,93586,93587,93589,93591],{"class":41,"line":10981},[39,93588,52830],{"class":45},[39,93590,52665],{"class":52354},[39,93592,52361],{"class":45},[39,93594,93595,93597,93599],{"class":41,"line":17660},[39,93596,53471],{"class":45},[39,93598,52665],{"class":52354},[39,93600,52361],{"class":45},[39,93602,93603,93605,93607,93609,93611,93614,93616,93618],{"class":41,"line":17666},[39,93604,53198],{"class":45},[39,93606,52867],{"class":52354},[39,93608,56293],{"class":3021},[39,93610,50],{"class":45},[39,93612,93613],{"class":1319},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[39,93615,56368],{"class":45},[39,93617,52867],{"class":52354},[39,93619,52361],{"class":45},[39,93621,93622,93624,93626],{"class":41,"line":17689},[39,93623,53198],{"class":45},[39,93625,52867],{"class":52354},[39,93627,52361],{"class":45},[39,93629,93630],{"class":41,"line":17695},[39,93631,93632],{"class":102},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[39,93634,93635,93637,93639,93641,93643,93645,93647,93650],{"class":41,"line":17718},[39,93636,12277],{"class":49},[39,93638,93109],{"class":56},[39,93640,14620],{"class":49},[39,93642,55450],{"class":45},[39,93644,55453],{"class":3021},[39,93646,1221],{"class":45},[39,93648,93649],{"class":1319},"'video'",[39,93651,209],{"class":45},[39,93653,93654],{"class":41,"line":17732},[39,93655,93656],{"class":102},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[39,93658,93659,93662,93664,93666,93668,93671,93673],{"class":41,"line":17752},[39,93660,93661],{"class":45},"    video.ontimeupdate ",[39,93663,50],{"class":49},[39,93665,89409],{"class":45},[39,93667,92227],{"class":3021},[39,93669,93670],{"class":45},"(() ",[39,93672,85776],{"class":49},[39,93674,16628],{"class":45},[39,93676,93677],{"class":41,"line":17758},[39,93678,93679],{"class":102},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[39,93681,93682],{"class":41,"line":17769},[39,93683,93684],{"class":102},"      \u002F\u002F 控制台输出当前的时间\n",[39,93686,93687,93690],{"class":41,"line":17792},[39,93688,93689],{"class":102},"      \u002F\u002F console.log(video.currentTime)",[39,93691,93692],{"class":102},"  \u002F\u002F获得当前的视频时间\n",[39,93694,93695],{"class":41,"line":17814},[39,93696,93697],{"class":102},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[39,93699,93700,93702,93704,93706,93709],{"class":41,"line":17819},[39,93701,75737],{"class":45},[39,93703,72708],{"class":3021},[39,93705,1221],{"class":45},[39,93707,93708],{"class":1319},"'currentTime'",[39,93710,93711],{"class":45},", video.currentTime)\n",[39,93713,93714,93716,93718],{"class":41,"line":17825},[39,93715,55589],{"class":45},[39,93717,7466],{"class":56},[39,93719,209],{"class":45},[39,93721,93722],{"class":41,"line":17839},[39,93723,93724],{"class":102},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[39,93726,93727,93730,93733,93735,93738,93740],{"class":41,"line":17852},[39,93728,93729],{"class":45},"    video.",[39,93731,93732],{"class":3021},"onloadeddata",[39,93734,14620],{"class":49},[39,93736,93737],{"class":45}," () ",[39,93739,85776],{"class":49},[39,93741,16628],{"class":45},[39,93743,93744],{"class":41,"line":17857},[39,93745,61066],{"class":102},[39,93747,93748],{"class":41,"line":17871},[39,93749,93750],{"class":102},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[39,93752,93753,93756,93758,93761,93763,93765,93767,93769,93771],{"class":41,"line":17876},[39,93754,93755],{"class":45},"      video.currentTime ",[39,93757,50],{"class":49},[39,93759,93760],{"class":45}," localStorage.",[39,93762,72739],{"class":3021},[39,93764,1221],{"class":45},[39,93766,93708],{"class":1319},[39,93768,14770],{"class":45},[39,93770,72411],{"class":49},[39,93772,48388],{"class":56},[39,93774,93775],{"class":41,"line":17882},[39,93776,3245],{"class":45},[39,93778,93779,93781,93783],{"class":41,"line":17887},[39,93780,53471],{"class":45},[39,93782,52867],{"class":52354},[39,93784,52361],{"class":45},[39,93786,93787,93789,93791],{"class":41,"line":17901},[39,93788,52839],{"class":45},[39,93790,52854],{"class":52354},[39,93792,52361],{"class":45},[39,93794,93795],{"class":41,"line":17906},[39,93796,3458],{"emptyLinePlaceholder":1145},[39,93798,93799,93801,93803],{"class":41,"line":17911},[39,93800,52839],{"class":45},[39,93802,51689],{"class":52354},[39,93804,52361],{"class":45},[1133,93806,93807],{},"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":34,"searchDepth":74,"depth":74,"links":93809},[93810,93815,93819,93820,93821,93826,93831,93832,93833,93834,93841,93846,93847,93857,93861,93862,93866],{"id":77745,"depth":74,"text":77746,"children":93811},[93812,93813,93814],{"id":77749,"depth":99,"text":77750},{"id":77774,"depth":99,"text":77775},{"id":77786,"depth":99,"text":77787},{"id":77798,"depth":74,"text":77799,"children":93816},[93817,93818],{"id":77802,"depth":99,"text":77803},{"id":77817,"depth":99,"text":77818},{"id":77869,"depth":74,"text":77870},{"id":77913,"depth":74,"text":77914},{"id":77930,"depth":74,"text":77931,"children":93822},[93823,93824,93825],{"id":77934,"depth":99,"text":77935},{"id":77947,"depth":99,"text":77948},{"id":78052,"depth":99,"text":78053},{"id":78341,"depth":74,"text":78342,"children":93827},[93828,93829,93830],{"id":78345,"depth":99,"text":78346},{"id":78788,"depth":99,"text":78789},{"id":79199,"depth":99,"text":79200},{"id":79262,"depth":74,"text":79263},{"id":79341,"depth":74,"text":79342},{"id":79434,"depth":74,"text":79435},{"id":81279,"depth":74,"text":81280,"children":93835},[93836,93837,93838,93839,93840],{"id":81283,"depth":99,"text":81284},{"id":81295,"depth":99,"text":81296},{"id":81514,"depth":99,"text":81515},{"id":81532,"depth":99,"text":81533},{"id":81592,"depth":99,"text":81593},{"id":85860,"depth":74,"text":85861,"children":93842},[93843,93844,93845],{"id":85864,"depth":99,"text":85865},{"id":85882,"depth":99,"text":85883},{"id":85908,"depth":99,"text":85909},{"id":85917,"depth":74,"text":85918},{"id":85939,"depth":74,"text":85940,"children":93848},[93849,93850,93851,93852,93853,93854,93855,93856],{"id":85943,"depth":99,"text":85944},{"id":86204,"depth":99,"text":86205},{"id":86390,"depth":99,"text":86391},{"id":86757,"depth":99,"text":86758},{"id":86873,"depth":99,"text":86874},{"id":86909,"depth":99,"text":86910},{"id":86956,"depth":99,"text":86957},{"id":86990,"depth":99,"text":86991},{"id":88353,"depth":74,"text":88354,"children":93858},[93859,93860],{"id":88357,"depth":99,"text":88358},{"id":88394,"depth":99,"text":88395},{"id":89749,"depth":74,"text":89750},{"id":90120,"depth":74,"text":90121,"children":93863},[93864,93865],{"id":90124,"depth":99,"text":90125},{"id":90158,"depth":99,"text":90159},{"id":90887,"depth":74,"text":90888,"children":93867},[93868,93869,93870,93871],{"id":90891,"depth":99,"text":90892},{"id":91849,"depth":99,"text":91850},{"id":92791,"depth":99,"text":92792},{"id":92865,"depth":99,"text":92866},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77734,"description":1142},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93878,"title":93879,"body":93880,"description":93891,"extension":1143,"meta":93892,"navigation":1145,"path":93894,"seo":93895,"stem":93896,"__hash__":93897},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93881,"toc":93889},[93882],[19,93883,93884,93885],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[46,93886,93887],{"href":93887,"rel":93888},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24921],{"title":34,"searchDepth":74,"depth":74,"links":93890},[],"三件套第三套学习",{"category":93893},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93879,"description":93891},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93899,"title":93900,"body":93901,"description":1142,"extension":1143,"meta":94006,"navigation":1145,"path":94007,"seo":94008,"stem":94009,"__hash__":94010},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93902,"toc":94001},[93903,93910,93913,93916,93919,93923,93932,93935,93938,93942,93951,93954,93958,93961,93981,93984,93998],[19,93904,93905],{},[46,93906,93909],{"href":93907,"rel":93908},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24921],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93911,93900],{"id":93912},"_1安装",[19,93914,93915],{},"numpy是科学计算基础库,底层是C语言",[19,93917,93918],{},"三种方式：",[14,93920,93922],{"id":93921},"_11-通过pip安装","1.1 通过pip安装",[29,93924,93926],{"className":31,"code":93925,"language":33,"meta":34,"style":34},"pip install numpy\n",[36,93927,93928],{"__ignoreMap":34},[39,93929,93930],{"class":41,"line":42},[39,93931,93925],{"class":45},[19,93933,93934],{},"首选方式，自动处理依赖项",[19,93936,93937],{},"在提示系统命令符中使用cmd",[14,93939,93941],{"id":93940},"_12-通过anaconda安装","1.2 通过Anaconda安装",[29,93943,93945],{"className":31,"code":93944,"language":33,"meta":34,"style":34},"conda install numpy\n",[36,93946,93947],{"__ignoreMap":34},[39,93948,93949],{"class":41,"line":42},[39,93950,93944],{"class":45},[19,93952,93953],{},"自动解决环境依赖",[14,93955,93957],{"id":93956},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93959,93960],{},"对于Debian\u002FUbuntu",[29,93962,93964],{"className":31,"code":93963,"language":33,"meta":34,"style":34},"sudo apt-get install python3-numpy\n",[36,93965,93966],{"__ignoreMap":34},[39,93967,93968,93971,93973,93976,93978],{"class":41,"line":42},[39,93969,93970],{"class":45},"sudo apt",[39,93972,1732],{"class":49},[39,93974,93975],{"class":45},"get install python3",[39,93977,1732],{"class":49},[39,93979,93980],{"class":45},"numpy\n",[19,93982,93983],{},"对于Fedora:",[29,93985,93987],{"className":31,"code":93986,"language":33,"meta":34,"style":34},"sudo dnf install python3-numpy\n",[36,93988,93989],{"__ignoreMap":34},[39,93990,93991,93994,93996],{"class":41,"line":42},[39,93992,93993],{"class":45},"sudo dnf install python3",[39,93995,1732],{"class":49},[39,93997,93980],{"class":45},[1133,93999,94000],{},"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":34,"searchDepth":74,"depth":74,"links":94002},[94003,94004,94005],{"id":93921,"depth":74,"text":93922},{"id":93940,"depth":74,"text":93941},{"id":93956,"depth":74,"text":93957},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93900,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94012,"title":94013,"body":94014,"description":1142,"extension":1143,"meta":94124,"navigation":1145,"path":94125,"seo":94126,"stem":94127,"__hash__":94128},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94015,"toc":94122},[94016,94019,94022,94025,94028,94031,94034,94037,94040,94043,94116,94119],[10,94017,94013],{"id":94018},"_10算数函数",[19,94020,94021],{},"加减乘除运算跟python基础语法没区别",[19,94023,94024],{},"除了python那种方法外还可以使用函数",[19,94026,94027],{},"加：np.add(a,b)",[19,94029,94030],{},"减：np.subtract(a,b)",[19,94032,94033],{},"乘：np.multiply(a,b)",[19,94035,94036],{},"除：np.divide(a,b) == a\u002Fb",[19,94038,94039],{},"取余：np.mod(a,b) == a%b",[19,94041,94042],{},"必须会的用法：",[29,94044,94046],{"className":31,"code":94045,"language":33,"meta":34,"style":34},"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",[36,94047,94048,94068,94088,94098,94111],{"__ignoreMap":34},[39,94049,94050,94052,94054,94056,94058,94060,94062,94064,94066],{"class":41,"line":42},[39,94051,46],{"class":45},[39,94053,50],{"class":49},[39,94055,191],{"class":45},[39,94057,1623],{"class":56},[39,94059,200],{"class":45},[39,94061,68],{"class":56},[39,94063,60],{"class":45},[39,94065,68],{"class":56},[39,94067,209],{"class":45},[39,94069,94070,94072,94074,94076,94078,94080,94082,94084,94086],{"class":41,"line":74},[39,94071,77],{"class":45},[39,94073,50],{"class":49},[39,94075,53],{"class":45},[39,94077,146],{"class":56},[39,94079,60],{"class":45},[39,94081,146],{"class":56},[39,94083,60],{"class":45},[39,94085,146],{"class":56},[39,94087,71],{"class":45},[39,94089,94090,94093,94095],{"class":41,"line":99},[39,94091,94092],{"class":45},"result",[39,94094,50],{"class":49},[39,94096,94097],{"class":45},"np.empty_like(a)\n",[39,94099,94100,94103,94106,94108],{"class":41,"line":106},[39,94101,94102],{"class":45},"np.add(a,b,",[39,94104,94105],{"class":254},"out",[39,94107,50],{"class":49},[39,94109,94110],{"class":45},"result)\n",[39,94112,94113],{"class":41,"line":112},[39,94114,94115],{"class":45},"result\n",[19,94117,94118],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1133,94120,94121],{},"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":34,"searchDepth":74,"depth":74,"links":94123},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94013,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94130,"title":94131,"body":94132,"description":1142,"extension":1143,"meta":94893,"navigation":1145,"path":94894,"seo":94895,"stem":94896,"__hash__":94897},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94133,"toc":94880},[94134,94137,94140,94143,94147,94186,94190,94234,94294,94298,94301,94340,94343,94387,94391,94427,94431,94500,94504,94568,94572,94575,94578,94581,94584,94620,94624,94664,94668,94740,94743,94747,94810,94814,94877],[10,94135,94131],{"id":94136},"_11统计函数",[19,94138,94139],{},"sum max min mean",[19,94141,94142],{},"这些有axis参数，可以指定方向",[14,94144,94146],{"id":94145},"_111-sum求和函数","11.1 sum()求和函数",[29,94148,94150],{"className":31,"code":94149,"language":33,"meta":34,"style":34},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[36,94151,94152,94157,94178],{"__ignoreMap":34},[39,94153,94154],{"class":41,"line":42},[39,94155,94156],{"class":102},"#创建一维数组\n",[39,94158,94159,94161,94163,94166,94168,94170,94172,94174,94176],{"class":41,"line":74},[39,94160,46],{"class":45},[39,94162,50],{"class":49},[39,94164,94165],{"class":45},"np.random.randint(",[39,94167,57],{"class":56},[39,94169,60],{"class":45},[39,94171,1519],{"class":56},[39,94173,60],{"class":45},[39,94175,1898],{"class":56},[39,94177,209],{"class":45},[39,94179,94180,94183],{"class":41,"line":99},[39,94181,94182],{"class":45},"np.sum(a)",[39,94184,94185],{"class":102},"#求和\n",[14,94187,94189],{"id":94188},"_112-max求最大值函数","11.2 max()求最大值函数",[29,94191,94193],{"className":31,"code":94192,"language":33,"meta":34,"style":34},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[36,94194,94195,94199,94219,94224,94229],{"__ignoreMap":34},[39,94196,94197],{"class":41,"line":42},[39,94198,94156],{"class":102},[39,94200,94201,94203,94205,94207,94209,94211,94213,94215,94217],{"class":41,"line":74},[39,94202,46],{"class":45},[39,94204,50],{"class":49},[39,94206,94165],{"class":45},[39,94208,57],{"class":56},[39,94210,60],{"class":45},[39,94212,1519],{"class":56},[39,94214,60],{"class":45},[39,94216,1898],{"class":56},[39,94218,209],{"class":45},[39,94220,94221],{"class":41,"line":99},[39,94222,94223],{"class":45},"np.max(a)\n",[39,94225,94226],{"class":41,"line":106},[39,94227,94228],{"class":102},"#最大索引(求最大元素的索引)arg\n",[39,94230,94231],{"class":41,"line":112},[39,94232,94233],{"class":45},"np.argmax(a)\n",[29,94235,94237],{"className":31,"code":94236,"language":33,"meta":34,"style":34},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[36,94238,94239,94260,94280,94284],{"__ignoreMap":34},[39,94240,94241,94243,94245,94248,94250,94252,94254,94256,94258],{"class":41,"line":42},[39,94242,11975],{"class":45},[39,94244,50],{"class":49},[39,94246,94247],{"class":45}," np.array([",[39,94249,57],{"class":56},[39,94251,13491],{"class":45},[39,94253,89],{"class":56},[39,94255,13491],{"class":45},[39,94257,68],{"class":56},[39,94259,71],{"class":45},[39,94261,94262,94264,94266,94268,94270,94272,94274,94276,94278],{"class":41,"line":74},[39,94263,12001],{"class":45},[39,94265,50],{"class":49},[39,94267,94247],{"class":45},[39,94269,68],{"class":56},[39,94271,13491],{"class":45},[39,94273,63],{"class":56},[39,94275,13491],{"class":45},[39,94277,84],{"class":56},[39,94279,71],{"class":45},[39,94281,94282],{"class":41,"line":99},[39,94283,3458],{"emptyLinePlaceholder":1145},[39,94285,94286,94288,94291],{"class":41,"line":106},[39,94287,31470],{"class":56},[39,94289,94290],{"class":45},"(np.maximum(a, b))   ",[39,94292,94293],{"class":102},"# [3 5 4]，每个位置上取较大值\n",[14,94295,94297],{"id":94296},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,94299,94300],{},"①一维数组：",[29,94302,94304],{"className":31,"code":94303,"language":33,"meta":34,"style":34},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[36,94305,94306,94310,94330,94335],{"__ignoreMap":34},[39,94307,94308],{"class":41,"line":42},[39,94309,94156],{"class":102},[39,94311,94312,94314,94316,94318,94320,94322,94324,94326,94328],{"class":41,"line":74},[39,94313,46],{"class":45},[39,94315,50],{"class":49},[39,94317,94165],{"class":45},[39,94319,57],{"class":56},[39,94321,60],{"class":45},[39,94323,1519],{"class":56},[39,94325,60],{"class":45},[39,94327,1898],{"class":56},[39,94329,209],{"class":45},[39,94331,94332],{"class":41,"line":99},[39,94333,94334],{"class":102},"#求平均值\n",[39,94336,94337],{"class":41,"line":106},[39,94338,94339],{"class":45},"np.mean(a)\n",[19,94341,94342],{},"②二维数组",[29,94344,94346],{"className":31,"code":94345,"language":33,"meta":34,"style":34},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[36,94347,94348,94353,94377,94382],{"__ignoreMap":34},[39,94349,94350],{"class":41,"line":42},[39,94351,94352],{"class":102},"#二维数组\n",[39,94354,94355,94357,94359,94361,94363,94365,94367,94369,94371,94373,94375],{"class":41,"line":74},[39,94356,186],{"class":45},[39,94358,50],{"class":49},[39,94360,191],{"class":45},[39,94362,57],{"class":56},[39,94364,60],{"class":45},[39,94366,156],{"class":56},[39,94368,200],{"class":45},[39,94370,68],{"class":56},[39,94372,60],{"class":45},[39,94374,84],{"class":56},[39,94376,209],{"class":45},[39,94378,94379],{"class":41,"line":99},[39,94380,94381],{"class":102},"#对数组中的所有数求平均\n",[39,94383,94384],{"class":41,"line":106},[39,94385,94386],{"class":45},"np.mean(aa)\n",[14,94388,94390],{"id":94389},"_114-median求中位数函数","11.4 median()求中位数函数",[29,94392,94394],{"className":31,"code":94393,"language":33,"meta":34,"style":34},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[36,94395,94396,94401,94417,94422],{"__ignoreMap":34},[39,94397,94398],{"class":41,"line":42},[39,94399,94400],{"class":102},"#求中位数\n",[39,94402,94403,94405,94407,94409,94411,94413,94415],{"class":41,"line":74},[39,94404,77],{"class":45},[39,94406,50],{"class":49},[39,94408,191],{"class":45},[39,94410,57],{"class":56},[39,94412,60],{"class":45},[39,94414,146],{"class":56},[39,94416,209],{"class":45},[39,94418,94419],{"class":41,"line":99},[39,94420,94421],{"class":45},"np.median(b)\n",[39,94423,94424],{"class":41,"line":106},[39,94425,94426],{"class":102},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,94428,94430],{"id":94429},"_115-power求幂运算函数","11.5 power()求幂运算函数",[29,94432,94434],{"className":31,"code":94433,"language":33,"meta":34,"style":34},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[36,94435,94436,94452,94457,94462,94471,94476,94485],{"__ignoreMap":34},[39,94437,94438,94440,94442,94444,94446,94448,94450],{"class":41,"line":42},[39,94439,77],{"class":45},[39,94441,50],{"class":49},[39,94443,191],{"class":45},[39,94445,57],{"class":56},[39,94447,60],{"class":45},[39,94449,146],{"class":56},[39,94451,209],{"class":45},[39,94453,94454],{"class":41,"line":74},[39,94455,94456],{"class":102},"#幂运算\n",[39,94458,94459],{"class":41,"line":99},[39,94460,94461],{"class":102},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[39,94463,94464,94467,94469],{"class":41,"line":106},[39,94465,94466],{"class":45},"np.power(b,",[39,94468,63],{"class":56},[39,94470,209],{"class":45},[39,94472,94473],{"class":41,"line":112},[39,94474,94475],{"class":102},"#或者以下代码，将数据存储起来\n",[39,94477,94478,94480,94482],{"class":41,"line":118},[39,94479,2043],{"class":45},[39,94481,50],{"class":49},[39,94483,94484],{"class":45},"np.empty_like(b)\n",[39,94486,94487,94489,94491,94493,94495,94497],{"class":41,"line":413},[39,94488,94466],{"class":45},[39,94490,63],{"class":56},[39,94492,60],{"class":45},[39,94494,94105],{"class":254},[39,94496,50],{"class":49},[39,94498,94499],{"class":45},"y)\n",[14,94501,94503],{"id":94502},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[29,94505,94507],{"className":31,"code":94506,"language":33,"meta":34,"style":34},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[36,94508,94509,94525,94530,94535,94539,94557],{"__ignoreMap":34},[39,94510,94511,94513,94515,94517,94519,94521,94523],{"class":41,"line":42},[39,94512,77],{"class":45},[39,94514,50],{"class":49},[39,94516,191],{"class":45},[39,94518,57],{"class":56},[39,94520,60],{"class":45},[39,94522,146],{"class":56},[39,94524,209],{"class":45},[39,94526,94527],{"class":41,"line":74},[39,94528,94529],{"class":102},"#开方\n",[39,94531,94532],{"class":41,"line":99},[39,94533,94534],{"class":45},"np.sqrt(b)\n",[39,94536,94537],{"class":41,"line":106},[39,94538,94475],{"class":102},[39,94540,94541,94543,94545,94548,94551,94553,94555],{"class":41,"line":112},[39,94542,2043],{"class":45},[39,94544,50],{"class":49},[39,94546,94547],{"class":45},"np.empty_like(b,",[39,94549,94550],{"class":254},"dtype",[39,94552,50],{"class":49},[39,94554,1259],{"class":56},[39,94556,209],{"class":45},[39,94558,94559,94562,94564,94566],{"class":41,"line":118},[39,94560,94561],{"class":45},"np.sqrt(b,",[39,94563,94105],{"class":254},[39,94565,50],{"class":49},[39,94567,94499],{"class":45},[14,94569,94571],{"id":94570},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,94573,94574],{},"对数组中的元素累计求和，可指定轴",[19,94576,94577],{},"#累计求和的意思是：",[19,94579,94580],{},"a = np.array([1, 2, 3, 4])",[19,94582,94583],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[29,94585,94587],{"className":31,"code":94586,"language":33,"meta":34,"style":34},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[36,94588,94589,94605,94610,94615],{"__ignoreMap":34},[39,94590,94591,94593,94595,94597,94599,94601,94603],{"class":41,"line":42},[39,94592,77],{"class":45},[39,94594,50],{"class":49},[39,94596,191],{"class":45},[39,94598,57],{"class":56},[39,94600,60],{"class":45},[39,94602,146],{"class":56},[39,94604,209],{"class":45},[39,94606,94607],{"class":41,"line":74},[39,94608,94609],{"class":45},"np.cumsum(b)\n",[39,94611,94612],{"class":41,"line":99},[39,94613,94614],{"class":102},"#结果：\n",[39,94616,94617],{"class":41,"line":106},[39,94618,94619],{"class":102},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,94621,94623],{"id":94622},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[29,94625,94627],{"className":31,"code":94626,"language":33,"meta":34,"style":34},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[36,94628,94629,94645,94650,94655,94659],{"__ignoreMap":34},[39,94630,94631,94633,94635,94637,94639,94641,94643],{"class":41,"line":42},[39,94632,77],{"class":45},[39,94634,50],{"class":49},[39,94636,191],{"class":45},[39,94638,57],{"class":56},[39,94640,60],{"class":45},[39,94642,146],{"class":56},[39,94644,209],{"class":45},[39,94646,94647],{"class":41,"line":74},[39,94648,94649],{"class":102},"#对数组中的元素累计求积，可指定轴\n",[39,94651,94652],{"class":41,"line":99},[39,94653,94654],{"class":45},"np.cumprod(b)\n",[39,94656,94657],{"class":41,"line":106},[39,94658,94614],{"class":102},[39,94660,94661],{"class":41,"line":112},[39,94662,94663],{"class":102},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,94665,94667],{"id":94666},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[29,94669,94671],{"className":31,"code":94670,"language":33,"meta":34,"style":34},"#删除数组中的重复数据，并对数据进行排序\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",[36,94672,94673,94678,94726,94731,94735],{"__ignoreMap":34},[39,94674,94675],{"class":41,"line":42},[39,94676,94677],{"class":102},"#删除数组中的重复数据，并对数据进行排序\n",[39,94679,94680,94682,94684,94686,94688,94690,94692,94694,94696,94698,94700,94702,94704,94706,94708,94710,94712,94714,94716,94718,94720,94722,94724],{"class":41,"line":74},[39,94681,46],{"class":45},[39,94683,50],{"class":49},[39,94685,53],{"class":45},[39,94687,57],{"class":56},[39,94689,60],{"class":45},[39,94691,63],{"class":56},[39,94693,60],{"class":45},[39,94695,68],{"class":56},[39,94697,60],{"class":45},[39,94699,1699],{"class":56},[39,94701,60],{"class":45},[39,94703,68],{"class":56},[39,94705,60],{"class":45},[39,94707,146],{"class":56},[39,94709,60],{"class":45},[39,94711,1410],{"class":56},[39,94713,60],{"class":45},[39,94715,260],{"class":56},[39,94717,60],{"class":45},[39,94719,1973],{"class":56},[39,94721,60],{"class":45},[39,94723,84],{"class":56},[39,94725,71],{"class":45},[39,94727,94728],{"class":41,"line":99},[39,94729,94730],{"class":45},"np.unique(a)\n",[39,94732,94733],{"class":41,"line":106},[39,94734,94614],{"class":102},[39,94736,94737],{"class":41,"line":112},[39,94738,94739],{"class":102},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,94741,94742],{},"升序形式排序",[14,94744,94746],{"id":94745},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[29,94748,94750],{"className":31,"code":94749,"language":33,"meta":34,"style":34},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[36,94751,94752,94800,94805],{"__ignoreMap":34},[39,94753,94754,94756,94758,94760,94762,94764,94766,94768,94770,94772,94774,94776,94778,94780,94782,94784,94786,94788,94790,94792,94794,94796,94798],{"class":41,"line":42},[39,94755,46],{"class":45},[39,94757,50],{"class":49},[39,94759,53],{"class":45},[39,94761,57],{"class":56},[39,94763,60],{"class":45},[39,94765,63],{"class":56},[39,94767,60],{"class":45},[39,94769,68],{"class":56},[39,94771,60],{"class":45},[39,94773,1699],{"class":56},[39,94775,60],{"class":45},[39,94777,68],{"class":56},[39,94779,60],{"class":45},[39,94781,146],{"class":56},[39,94783,60],{"class":45},[39,94785,1410],{"class":56},[39,94787,60],{"class":45},[39,94789,260],{"class":56},[39,94791,60],{"class":45},[39,94793,1973],{"class":56},[39,94795,60],{"class":45},[39,94797,84],{"class":56},[39,94799,71],{"class":45},[39,94801,94802],{"class":41,"line":74},[39,94803,94804],{"class":102},"#返回数组中非零元素的索引\n",[39,94806,94807],{"class":41,"line":99},[39,94808,94809],{"class":45},"np.nonzero(a)\n",[14,94811,94813],{"id":94812},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[29,94815,94817],{"className":31,"code":94816,"language":33,"meta":34,"style":34},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[36,94818,94819,94867,94872],{"__ignoreMap":34},[39,94820,94821,94823,94825,94827,94829,94831,94833,94835,94837,94839,94841,94843,94845,94847,94849,94851,94853,94855,94857,94859,94861,94863,94865],{"class":41,"line":42},[39,94822,46],{"class":45},[39,94824,50],{"class":49},[39,94826,53],{"class":45},[39,94828,57],{"class":56},[39,94830,60],{"class":45},[39,94832,63],{"class":56},[39,94834,60],{"class":45},[39,94836,68],{"class":56},[39,94838,60],{"class":45},[39,94840,1699],{"class":56},[39,94842,60],{"class":45},[39,94844,68],{"class":56},[39,94846,60],{"class":45},[39,94848,146],{"class":56},[39,94850,60],{"class":45},[39,94852,1410],{"class":56},[39,94854,60],{"class":45},[39,94856,260],{"class":56},[39,94858,60],{"class":45},[39,94860,1973],{"class":56},[39,94862,60],{"class":45},[39,94864,84],{"class":56},[39,94866,71],{"class":45},[39,94868,94869],{"class":41,"line":74},[39,94870,94871],{"class":102},"#计算一组数中最大值与最小值的差，可指定轴\n",[39,94873,94874],{"class":41,"line":99},[39,94875,94876],{"class":45},"np.ptp(a)\n",[1133,94878,94879],{},"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":34,"searchDepth":74,"depth":74,"links":94881},[94882,94883,94884,94885,94886,94887,94888,94889,94890,94891,94892],{"id":94145,"depth":74,"text":94146},{"id":94188,"depth":74,"text":94189},{"id":94296,"depth":74,"text":94297},{"id":94389,"depth":74,"text":94390},{"id":94429,"depth":74,"text":94430},{"id":94502,"depth":74,"text":94503},{"id":94570,"depth":74,"text":94571},{"id":94622,"depth":74,"text":94623},{"id":94666,"depth":74,"text":94667},{"id":94745,"depth":74,"text":94746},{"id":94812,"depth":74,"text":94813},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94131,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94899,"title":94900,"body":94901,"description":1142,"extension":1143,"meta":95556,"navigation":1145,"path":95557,"seo":95558,"stem":95559,"__hash__":95560},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94902,"toc":95544},[94903,94906,94910,94913,95129,95133,95136,95345,95349,95415,95420,95424,95427,95430,95468,95472,95475,95480,95484,95487,95490,95495,95499,95502,95506,95509,95512,95517,95521,95524,95527,95532,95536,95541],[10,94904,94900],{"id":94905},"_12其他常用函数",[14,94907,94909],{"id":94908},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,94911,94912],{},"将数组的数据按照行列复制扩展",[29,94914,94916],{"className":31,"code":94915,"language":33,"meta":34,"style":34},"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",[36,94917,94918,94934,94943,94947,94952,94957,94970,94974,94979,94984,94989,94993,94998,95022,95034,95038,95042,95047,95052,95057,95062,95066,95079,95083,95087,95092,95097,95102,95107,95112,95116,95120,95125],{"__ignoreMap":34},[39,94919,94920,94922,94924,94926,94928,94930,94932],{"class":41,"line":42},[39,94921,46],{"class":45},[39,94923,50],{"class":49},[39,94925,191],{"class":45},[39,94927,57],{"class":56},[39,94929,60],{"class":45},[39,94931,89],{"class":56},[39,94933,209],{"class":45},[39,94935,94936,94939,94941],{"class":41,"line":74},[39,94937,94938],{"class":45},"np.tile(a,",[39,94940,63],{"class":56},[39,94942,209],{"class":45},[39,94944,94945],{"class":41,"line":99},[39,94946,94614],{"class":102},[39,94948,94949],{"class":41,"line":106},[39,94950,94951],{"class":102},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[39,94953,94954],{"class":41,"line":112},[39,94955,94956],{"class":102},"#行复制两次，列复制三次\n",[39,94958,94959,94962,94964,94966,94968],{"class":41,"line":118},[39,94960,94961],{"class":45},"np.tile(a,(",[39,94963,63],{"class":56},[39,94965,60],{"class":45},[39,94967,68],{"class":56},[39,94969,31552],{"class":45},[39,94971,94972],{"class":41,"line":413},[39,94973,94614],{"class":102},[39,94975,94976],{"class":41,"line":419},[39,94977,94978],{"class":1319},"'''\n",[39,94980,94981],{"class":41,"line":425},[39,94982,94983],{"class":1319},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[39,94985,94986],{"class":41,"line":443},[39,94987,94988],{"class":1319},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[39,94990,94991],{"class":41,"line":449},[39,94992,94978],{"class":1319},[39,94994,94995],{"class":41,"line":455},[39,94996,94997],{"class":102},"#创建二维数组\n",[39,94999,95000,95002,95004,95006,95008,95010,95012,95014,95016,95018,95020],{"class":41,"line":461},[39,95001,186],{"class":45},[39,95003,50],{"class":49},[39,95005,191],{"class":45},[39,95007,57],{"class":56},[39,95009,60],{"class":45},[39,95011,156],{"class":56},[39,95013,200],{"class":45},[39,95015,84],{"class":56},[39,95017,60],{"class":45},[39,95019,68],{"class":56},[39,95021,209],{"class":45},[39,95023,95024,95027,95029,95031],{"class":41,"line":475},[39,95025,95026],{"class":45},"np.tile(aa,",[39,95028,63],{"class":56},[39,95030,1632],{"class":45},[39,95032,95033],{"class":102},"#一个数的时候就是行\n",[39,95035,95036],{"class":41,"line":665},[39,95037,94614],{"class":102},[39,95039,95040],{"class":41,"line":671},[39,95041,94978],{"class":1319},[39,95043,95044],{"class":41,"line":684},[39,95045,95046],{"class":1319},"array([[ 1,  2,  3,  1,  2,  3],\n",[39,95048,95049],{"class":41,"line":2732},[39,95050,95051],{"class":1319},"       [ 4,  5,  6,  4,  5,  6],\n",[39,95053,95054],{"class":41,"line":2737},[39,95055,95056],{"class":1319},"       [ 7,  8,  9,  7,  8,  9],\n",[39,95058,95059],{"class":41,"line":2751},[39,95060,95061],{"class":1319},"       [10, 11, 12, 10, 11, 12]])\n",[39,95063,95064],{"class":41,"line":2756},[39,95065,94978],{"class":1319},[39,95067,95068,95071,95073,95075,95077],{"class":41,"line":2785},[39,95069,95070],{"class":45},"np.tile(aa,(",[39,95072,63],{"class":56},[39,95074,60],{"class":45},[39,95076,68],{"class":56},[39,95078,31552],{"class":45},[39,95080,95081],{"class":41,"line":2790},[39,95082,94614],{"class":102},[39,95084,95085],{"class":41,"line":2807},[39,95086,94978],{"class":1319},[39,95088,95089],{"class":41,"line":2812},[39,95090,95091],{"class":1319},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[39,95093,95094],{"class":41,"line":2817},[39,95095,95096],{"class":1319},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[39,95098,95099],{"class":41,"line":2822},[39,95100,95101],{"class":1319},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[39,95103,95104],{"class":41,"line":2836},[39,95105,95106],{"class":1319},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[39,95108,95109],{"class":41,"line":2841},[39,95110,95111],{"class":1319},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[39,95113,95114],{"class":41,"line":3635},[39,95115,95096],{"class":1319},[39,95117,95118],{"class":41,"line":3649},[39,95119,95101],{"class":1319},[39,95121,95122],{"class":41,"line":3657},[39,95123,95124],{"class":1319},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[39,95126,95127],{"class":41,"line":3662},[39,95128,94978],{"class":1319},[14,95130,95132],{"id":95131},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,95134,95135],{},"repeat()将数组中的每个元素重复若干次",[29,95137,95139],{"className":31,"code":95138,"language":33,"meta":34,"style":34},"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",[36,95140,95141,95157,95166,95170,95175,95199,95204,95213,95217,95222,95226,95231,95247,95251,95255,95260,95265,95270,95274,95279,95283,95288,95293,95297,95313,95317,95321,95326,95331,95336,95341],{"__ignoreMap":34},[39,95142,95143,95145,95147,95149,95151,95153,95155],{"class":41,"line":42},[39,95144,46],{"class":45},[39,95146,50],{"class":49},[39,95148,191],{"class":45},[39,95150,57],{"class":56},[39,95152,60],{"class":45},[39,95154,89],{"class":56},[39,95156,209],{"class":45},[39,95158,95159,95162,95164],{"class":41,"line":74},[39,95160,95161],{"class":45},"np.repeat(a,",[39,95163,68],{"class":56},[39,95165,209],{"class":45},[39,95167,95168],{"class":41,"line":99},[39,95169,94614],{"class":102},[39,95171,95172],{"class":41,"line":106},[39,95173,95174],{"class":102},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[39,95176,95177,95179,95181,95183,95185,95187,95189,95191,95193,95195,95197],{"class":41,"line":112},[39,95178,186],{"class":45},[39,95180,50],{"class":49},[39,95182,191],{"class":45},[39,95184,57],{"class":56},[39,95186,60],{"class":45},[39,95188,156],{"class":56},[39,95190,200],{"class":45},[39,95192,84],{"class":56},[39,95194,60],{"class":45},[39,95196,68],{"class":56},[39,95198,209],{"class":45},[39,95200,95201],{"class":41,"line":118},[39,95202,95203],{"class":102},"#这个重复之后二维变成一维\n",[39,95205,95206,95209,95211],{"class":41,"line":413},[39,95207,95208],{"class":45},"np.repeat(aa,",[39,95210,63],{"class":56},[39,95212,209],{"class":45},[39,95214,95215],{"class":41,"line":419},[39,95216,94978],{"class":1319},[39,95218,95219],{"class":41,"line":425},[39,95220,95221],{"class":1319},"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",[39,95223,95224],{"class":41,"line":443},[39,95225,94978],{"class":1319},[39,95227,95228],{"class":41,"line":449},[39,95229,95230],{"class":102},"#指定axis\n",[39,95232,95233,95235,95237,95239,95241,95243,95245],{"class":41,"line":455},[39,95234,95208],{"class":45},[39,95236,63],{"class":56},[39,95238,60],{"class":45},[39,95240,255],{"class":254},[39,95242,50],{"class":49},[39,95244,260],{"class":56},[39,95246,209],{"class":45},[39,95248,95249],{"class":41,"line":461},[39,95250,94614],{"class":102},[39,95252,95253],{"class":41,"line":475},[39,95254,94978],{"class":1319},[39,95256,95257],{"class":41,"line":665},[39,95258,95259],{"class":1319},"array([[ 1,  2,  3],\n",[39,95261,95262],{"class":41,"line":671},[39,95263,95264],{"class":1319},"       [ 1,  2,  3],\n",[39,95266,95267],{"class":41,"line":684},[39,95268,95269],{"class":1319},"       [ 4,  5,  6],\n",[39,95271,95272],{"class":41,"line":2732},[39,95273,95269],{"class":1319},[39,95275,95276],{"class":41,"line":2737},[39,95277,95278],{"class":1319},"       [ 7,  8,  9],\n",[39,95280,95281],{"class":41,"line":2751},[39,95282,95278],{"class":1319},[39,95284,95285],{"class":41,"line":2756},[39,95286,95287],{"class":1319},"       [10, 11, 12],\n",[39,95289,95290],{"class":41,"line":2785},[39,95291,95292],{"class":1319},"       [10, 11, 12]])\n",[39,95294,95295],{"class":41,"line":2790},[39,95296,94978],{"class":1319},[39,95298,95299,95301,95303,95305,95307,95309,95311],{"class":41,"line":2807},[39,95300,95208],{"class":45},[39,95302,63],{"class":56},[39,95304,60],{"class":45},[39,95306,255],{"class":254},[39,95308,50],{"class":49},[39,95310,57],{"class":56},[39,95312,209],{"class":45},[39,95314,95315],{"class":41,"line":2812},[39,95316,94614],{"class":102},[39,95318,95319],{"class":41,"line":2817},[39,95320,94978],{"class":1319},[39,95322,95323],{"class":41,"line":2822},[39,95324,95325],{"class":1319},"array([[ 1,  1,  2,  2,  3,  3],\n",[39,95327,95328],{"class":41,"line":2836},[39,95329,95330],{"class":1319},"       [ 4,  4,  5,  5,  6,  6],\n",[39,95332,95333],{"class":41,"line":2841},[39,95334,95335],{"class":1319},"       [ 7,  7,  8,  8,  9,  9],\n",[39,95337,95338],{"class":41,"line":3635},[39,95339,95340],{"class":1319},"       [10, 10, 11, 11, 12, 12]])\n",[39,95342,95343],{"class":41,"line":3649},[39,95344,94978],{"class":1319},[14,95346,95348],{"id":95347},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[29,95350,95352],{"className":31,"code":95351,"language":33,"meta":34,"style":34},"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",[36,95353,95354,95370,95375,95387,95391,95396,95406,95410],{"__ignoreMap":34},[39,95355,95356,95358,95360,95362,95364,95366,95368],{"class":41,"line":42},[39,95357,46],{"class":45},[39,95359,50],{"class":49},[39,95361,191],{"class":45},[39,95363,57],{"class":56},[39,95365,60],{"class":45},[39,95367,89],{"class":56},[39,95369,209],{"class":45},[39,95371,95372],{"class":41,"line":74},[39,95373,95374],{"class":102},"#array([，2，3，4])\n",[39,95376,95377,95380,95382,95384],{"class":41,"line":99},[39,95378,95379],{"class":45},"np.roll(a,",[39,95381,63],{"class":56},[39,95383,1632],{"class":45},[39,95385,95386],{"class":102},"#传正数向后调多少位，传负数向前调多少位\n",[39,95388,95389],{"class":41,"line":106},[39,95390,94614],{"class":102},[39,95392,95393],{"class":41,"line":112},[39,95394,95395],{"class":102},"#array([3, 4, 1, 2])\n",[39,95397,95398,95400,95402,95404],{"class":41,"line":118},[39,95399,95379],{"class":45},[39,95401,1732],{"class":49},[39,95403,57],{"class":56},[39,95405,209],{"class":45},[39,95407,95408],{"class":41,"line":413},[39,95409,94614],{"class":102},[39,95411,95412],{"class":41,"line":419},[39,95413,95414],{"class":102},"#array([2, 3, 4, 1])\n",[19,95416,95417],{},[269,95418],{"alt":34,"src":95419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,95421,95423],{"id":95422},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,95425,95426],{},"resize()重新调整数组的大小",[19,95428,95429],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[29,95431,95433],{"className":31,"code":95432,"language":33,"meta":34,"style":34},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[36,95434,95435,95440,95453],{"__ignoreMap":34},[39,95436,95437],{"class":41,"line":42},[39,95438,95439],{"class":102},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[39,95441,95442,95445,95447,95449,95451],{"class":41,"line":74},[39,95443,95444],{"class":45},"np.resize(aa,(",[39,95446,63],{"class":56},[39,95448,60],{"class":45},[39,95450,94],{"class":56},[39,95452,31552],{"class":45},[39,95454,95455,95457,95459,95461,95463,95465],{"class":41,"line":99},[39,95456,95444],{"class":45},[39,95458,63],{"class":56},[39,95460,60],{"class":45},[39,95462,1623],{"class":56},[39,95464,83825],{"class":45},[39,95466,95467],{"class":102},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,95469,95471],{"id":95470},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,95473,95474],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,95476,95477],{},[269,95478],{"alt":34,"src":95479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,95481,95483],{"id":95482},"_126-保存加载文件","12.6 保存加载文件",[19,95485,95486],{},"savetxt():将数据保存到txt文件中",[19,95488,95489],{},"loadtxt():从文件加载数据",[19,95491,95492],{},[269,95493],{"alt":34,"src":95494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,95496,95498],{"id":95497},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,95500,95501],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,95503,95505],{"id":95504},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,95507,95508],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,95510,95511],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,95513,95514],{},[269,95515],{"alt":34,"src":95516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,95518,95520],{"id":95519},"_129-where语句","12.9 where语句",[19,95522,95523],{},"np.where(条件,x,y)",[19,95525,95526],{},"如果条件为True,对应值为x,否则对应值为y",[19,95528,95529],{},[269,95530],{"alt":34,"src":95531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,95533,95535],{"id":95534},"_1210-dot矩阵","12.10 dot()矩阵",[19,95537,95538],{},[269,95539],{"alt":34,"src":95540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1133,95542,95543],{},"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":34,"searchDepth":74,"depth":74,"links":95545},[95546,95547,95548,95549,95550,95551,95552,95553,95554,95555],{"id":94908,"depth":74,"text":94909},{"id":95131,"depth":74,"text":95132},{"id":95347,"depth":74,"text":95348},{"id":95422,"depth":74,"text":95423},{"id":95470,"depth":74,"text":95471},{"id":95482,"depth":74,"text":95483},{"id":95497,"depth":74,"text":95498},{"id":95504,"depth":74,"text":95505},{"id":95519,"depth":74,"text":95520},{"id":95534,"depth":74,"text":95535},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94900,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":95562,"title":95563,"body":95564,"description":1142,"extension":1143,"meta":95917,"navigation":1145,"path":95918,"seo":95919,"stem":95920,"__hash__":95921},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":95565,"toc":95915},[95566,95569,95572,95575,95578,95581,95646,95648,95912],[10,95567,95563],{"id":95568},"_13数组排序",[19,95570,95571],{},"排序主要用到的方法是np.sort和np.argsort",[19,95573,95574],{},"其中np.sort()对数组直接排序",[19,95576,95577],{},"而np.argsort()是返回排序后的原始索引",[19,95579,95580],{},"①一维数组",[29,95582,95584],{"className":31,"code":95583,"language":33,"meta":34,"style":34},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[36,95585,95586,95590,95630,95638],{"__ignoreMap":34},[39,95587,95588],{"class":41,"line":42},[39,95589,94156],{"class":102},[39,95591,95592,95594,95596,95598,95600,95602,95604,95606,95608,95610,95612,95614,95616,95618,95620,95622,95624,95626,95628],{"class":41,"line":74},[39,95593,46],{"class":45},[39,95595,50],{"class":49},[39,95597,53],{"class":45},[39,95599,68],{"class":56},[39,95601,60],{"class":45},[39,95603,1699],{"class":56},[39,95605,60],{"class":45},[39,95607,1598],{"class":56},[39,95609,60],{"class":45},[39,95611,1973],{"class":56},[39,95613,60],{"class":45},[39,95615,1489],{"class":56},[39,95617,60],{"class":45},[39,95619,2091],{"class":56},[39,95621,60],{"class":45},[39,95623,94],{"class":56},[39,95625,60],{"class":45},[39,95627,146],{"class":56},[39,95629,71],{"class":45},[39,95631,95632,95635],{"class":41,"line":99},[39,95633,95634],{"class":45},"np.sort(a)",[39,95636,95637],{"class":102},"#升序排序\n",[39,95639,95640,95643],{"class":41,"line":106},[39,95641,95642],{"class":45},"np.argsort(a)",[39,95644,95645],{"class":102},"#按照元素大小来索引排序\n",[19,95647,94342],{},[29,95649,95651],{"className":31,"code":95650,"language":33,"meta":34,"style":34},"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",[36,95652,95653,95665,95691,95696,95700,95705,95710,95715,95720,95724,95732,95736,95741,95746,95751,95756,95760,95765,95778,95782,95787,95792,95797,95802,95806,95811,95823,95827,95831,95835,95839,95843,95847,95852,95867,95872,95881,95886,95890,95894,95899,95903,95908],{"__ignoreMap":34},[39,95654,95655,95658,95660,95662],{"class":41,"line":42},[39,95656,95657],{"class":45},"np.random.seed(",[39,95659,260],{"class":56},[39,95661,1632],{"class":45},[39,95663,95664],{"class":102},"#保证每次值一样\n",[39,95666,95667,95669,95671,95673,95675,95677,95679,95681,95683,95685,95687,95689],{"class":41,"line":74},[39,95668,186],{"class":45},[39,95670,50],{"class":49},[39,95672,94165],{"class":45},[39,95674,1519],{"class":56},[39,95676,60],{"class":45},[39,95678,32551],{"class":254},[39,95680,50],{"class":49},[39,95682,1221],{"class":45},[39,95684,84],{"class":56},[39,95686,60],{"class":45},[39,95688,94],{"class":56},[39,95690,31552],{"class":45},[39,95692,95693],{"class":41,"line":99},[39,95694,95695],{"class":102},"#原数组：\n",[39,95697,95698],{"class":41,"line":106},[39,95699,94978],{"class":1319},[39,95701,95702],{"class":41,"line":112},[39,95703,95704],{"class":1319},"array([[44, 47, 64, 67, 67,  9],\n",[39,95706,95707],{"class":41,"line":118},[39,95708,95709],{"class":1319},"       [83, 21, 36, 87, 70, 88],\n",[39,95711,95712],{"class":41,"line":413},[39,95713,95714],{"class":1319},"       [88, 12, 58, 65, 39, 87],\n",[39,95716,95717],{"class":41,"line":419},[39,95718,95719],{"class":1319},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[39,95721,95722],{"class":41,"line":425},[39,95723,94978],{"class":1319},[39,95725,95726,95729],{"class":41,"line":443},[39,95727,95728],{"class":45},"np.sort(aa)",[39,95730,95731],{"class":102},"#每行进行了排序\n",[39,95733,95734],{"class":41,"line":449},[39,95735,94978],{"class":1319},[39,95737,95738],{"class":41,"line":455},[39,95739,95740],{"class":1319},"array([[ 9, 44, 47, 64, 67, 67],\n",[39,95742,95743],{"class":41,"line":461},[39,95744,95745],{"class":1319},"       [21, 36, 70, 83, 87, 88],\n",[39,95747,95748],{"class":41,"line":475},[39,95749,95750],{"class":1319},"       [12, 39, 58, 65, 87, 88],\n",[39,95752,95753],{"class":41,"line":665},[39,95754,95755],{"class":1319},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[39,95757,95758],{"class":41,"line":671},[39,95759,94978],{"class":1319},[39,95761,95762],{"class":41,"line":684},[39,95763,95764],{"class":102},"#axis=0时\n",[39,95766,95767,95770,95772,95774,95776],{"class":41,"line":2732},[39,95768,95769],{"class":45},"np.sort(aa,",[39,95771,255],{"class":254},[39,95773,50],{"class":49},[39,95775,260],{"class":56},[39,95777,209],{"class":45},[39,95779,95780],{"class":41,"line":2737},[39,95781,94978],{"class":1319},[39,95783,95784],{"class":41,"line":2751},[39,95785,95786],{"class":1319},"array([[44, 12, 36, 37, 25,  9],\n",[39,95788,95789],{"class":41,"line":2756},[39,95790,95791],{"class":1319},"       [46, 21, 58, 65, 39, 77],\n",[39,95793,95794],{"class":41,"line":2785},[39,95795,95796],{"class":1319},"       [83, 47, 64, 67, 67, 87],\n",[39,95798,95799],{"class":41,"line":2790},[39,95800,95801],{"class":1319},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[39,95803,95804],{"class":41,"line":2807},[39,95805,94978],{"class":1319},[39,95807,95808],{"class":41,"line":2812},[39,95809,95810],{"class":102},"#axis=1时,为默认值\n",[39,95812,95813,95815,95817,95819,95821],{"class":41,"line":2817},[39,95814,95769],{"class":45},[39,95816,255],{"class":254},[39,95818,50],{"class":49},[39,95820,57],{"class":56},[39,95822,209],{"class":45},[39,95824,95825],{"class":41,"line":2822},[39,95826,94978],{"class":1319},[39,95828,95829],{"class":41,"line":2836},[39,95830,95740],{"class":1319},[39,95832,95833],{"class":41,"line":2841},[39,95834,95745],{"class":1319},[39,95836,95837],{"class":41,"line":3635},[39,95838,95750],{"class":1319},[39,95840,95841],{"class":41,"line":3649},[39,95842,95755],{"class":1319},[39,95844,95845],{"class":41,"line":3657},[39,95846,94978],{"class":1319},[39,95848,95849],{"class":41,"line":3662},[39,95850,95851],{"class":102},"#按最后一列排序\n",[39,95853,95854,95856,95858,95861,95863,95865],{"class":41,"line":3668},[39,95855,77],{"class":45},[39,95857,50],{"class":49},[39,95859,95860],{"class":45},"aa[:,",[39,95862,1732],{"class":49},[39,95864,57],{"class":56},[39,95866,34301],{"class":45},[39,95868,95869],{"class":41,"line":3674},[39,95870,95871],{"class":102},"#获取最后一列排好序的索引\n",[39,95873,95874,95876,95878],{"class":41,"line":3679},[39,95875,75112],{"class":45},[39,95877,50],{"class":49},[39,95879,95880],{"class":45},"np.argsort(b)\n",[39,95882,95883],{"class":41,"line":9004},[39,95884,95885],{"class":45},"aa[index]\n",[39,95887,95888],{"class":41,"line":9028},[39,95889,94978],{"class":1319},[39,95891,95892],{"class":41,"line":9033},[39,95893,95704],{"class":1319},[39,95895,95896],{"class":41,"line":9039},[39,95897,95898],{"class":1319},"       [46, 88, 81, 37, 25, 77],\n",[39,95900,95901],{"class":41,"line":9066},[39,95902,95714],{"class":1319},[39,95904,95905],{"class":41,"line":9071},[39,95906,95907],{"class":1319},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[39,95909,95910],{"class":41,"line":9077},[39,95911,94978],{"class":1319},[1133,95913,95914],{},"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":34,"searchDepth":74,"depth":74,"links":95916},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":95563,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95923,"title":95924,"body":95925,"description":1142,"extension":1143,"meta":95955,"navigation":1145,"path":95956,"seo":95957,"stem":95958,"__hash__":95959},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95926,"toc":95953},[95927,95930,95933,95936,95939,95942,95945,95948],[10,95928,95924],{"id":95929},"_14广播机制",[19,95931,95932],{},"广播的规则：",[19,95934,95935],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95937,95938],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95940,95941],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95943,95944],{},"3.如果没有维度形状为1，则会引发异常",[19,95946,95947],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95949,95950],{},[269,95951],{"alt":34,"src":95952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":34,"searchDepth":74,"depth":74,"links":95954},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95924,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95961,"title":95962,"body":95963,"description":1142,"extension":1143,"meta":96061,"navigation":1145,"path":96062,"seo":96063,"stem":96064,"__hash__":96065},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95964,"toc":96059},[95965,95968,95971,96056],[10,95966,95962],{"id":95967},"_15比较掩码",[19,95969,95970],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[29,95972,95974],{"className":31,"code":95973,"language":33,"meta":34,"style":34},"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",[36,95975,95976,96022,96033,96047,96051],{"__ignoreMap":34},[39,95977,95978,95980,95982,95985,95987,95989,95991,95993,95995,95997,95999,96001,96003,96005,96007,96009,96011,96013,96015,96017,96019],{"class":41,"line":42},[39,95979,46],{"class":45},[39,95981,50],{"class":49},[39,95983,95984],{"class":45},"np.array([[",[39,95986,57],{"class":56},[39,95988,60],{"class":45},[39,95990,63],{"class":56},[39,95992,60],{"class":45},[39,95994,68],{"class":56},[39,95996,49084],{"class":45},[39,95998,151],{"class":56},[39,96000,60],{"class":45},[39,96002,1699],{"class":56},[39,96004,60],{"class":45},[39,96006,156],{"class":56},[39,96008,49084],{"class":45},[39,96010,1923],{"class":56},[39,96012,60],{"class":45},[39,96014,1948],{"class":56},[39,96016,60],{"class":45},[39,96018,1973],{"class":56},[39,96020,96021],{"class":45},"]])\n",[39,96023,96024,96026,96028,96030],{"class":41,"line":74},[39,96025,46],{"class":45},[39,96027,2108],{"class":49},[39,96029,1898],{"class":56},[39,96031,96032],{"class":102},"#结果是一个由True,False组成的数组\n",[39,96034,96035,96038,96040,96042,96044],{"class":41,"line":99},[39,96036,96037],{"class":45},"a[a",[39,96039,2108],{"class":49},[39,96041,1898],{"class":56},[39,96043,2138],{"class":45},[39,96045,96046],{"class":102},"#小于20的元素会存到这个数组中\n",[39,96048,96049],{"class":41,"line":106},[39,96050,94614],{"class":102},[39,96052,96053],{"class":41,"line":112},[39,96054,96055],{"class":102},"#array([ 1,  2,  3, 11, 12, 13])\n",[1133,96057,96058],{},"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":34,"searchDepth":74,"depth":74,"links":96060},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95962,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96067,"title":96068,"body":96069,"description":1142,"extension":1143,"meta":96161,"navigation":1145,"path":96162,"seo":96163,"stem":96164,"__hash__":96165},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96070,"toc":96159},[96071,96074,96077,96080,96083,96086,96151,96156],[10,96072,96068],{"id":96073},"_16魔法命令time",[19,96075,96076],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,96078,96079],{},"%:行模式",[19,96081,96082],{},"%%:单元格模式",[19,96084,96085],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[29,96087,96089],{"className":31,"code":96088,"language":33,"meta":34,"style":34},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[36,96090,96091,96096,96103,96108,96117,96130,96134,96142],{"__ignoreMap":34},[39,96092,96093],{"class":41,"line":42},[39,96094,96095],{"class":102},"#程序执行时间\n",[39,96097,96098,96100],{"class":41,"line":74},[39,96099,31447],{"class":49},[39,96101,96102],{"class":45}," time \n",[39,96104,96105],{"class":41,"line":99},[39,96106,96107],{"class":102},"#获取时间\n",[39,96109,96110,96113,96115],{"class":41,"line":106},[39,96111,96112],{"class":45},"start",[39,96114,50],{"class":49},[39,96116,33473],{"class":45},[39,96118,96119,96122,96125,96127],{"class":41,"line":112},[39,96120,96121],{"class":45},"time.sleep(",[39,96123,96124],{"class":56},"0.4",[39,96126,1632],{"class":45},[39,96128,96129],{"class":102},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[39,96131,96132],{"class":41,"line":118},[39,96133,96107],{"class":102},[39,96135,96136,96138,96140],{"class":41,"line":413},[39,96137,46856],{"class":45},[39,96139,50],{"class":49},[39,96141,33473],{"class":45},[39,96143,96144,96146,96148],{"class":41,"line":419},[39,96145,46856],{"class":45},[39,96147,1732],{"class":49},[39,96149,96150],{"class":45},"start\n",[19,96152,96153],{},[269,96154],{"alt":34,"src":96155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1133,96157,96158],{},"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":34,"searchDepth":74,"depth":74,"links":96160},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96068,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96167,"title":96168,"body":96169,"description":1142,"extension":1143,"meta":96204,"navigation":1145,"path":96205,"seo":96206,"stem":96207,"__hash__":96208},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96170,"toc":96202},[96171,96174,96177,96180,96183,96186,96189,96192,96197],[10,96172,96168],{"id":96173},"_17魔法命令timeit",[19,96175,96176],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,96178,96179],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,96181,96182],{},"单元格模式：",[19,96184,96185],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,96187,96188],{},"初始化语句执行次数由轮数来决定",[19,96190,96191],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,96193,96194],{},[269,96195],{"alt":34,"src":96196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,96198,96199],{},[269,96200],{"alt":34,"src":96201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":34,"searchDepth":74,"depth":74,"links":96203},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96168,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96210,"title":96211,"body":96212,"description":1142,"extension":1143,"meta":96230,"navigation":1145,"path":96231,"seo":96232,"stem":96233,"__hash__":96234},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96213,"toc":96228},[96214,96217,96220,96223],[10,96215,96211],{"id":96216},"_18魔法命令writefile和run",[19,96218,96219],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,96221,96222],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,96224,96225],{},[269,96226],{"alt":34,"src":96227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":34,"searchDepth":74,"depth":74,"links":96229},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96211,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96236,"title":96237,"body":96238,"description":1142,"extension":1143,"meta":96291,"navigation":1145,"path":96292,"seo":96293,"stem":96294,"__hash__":96295},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96239,"toc":96289},[96240,96243,96246,96248,96251,96254,96259,96262,96265,96268,96271,96274,96277,96280,96283,96286],[10,96241,96237],{"id":96242},"_19魔法命令memit",[19,96244,96245],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,96247,25656],{},[19,96249,96250],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,96252,96253],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,96255,96256],{},[269,96257],{"alt":34,"src":96258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,96260,96261],{},"补充：",[19,96263,96264],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,96266,96267],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,96269,96270],{},"解决方法：",[19,96272,96273],{},"1.cmd",[19,96275,96276],{},"2.依次输入以下代码：",[19,96278,96279],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,96281,96282],{},"pip install --upgrade ipython",[19,96284,96285],{},"#升级 memory_profiler 和 setuptools",[19,96287,96288],{},"pip install --upgrade memory_profiler setuptools",{"title":34,"searchDepth":74,"depth":74,"links":96290},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96237,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96297,"title":96298,"body":96299,"description":1142,"extension":1143,"meta":97944,"navigation":1145,"path":97945,"seo":97946,"stem":97947,"__hash__":97948},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96300,"toc":97914},[96301,96304,96308,96312,96373,96376,96381,96385,96390,96395,96400,96405,96408,96413,96417,96421,96454,96457,96460,96463,96515,96518,96554,96557,96598,96602,96623,96625,96662,96664,96669,96671,96676,96680,96683,96711,96715,96719,96772,96776,96868,96872,96876,96879,96884,96888,96913,96918,96922,96925,96928,96931,96934,96937,96940,96943,96955,96959,96963,96966,96998,97001,97024,97027,97053,97056,97082,97085,97119,97122,97184,97188,97191,97195,97198,97224,97227,97230,97235,97238,97307,97309,97314,97375,97378,97389,97395,97400,97404,97407,97420,97424,97439,97441,97464,97466,97492,97495,97498,97501,97549,97551,97556,97560,97564,97591,97595,97622,97625,97630,97635,97725,97729,97787,97792,97795,97798,97840,97844,97900,97905,97908,97911],[10,96302,96298],{"id":96303},"_2创建数组",[14,96305,96307],{"id":96306},"_21-array函数创建数组","2.1 array()函数创建数组",[1188,96309,96311],{"id":96310},"_221-函数语句","2.2.1 函数语句",[29,96313,96315],{"className":31,"code":96314,"language":33,"meta":34,"style":34},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[36,96316,96317],{"__ignoreMap":34},[39,96318,96319,96322,96325,96327,96329,96331,96333,96335,96338,96340,96343,96345,96348,96350,96352,96354,96357,96359,96362,96364,96367,96369,96371],{"class":41,"line":42},[39,96320,96321],{"class":45},"numpy.array(",[39,96323,96324],{"class":56},"object",[39,96326,13491],{"class":45},[39,96328,94550],{"class":254},[39,96330,14620],{"class":49},[39,96332,39988],{"class":56},[39,96334,13491],{"class":45},[39,96336,96337],{"class":254},"copy",[39,96339,14620],{"class":49},[39,96341,96342],{"class":56}," True",[39,96344,13491],{"class":45},[39,96346,96347],{"class":254},"order",[39,96349,14620],{"class":49},[39,96351,39988],{"class":56},[39,96353,13491],{"class":45},[39,96355,96356],{"class":254},"subok",[39,96358,14620],{"class":49},[39,96360,96361],{"class":56}," False",[39,96363,13491],{"class":45},[39,96365,96366],{"class":254},"ndmin",[39,96368,14620],{"class":49},[39,96370,5151],{"class":56},[39,96372,209],{"class":45},[19,96374,96375],{},"参数：",[19,96377,96378],{},[269,96379],{"alt":34,"src":96380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[1188,96382,96384],{"id":96383},"_222-实例","2.2.2 实例",[19,96386,96387],{},[269,96388],{"alt":34,"src":96389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,96391,96392],{},[269,96393],{"alt":34,"src":96394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,96396,96397],{},[269,96398],{"alt":34,"src":96399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,96401,96402],{},[269,96403],{"alt":34,"src":96404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,96406,96407],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,96409,96410],{},[269,96411],{"alt":34,"src":96412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,96414,96416],{"id":96415},"_22-随机数创建数组","2.2 随机数创建数组",[1188,96418,96420],{"id":96419},"_221-random语句","2.2.1 random语句",[29,96422,96424],{"className":31,"code":96423,"language":33,"meta":34,"style":34},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[36,96425,96426,96431,96436,96444,96449],{"__ignoreMap":34},[39,96427,96428],{"class":41,"line":42},[39,96429,96430],{"class":102},"#random.random()\n",[39,96432,96433],{"class":41,"line":74},[39,96434,96435],{"class":102},"#确定随机种子,就是每次运行结果是相同的\n",[39,96437,96438,96440,96442],{"class":41,"line":99},[39,96439,95657],{"class":45},[39,96441,260],{"class":56},[39,96443,209],{"class":45},[39,96445,96446],{"class":41,"line":106},[39,96447,96448],{"class":45},"np.random.random()\n",[39,96450,96451],{"class":41,"line":112},[39,96452,96453],{"class":102},"#生成一个随机的数目\n",[19,96455,96456],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,96458,96459],{},"可以指定数组形状 size",[19,96461,96462],{},"①生成一维数组",[29,96464,96466],{"className":31,"code":96465,"language":33,"meta":34,"style":34},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[36,96467,96468,96473,96486,96491,96507],{"__ignoreMap":34},[39,96469,96470],{"class":41,"line":42},[39,96471,96472],{"class":102},"#random.random(size())\n",[39,96474,96475,96478,96480,96482,96484],{"class":41,"line":74},[39,96476,96477],{"class":45},"np.random.random(",[39,96479,32551],{"class":254},[39,96481,50],{"class":49},[39,96483,89],{"class":56},[39,96485,209],{"class":45},[39,96487,96488],{"class":41,"line":99},[39,96489,96490],{"class":102},"#生成一位的五个元素\n",[39,96492,96493,96495,96497,96499,96501,96503,96505],{"class":41,"line":106},[39,96494,46],{"class":45},[39,96496,50],{"class":49},[39,96498,96477],{"class":45},[39,96500,32551],{"class":254},[39,96502,50],{"class":49},[39,96504,84],{"class":56},[39,96506,209],{"class":45},[39,96508,96509,96512],{"class":41,"line":112},[39,96510,96511],{"class":45},"a.shape ",[39,96513,96514],{"class":102},"#输出数组形状\n",[19,96516,96517],{},"②生成二维数组",[29,96519,96521],{"className":31,"code":96520,"language":33,"meta":34,"style":34},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[36,96522,96523,96527,96549],{"__ignoreMap":34},[39,96524,96525],{"class":41,"line":42},[39,96526,94352],{"class":102},[39,96528,96529,96531,96533,96535,96537,96539,96541,96543,96545,96547],{"class":41,"line":74},[39,96530,186],{"class":45},[39,96532,50],{"class":49},[39,96534,96477],{"class":45},[39,96536,32551],{"class":254},[39,96538,50],{"class":49},[39,96540,1221],{"class":45},[39,96542,84],{"class":56},[39,96544,60],{"class":45},[39,96546,89],{"class":56},[39,96548,31552],{"class":45},[39,96550,96551],{"class":41,"line":99},[39,96552,96553],{"class":102},"#生成四行五列的数组\n",[19,96555,96556],{},"③生成三维数组",[29,96558,96560],{"className":31,"code":96559,"language":33,"meta":34,"style":34},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[36,96561,96562,96567,96593],{"__ignoreMap":34},[39,96563,96564],{"class":41,"line":42},[39,96565,96566],{"class":102},"#三维数组\n",[39,96568,96569,96571,96573,96575,96577,96579,96581,96583,96585,96587,96589,96591],{"class":41,"line":74},[39,96570,327],{"class":45},[39,96572,50],{"class":49},[39,96574,96477],{"class":45},[39,96576,32551],{"class":254},[39,96578,50],{"class":49},[39,96580,1221],{"class":45},[39,96582,63],{"class":56},[39,96584,60],{"class":45},[39,96586,68],{"class":56},[39,96588,60],{"class":45},[39,96590,84],{"class":56},[39,96592,31552],{"class":45},[39,96594,96595],{"class":41,"line":99},[39,96596,96597],{"class":45},"aaa.shape\n",[1188,96599,96601],{"id":96600},"_222-randint语句","2.2.2 randint语句",[29,96603,96605],{"className":31,"code":96604,"language":33,"meta":34,"style":34},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[36,96606,96607,96612],{"__ignoreMap":34},[39,96608,96609],{"class":41,"line":42},[39,96610,96611],{"class":102},"#生成随机的整数 random.randint(low,high,size)\n",[39,96613,96614,96616,96618,96620],{"class":41,"line":74},[39,96615,94165],{"class":45},[39,96617,89],{"class":56},[39,96619,14770],{"class":45},[39,96621,96622],{"class":102},"#0~5中的随机一个数\n",[19,96624,96462],{},[29,96626,96628],{"className":31,"code":96627,"language":33,"meta":34,"style":34},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[36,96629,96630,96635,96657],{"__ignoreMap":34},[39,96631,96632],{"class":41,"line":42},[39,96633,96634],{"class":102},"#一维\n",[39,96636,96637,96639,96641,96643,96645,96647,96649,96651,96653,96655],{"class":41,"line":74},[39,96638,94165],{"class":45},[39,96640,57],{"class":56},[39,96642,60],{"class":45},[39,96644,151],{"class":56},[39,96646,60],{"class":45},[39,96648,32551],{"class":254},[39,96650,50],{"class":49},[39,96652,1221],{"class":45},[39,96654,146],{"class":56},[39,96656,31552],{"class":45},[39,96658,96659],{"class":41,"line":99},[39,96660,96661],{"class":102},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,96663,96517],{},[19,96665,96666],{},[269,96667],{"alt":34,"src":96668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,96670,96556],{},[19,96672,96673],{},[269,96674],{"alt":34,"src":96675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[1188,96677,96679],{"id":96678},"_222-rand语句","2.2.2 rand语句",[19,96681,96682],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[29,96684,96686],{"className":31,"code":96685,"language":33,"meta":34,"style":34},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[36,96687,96688,96701,96706],{"__ignoreMap":34},[39,96689,96690,96693,96695,96697,96699],{"class":41,"line":42},[39,96691,96692],{"class":45},"np.random.rand(",[39,96694,1519],{"class":56},[39,96696,60],{"class":45},[39,96698,146],{"class":56},[39,96700,209],{"class":45},[39,96702,96703],{"class":41,"line":74},[39,96704,96705],{"class":102},"#第一个参数100：行数，表示有100个样本\n",[39,96707,96708],{"class":41,"line":99},[39,96709,96710],{"class":102},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,96712,96714],{"id":96713},"_23-arange创建数组","2.3 arange()创建数组",[1188,96716,96718],{"id":96717},"_231-函数语句","2.3.1 函数语句",[29,96720,96722],{"className":31,"code":96721,"language":33,"meta":34,"style":34},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[36,96723,96724,96738,96743,96748,96753,96758,96763,96768],{"__ignoreMap":34},[39,96725,96726,96729,96731,96733,96736],{"class":41,"line":42},[39,96727,96728],{"class":45},"numpy.arange([start,] stop[, step], ",[39,96730,94550],{"class":254},[39,96732,50],{"class":49},[39,96734,96735],{"class":56},"None",[39,96737,209],{"class":45},[39,96739,96740],{"class":41,"line":74},[39,96741,96742],{"class":102},"#参数\n",[39,96744,96745],{"class":41,"line":99},[39,96746,96747],{"class":1319},"\"\"\"\n",[39,96749,96750],{"class":41,"line":106},[39,96751,96752],{"class":1319},"start:起始值，可选，默认从 0 开始。\n",[39,96754,96755],{"class":41,"line":112},[39,96756,96757],{"class":1319},"stop:结束值（不包含该值）。\n",[39,96759,96760],{"class":41,"line":118},[39,96761,96762],{"class":1319},"step:步长，可选，默认是 1。可以为浮点数。\n",[39,96764,96765],{"class":41,"line":413},[39,96766,96767],{"class":1319},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[39,96769,96770],{"class":41,"line":419},[39,96771,96747],{"class":1319},[1188,96773,96775],{"id":96774},"_232-实例","2.3.2 实例",[29,96777,96779],{"className":31,"code":96778,"language":33,"meta":34,"style":34},"#创建一维数组\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",[36,96780,96781,96785,96809,96814,96819,96823,96846,96850,96854,96859,96864],{"__ignoreMap":34},[39,96782,96783],{"class":41,"line":42},[39,96784,94156],{"class":102},[39,96786,96787,96789,96791,96793,96795,96797,96799,96801,96803,96805,96807],{"class":41,"line":74},[39,96788,191],{"class":45},[39,96790,57],{"class":56},[39,96792,60],{"class":45},[39,96794,1923],{"class":56},[39,96796,60],{"class":45},[39,96798,57],{"class":56},[39,96800,60],{"class":45},[39,96802,94550],{"class":254},[39,96804,50],{"class":49},[39,96806,1224],{"class":56},[39,96808,209],{"class":45},[39,96810,96811],{"class":41,"line":99},[39,96812,96813],{"class":102},"#输出结果：\n",[39,96815,96816],{"class":41,"line":106},[39,96817,96818],{"class":102},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[39,96820,96821],{"class":41,"line":112},[39,96822,94997],{"class":102},[39,96824,96825,96828,96830,96832,96834,96837,96839,96841,96843],{"class":41,"line":118},[39,96826,96827],{"class":45},"np.array([np.arange(",[39,96829,57],{"class":56},[39,96831,60],{"class":45},[39,96833,84],{"class":56},[39,96835,96836],{"class":45},"),np.arange(",[39,96838,84],{"class":56},[39,96840,60],{"class":45},[39,96842,1573],{"class":56},[39,96844,96845],{"class":45},")])\n",[39,96847,96848],{"class":41,"line":413},[39,96849,94614],{"class":102},[39,96851,96852],{"class":41,"line":419},[39,96853,96747],{"class":1319},[39,96855,96856],{"class":41,"line":425},[39,96857,96858],{"class":1319},"array([[1, 2, 3],\n",[39,96860,96861],{"class":41,"line":443},[39,96862,96863],{"class":1319},"       [4, 5, 6]])\n",[39,96865,96866],{"class":41,"line":449},[39,96867,96747],{"class":1319},[14,96869,96871],{"id":96870},"_24-生态分布","2.4 生态分布",[1188,96873,96875],{"id":96874},"_241-标准正态分布","2.4.1 标准正态分布",[19,96877,96878],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,96880,96881],{},[269,96882],{"alt":34,"src":96883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[1188,96885,96887],{"id":96886},"_242-常规正态分布","2.4.2 常规正态分布",[29,96889,96891],{"className":31,"code":96890,"language":33,"meta":34,"style":34},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[36,96892,96893,96898,96903,96908],{"__ignoreMap":34},[39,96894,96895],{"class":41,"line":42},[39,96896,96897],{"class":45},"random.normal(loc,scale,size)也可以生成正态分布\n",[39,96899,96900],{"class":41,"line":74},[39,96901,96902],{"class":102},"#loc:期望\n",[39,96904,96905],{"class":41,"line":99},[39,96906,96907],{"class":102},"#scale:方差\n",[39,96909,96910],{"class":41,"line":106},[39,96911,96912],{"class":102},"#size:用于确定是几维的数列\n",[19,96914,96915],{},[269,96916],{"alt":34,"src":96917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96919,96921],{"id":96920},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96923,96924],{},"ndim:秩，维度个数",[19,96926,96927],{},"size:数组元素的个数",[19,96929,96930],{},"shape:数组的形状",[19,96932,96933],{},"dtype:数组元素的类型",[19,96935,96936],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96938,96939],{},"他们都是属性，通过数组.属性的形式来确定",[19,96941,96942],{},"如果需要输出多个可以通过以下方式：",[29,96944,96946],{"className":31,"code":96945,"language":33,"meta":34,"style":34},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[36,96947,96948],{"__ignoreMap":34},[39,96949,96950,96952],{"class":41,"line":42},[39,96951,31470],{"class":56},[39,96953,96954],{"class":45},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96956,96958],{"id":96957},"_26-其他方式创建数组","2.6 其他方式创建数组",[1188,96960,96962],{"id":96961},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96964,96965],{},"①创建一维数组",[29,96967,96969],{"className":31,"code":96968,"language":33,"meta":34,"style":34},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[36,96970,96971,96980,96984,96989,96994],{"__ignoreMap":34},[39,96972,96973,96976,96978],{"class":41,"line":42},[39,96974,96975],{"class":45},"np.zeros(",[39,96977,146],{"class":56},[39,96979,209],{"class":45},[39,96981,96982],{"class":41,"line":74},[39,96983,96747],{"class":1319},[39,96985,96986],{"class":41,"line":99},[39,96987,96988],{"class":1319},"输出结果：\n",[39,96990,96991],{"class":41,"line":106},[39,96992,96993],{"class":1319},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[39,96995,96996],{"class":41,"line":112},[39,96997,96747],{"class":1319},[19,96999,97000],{},"上方代码等价于：",[29,97002,97004],{"className":31,"code":97003,"language":33,"meta":34,"style":34},"np.zeros(shape=(10))#创建10个元素的0数组\n",[36,97005,97006],{"__ignoreMap":34},[39,97007,97008,97010,97013,97015,97017,97019,97021],{"class":41,"line":42},[39,97009,96975],{"class":45},[39,97011,97012],{"class":254},"shape",[39,97014,50],{"class":49},[39,97016,1221],{"class":45},[39,97018,146],{"class":56},[39,97020,83825],{"class":45},[39,97022,97023],{"class":102},"#创建10个元素的0数组\n",[19,97025,97026],{},"也可以指定类型",[29,97028,97030],{"className":31,"code":97029,"language":33,"meta":34,"style":34},"#指定类型\nnp.zeros(5,dtype=int)\n",[36,97031,97032,97037],{"__ignoreMap":34},[39,97033,97034],{"class":41,"line":42},[39,97035,97036],{"class":102},"#指定类型\n",[39,97038,97039,97041,97043,97045,97047,97049,97051],{"class":41,"line":74},[39,97040,96975],{"class":45},[39,97042,89],{"class":56},[39,97044,60],{"class":45},[39,97046,94550],{"class":254},[39,97048,50],{"class":49},[39,97050,1224],{"class":56},[39,97052,209],{"class":45},[19,97054,97055],{},"②创建二维数组",[29,97057,97059],{"className":31,"code":97058,"language":33,"meta":34,"style":34},"np.zeros((3,4),dtype=int)\n",[36,97060,97061],{"__ignoreMap":34},[39,97062,97063,97066,97068,97070,97072,97074,97076,97078,97080],{"class":41,"line":42},[39,97064,97065],{"class":45},"np.zeros((",[39,97067,68],{"class":56},[39,97069,60],{"class":45},[39,97071,84],{"class":56},[39,97073,43311],{"class":45},[39,97075,94550],{"class":254},[39,97077,50],{"class":49},[39,97079,1224],{"class":56},[39,97081,209],{"class":45},[19,97083,97084],{},"③创建三维数组",[29,97086,97088],{"className":31,"code":97087,"language":33,"meta":34,"style":34},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[36,97089,97090,97095],{"__ignoreMap":34},[39,97091,97092],{"class":41,"line":42},[39,97093,97094],{"class":102},"#创建三维数组\n",[39,97096,97097,97099,97101,97103,97105,97107,97109,97111,97113,97115,97117],{"class":41,"line":74},[39,97098,97065],{"class":45},[39,97100,68],{"class":56},[39,97102,60],{"class":45},[39,97104,84],{"class":56},[39,97106,60],{"class":45},[39,97108,89],{"class":56},[39,97110,43311],{"class":45},[39,97112,94550],{"class":254},[39,97114,50],{"class":49},[39,97116,1224],{"class":56},[39,97118,209],{"class":45},[19,97120,97121],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[29,97123,97125],{"className":31,"code":97124,"language":33,"meta":34,"style":34},"#使用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",[36,97126,97127,97132,97147,97152,97157,97179],{"__ignoreMap":34},[39,97128,97129],{"class":41,"line":42},[39,97130,97131],{"class":102},"#使用zeros_like将创建的一维数组变成全0的数组\n",[39,97133,97134,97136,97138,97140,97142,97144],{"class":41,"line":74},[39,97135,46],{"class":45},[39,97137,50],{"class":49},[39,97139,191],{"class":45},[39,97141,84],{"class":56},[39,97143,1632],{"class":45},[39,97145,97146],{"class":102},"#这个得到的结果：一维数组0，1，2，3\n",[39,97148,97149],{"class":41,"line":99},[39,97150,97151],{"class":45},"np.zeros_like(a)\n",[39,97153,97154],{"class":41,"line":106},[39,97155,97156],{"class":102},"#使用zeros_like将创建的二维数组变成全0的数组\n",[39,97158,97159,97161,97163,97165,97167,97169,97171,97173,97175,97177],{"class":41,"line":112},[39,97160,186],{"class":45},[39,97162,50],{"class":49},[39,97164,96477],{"class":45},[39,97166,32551],{"class":254},[39,97168,50],{"class":49},[39,97170,1221],{"class":45},[39,97172,84],{"class":56},[39,97174,60],{"class":45},[39,97176,89],{"class":56},[39,97178,31552],{"class":45},[39,97180,97181],{"class":41,"line":118},[39,97182,97183],{"class":45},"np.zeros_like(aa)\n",[1188,97185,97187],{"id":97186},"_262-ones创建数组","2.6.2 ones()创建数组",[19,97189,97190],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[1188,97192,97194],{"id":97193},"_263-empty创建数组","2.6.3 empty()创建数组",[19,97196,97197],{},"①empty()用法",[29,97199,97201],{"className":31,"code":97200,"language":33,"meta":34,"style":34},"numpy.empty(shape,dtype=float,order='c')\n",[36,97202,97203],{"__ignoreMap":34},[39,97204,97205,97208,97210,97212,97214,97216,97218,97220,97222],{"class":41,"line":42},[39,97206,97207],{"class":45},"numpy.empty(shape,",[39,97209,94550],{"class":254},[39,97211,50],{"class":49},[39,97213,1259],{"class":56},[39,97215,60],{"class":45},[39,97217,96347],{"class":254},[39,97219,50],{"class":49},[39,97221,77082],{"class":1319},[39,97223,209],{"class":45},[19,97225,97226],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,97228,97229],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,97231,97232],{},[269,97233],{"alt":34,"src":97234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,97236,97237],{},"②empty()用法",[29,97239,97241],{"className":31,"code":97240,"language":33,"meta":34,"style":34},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[36,97242,97243,97264,97276,97297,97302],{"__ignoreMap":34},[39,97244,97245,97247,97249,97252,97254,97256,97258,97260,97262],{"class":41,"line":42},[39,97246,2043],{"class":45},[39,97248,50],{"class":49},[39,97250,97251],{"class":45},"np.empty(",[39,97253,146],{"class":56},[39,97255,60],{"class":45},[39,97257,94550],{"class":254},[39,97259,50],{"class":49},[39,97261,1224],{"class":56},[39,97263,209],{"class":45},[39,97265,97266,97268,97270,97272,97274],{"class":41,"line":74},[39,97267,2018],{"class":45},[39,97269,50],{"class":49},[39,97271,191],{"class":45},[39,97273,89],{"class":56},[39,97275,209],{"class":45},[39,97277,97278,97281,97283,97286,97288,97290,97293,97295],{"class":41,"line":99},[39,97279,97280],{"class":45},"np.add(",[39,97282,63],{"class":56},[39,97284,97285],{"class":45},",x,",[39,97287,94105],{"class":254},[39,97289,50],{"class":49},[39,97291,97292],{"class":45},"y[:",[39,97294,89],{"class":56},[39,97296,71],{"class":45},[39,97298,97299],{"class":41,"line":106},[39,97300,97301],{"class":102},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[39,97303,97304],{"class":41,"line":112},[39,97305,97306],{"class":45},"y\n",[19,97308,12570],{},[19,97310,97311],{},[269,97312],{"alt":34,"src":97313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[29,97315,97317],{"className":31,"code":97316,"language":33,"meta":34,"style":34},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[36,97318,97319,97335,97355,97370],{"__ignoreMap":34},[39,97320,97321,97323,97325,97327,97329,97331,97333],{"class":41,"line":42},[39,97322,2018],{"class":45},[39,97324,50],{"class":49},[39,97326,191],{"class":45},[39,97328,57],{"class":56},[39,97330,60],{"class":45},[39,97332,94],{"class":56},[39,97334,209],{"class":45},[39,97336,97337,97339,97341,97343,97345,97347,97349,97351,97353],{"class":41,"line":74},[39,97338,2043],{"class":45},[39,97340,50],{"class":49},[39,97342,97251],{"class":45},[39,97344,89],{"class":56},[39,97346,60],{"class":45},[39,97348,94550],{"class":254},[39,97350,50],{"class":49},[39,97352,1224],{"class":56},[39,97354,209],{"class":45},[39,97356,97357,97360,97362,97364,97366,97368],{"class":41,"line":99},[39,97358,97359],{"class":45},"np.add(x,",[39,97361,63],{"class":56},[39,97363,60],{"class":45},[39,97365,94105],{"class":254},[39,97367,50],{"class":49},[39,97369,94499],{"class":45},[39,97371,97372],{"class":41,"line":106},[39,97373,97374],{"class":102},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,97376,97377],{},"③empty_like()",[19,97379,97380],{},[304,97381,97382,97383,97388],{},"创建一个",[304,97384,97385],{},[304,97386,97387],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,97390,97391,97394],{},[36,97392,97393],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,97396,97397],{},[269,97398],{"alt":34,"src":97399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[1188,97401,97403],{"id":97402},"_264-用法","2.6.4 ？？用法",[19,97405,97406],{},"当想查看一个函数的参数时，可以通过？？来实现",[29,97408,97410],{"className":31,"code":97409,"language":33,"meta":34,"style":34},"np.full??\n",[36,97411,97412],{"__ignoreMap":34},[39,97413,97414,97417],{"class":41,"line":42},[39,97415,97416],{"class":45},"np.full",[39,97418,97419],{"class":78457},"??\n",[1188,97421,97423],{"id":97422},"_265-full创建数组","2.6.5 full()创建数组",[29,97425,97427],{"className":31,"code":97426,"language":33,"meta":34,"style":34},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[36,97428,97429,97434],{"__ignoreMap":34},[39,97430,97431],{"class":41,"line":42},[39,97432,97433],{"class":45},"full(shape,fill_value)\n",[39,97435,97436],{"class":41,"line":74},[39,97437,97438],{"class":45},"创建全为某个指定值的数组\n",[19,97440,95580],{},[29,97442,97444],{"className":31,"code":97443,"language":33,"meta":34,"style":34},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[36,97445,97446,97451],{"__ignoreMap":34},[39,97447,97448],{"class":41,"line":42},[39,97449,97450],{"class":102},"#创建一个一维数组,以20进行填充\n",[39,97452,97453,97456,97458,97460,97462],{"class":41,"line":74},[39,97454,97455],{"class":45},"np.full(",[39,97457,146],{"class":56},[39,97459,60],{"class":45},[39,97461,1898],{"class":56},[39,97463,209],{"class":45},[19,97465,94342],{},[29,97467,97469],{"className":31,"code":97468,"language":33,"meta":34,"style":34},"#创建二维数组\nnp.full((3,5),11)\n",[36,97470,97471,97475],{"__ignoreMap":34},[39,97472,97473],{"class":41,"line":42},[39,97474,94997],{"class":102},[39,97476,97477,97480,97482,97484,97486,97488,97490],{"class":41,"line":74},[39,97478,97479],{"class":45},"np.full((",[39,97481,68],{"class":56},[39,97483,60],{"class":45},[39,97485,89],{"class":56},[39,97487,43311],{"class":45},[39,97489,151],{"class":56},[39,97491,209],{"class":45},[19,97493,97494],{},"③full_like用法",[19,97496,97497],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,97499,97500],{},"这里是指定填充而已",[29,97502,97504],{"className":31,"code":97503,"language":33,"meta":34,"style":34},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[36,97505,97506,97511,97535,97540],{"__ignoreMap":34},[39,97507,97508],{"class":41,"line":42},[39,97509,97510],{"class":102},"#创建一个指定形状数组\n",[39,97512,97513,97515,97517,97519,97521,97523,97525,97527,97529,97531,97533],{"class":41,"line":74},[39,97514,46],{"class":45},[39,97516,50],{"class":49},[39,97518,191],{"class":45},[39,97520,57],{"class":56},[39,97522,60],{"class":45},[39,97524,338],{"class":56},[39,97526,200],{"class":45},[39,97528,84],{"class":56},[39,97530,60],{"class":45},[39,97532,1623],{"class":56},[39,97534,209],{"class":45},[39,97536,97537],{"class":41,"line":99},[39,97538,97539],{"class":102},"#进行指定填充\n",[39,97541,97542,97545,97547],{"class":41,"line":106},[39,97543,97544],{"class":45},"np.full_like(a,",[39,97546,146],{"class":56},[39,97548,209],{"class":45},[19,97550,12570],{},[19,97552,97553],{},[269,97554],{"alt":34,"src":97555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[1188,97557,97559],{"id":97558},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23054,97561,97563],{"id":97562},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[29,97565,97567],{"className":31,"code":97566,"language":33,"meta":34,"style":34},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[36,97568,97569,97586],{"__ignoreMap":34},[39,97570,97571,97574,97576,97578,97580,97582,97584],{"class":41,"line":42},[39,97572,97573],{"class":45},"np.eye(",[39,97575,84],{"class":56},[39,97577,60],{"class":45},[39,97579,94550],{"class":254},[39,97581,50],{"class":49},[39,97583,1224],{"class":56},[39,97585,209],{"class":45},[39,97587,97588],{"class":41,"line":74},[39,97589,97590],{"class":102},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23054,97592,97594],{"id":97593},"_2662-法2identity","2.6.6.2 法2：identity()",[29,97596,97598],{"className":31,"code":97597,"language":33,"meta":34,"style":34},"#identity()\nnp.identity(5,dtype=int)\n",[36,97599,97600,97605],{"__ignoreMap":34},[39,97601,97602],{"class":41,"line":42},[39,97603,97604],{"class":102},"#identity()\n",[39,97606,97607,97610,97612,97614,97616,97618,97620],{"class":41,"line":74},[39,97608,97609],{"class":45},"np.identity(",[39,97611,89],{"class":56},[39,97613,60],{"class":45},[39,97615,94550],{"class":254},[39,97617,50],{"class":49},[39,97619,1224],{"class":56},[39,97621,209],{"class":45},[19,97623,97624],{},"两个函数是有区别的",[19,97626,97627],{},[269,97628],{"alt":34,"src":97629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,97631,97632],{},[269,97633],{"alt":34,"src":97634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[29,97636,97638],{"className":31,"code":97637,"language":33,"meta":34,"style":34},"# 创建一个 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",[36,97639,97640,97645,97657,97662,97667,97672,97677,97681,97686,97706,97710,97715,97720],{"__ignoreMap":34},[39,97641,97642],{"class":41,"line":42},[39,97643,97644],{"class":102},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[39,97646,97647,97649,97651,97653,97655],{"class":41,"line":74},[39,97648,97573],{"class":45},[39,97650,68],{"class":56},[39,97652,13491],{"class":45},[39,97654,84],{"class":56},[39,97656,209],{"class":45},[39,97658,97659],{"class":41,"line":99},[39,97660,97661],{"class":102},"# 输出:\n",[39,97663,97664],{"class":41,"line":106},[39,97665,97666],{"class":102},"# [[1. 0. 0. 0.]\n",[39,97668,97669],{"class":41,"line":112},[39,97670,97671],{"class":102},"#  [0. 1. 0. 0.]\n",[39,97673,97674],{"class":41,"line":118},[39,97675,97676],{"class":102},"#  [0. 0. 1. 0.]]\n",[39,97678,97679],{"class":41,"line":413},[39,97680,3458],{"emptyLinePlaceholder":1145},[39,97682,97683],{"class":41,"line":419},[39,97684,97685],{"class":102},"# 对角线向上偏移1\n",[39,97687,97688,97690,97692,97694,97696,97698,97700,97702,97704],{"class":41,"line":425},[39,97689,97573],{"class":45},[39,97691,68],{"class":56},[39,97693,13491],{"class":45},[39,97695,84],{"class":56},[39,97697,13491],{"class":45},[39,97699,1694],{"class":254},[39,97701,50],{"class":49},[39,97703,57],{"class":56},[39,97705,209],{"class":45},[39,97707,97708],{"class":41,"line":443},[39,97709,97661],{"class":102},[39,97711,97712],{"class":41,"line":449},[39,97713,97714],{"class":102},"# [[0. 1. 0. 0.]\n",[39,97716,97717],{"class":41,"line":455},[39,97718,97719],{"class":102},"#  [0. 0. 1. 0.]\n",[39,97721,97722],{"class":41,"line":461},[39,97723,97724],{"class":102},"#  [0. 0. 0. 1.]]\n",[1188,97726,97728],{"id":97727},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[29,97730,97732],{"className":31,"code":97731,"language":33,"meta":34,"style":34},"#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",[36,97733,97734,97739,97743,97748,97753,97758,97763,97768,97773,97778,97783],{"__ignoreMap":34},[39,97735,97736],{"class":41,"line":42},[39,97737,97738],{"class":102},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[39,97740,97741],{"class":41,"line":74},[39,97742,96747],{"class":1319},[39,97744,97745],{"class":41,"line":99},[39,97746,97747],{"class":1319},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[39,97749,97750],{"class":41,"line":106},[39,97751,97752],{"class":1319},"参数介绍：\n",[39,97754,97755],{"class":41,"line":112},[39,97756,97757],{"class":1319},"start：序列的起始值\n",[39,97759,97760],{"class":41,"line":118},[39,97761,97762],{"class":1319},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[39,97764,97765],{"class":41,"line":413},[39,97766,97767],{"class":1319},"num：要生长的等步长的样本数量，默认为50\n",[39,97769,97770],{"class":41,"line":419},[39,97771,97772],{"class":1319},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[39,97774,97775],{"class":41,"line":425},[39,97776,97777],{"class":1319},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[39,97779,97780],{"class":41,"line":443},[39,97781,97782],{"class":1319},"dtype：ndarry的数据类型\n",[39,97784,97785],{"class":41,"line":449},[39,97786,96747],{"class":1319},[19,97788,97789],{},[269,97790],{"alt":34,"src":97791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,97793,97794],{},"这里num=是可以省略的",[19,97796,97797],{},"也就是下方两行代码结果是一模一样的",[29,97799,97801],{"className":31,"code":97800,"language":33,"meta":34,"style":34},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[36,97802,97803,97820],{"__ignoreMap":34},[39,97804,97805,97808,97810,97812,97814,97816,97818],{"class":41,"line":42},[39,97806,97807],{"class":45},"np.linspace(",[39,97809,57],{"class":56},[39,97811,60],{"class":45},[39,97813,89],{"class":56},[39,97815,60],{"class":45},[39,97817,89],{"class":56},[39,97819,209],{"class":45},[39,97821,97822,97824,97826,97828,97830,97832,97834,97836,97838],{"class":41,"line":74},[39,97823,97807],{"class":45},[39,97825,57],{"class":56},[39,97827,60],{"class":45},[39,97829,89],{"class":56},[39,97831,60],{"class":45},[39,97833,2723],{"class":254},[39,97835,50],{"class":49},[39,97837,89],{"class":56},[39,97839,209],{"class":45},[1188,97841,97843],{"id":97842},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[29,97845,97847],{"className":31,"code":97846,"language":33,"meta":34,"style":34},"#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",[36,97848,97849,97854,97858,97863,97868,97873,97878,97882,97887,97892,97896],{"__ignoreMap":34},[39,97850,97851],{"class":41,"line":42},[39,97852,97853],{"class":102},"#logspace函数用于创建一个等比数列，格式如下：\n",[39,97855,97856],{"class":41,"line":74},[39,97857,96747],{"class":1319},[39,97859,97860],{"class":41,"line":99},[39,97861,97862],{"class":1319},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[39,97864,97865],{"class":41,"line":106},[39,97866,97867],{"class":1319},"参数为：\n",[39,97869,97870],{"class":41,"line":112},[39,97871,97872],{"class":1319},"start:序列的起始位置为：base**start\n",[39,97874,97875],{"class":41,"line":118},[39,97876,97877],{"class":1319},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[39,97879,97880],{"class":41,"line":413},[39,97881,97767],{"class":1319},[39,97883,97884],{"class":41,"line":419},[39,97885,97886],{"class":1319},"endpoint：是否包含 stop 这个值，默认是 True\n",[39,97888,97889],{"class":41,"line":425},[39,97890,97891],{"class":1319},"base：对数的底数，默认是 10（常见对数）\n",[39,97893,97894],{"class":41,"line":443},[39,97895,97782],{"class":1319},[39,97897,97898],{"class":41,"line":449},[39,97899,96747],{"class":1319},[19,97901,97902],{},[269,97903],{"alt":34,"src":97904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,97906,97907],{},"logspace()函数中的num参数也是可以不写num=的",[19,97909,97910],{},"endpoint是不可以省略的",[1133,97912,97913],{},"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":34,"searchDepth":74,"depth":74,"links":97915},[97916,97920,97925,97929,97933,97934],{"id":96306,"depth":74,"text":96307,"children":97917},[97918,97919],{"id":96310,"depth":99,"text":96311},{"id":96383,"depth":99,"text":96384},{"id":96415,"depth":74,"text":96416,"children":97921},[97922,97923,97924],{"id":96419,"depth":99,"text":96420},{"id":96600,"depth":99,"text":96601},{"id":96678,"depth":99,"text":96679},{"id":96713,"depth":74,"text":96714,"children":97926},[97927,97928],{"id":96717,"depth":99,"text":96718},{"id":96774,"depth":99,"text":96775},{"id":96870,"depth":74,"text":96871,"children":97930},[97931,97932],{"id":96874,"depth":99,"text":96875},{"id":96886,"depth":99,"text":96887},{"id":96920,"depth":74,"text":96921},{"id":96957,"depth":74,"text":96958,"children":97935},[97936,97937,97938,97939,97940,97941,97942,97943],{"id":96961,"depth":99,"text":96962},{"id":97186,"depth":99,"text":97187},{"id":97193,"depth":99,"text":97194},{"id":97402,"depth":99,"text":97403},{"id":97422,"depth":99,"text":97423},{"id":97558,"depth":99,"text":97559},{"id":97727,"depth":99,"text":97728},{"id":97842,"depth":99,"text":97843},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96298,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97950,"title":97951,"body":97952,"description":1142,"extension":1143,"meta":98045,"navigation":1145,"path":98046,"seo":98047,"stem":98048,"__hash__":98049},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97953,"toc":98043},[97954,97957,97960,97963,97966,97969,97972,97975,97978,97981,97984,97987,97989,97992,97995,98000,98003,98006,98040],[10,97955,97951],{"id":97956},"_20魔法命令mprun",[19,97958,97959],{},"逐行分析数据内存的使用情况",[19,97961,97962],{},"语法格式：",[19,97964,97965],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97967,97968],{},"分析结果列如下：",[19,97970,97971],{},"Line行号",[19,97973,97974],{},"Mem usage内存使用大小",[19,97976,97977],{},"increment内存增量",[19,97979,97980],{},"Line content代码内容",[19,97982,97983],{},"补充说明：",[19,97985,97986],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97988,96253],{},[19,97990,97991],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97993,97994],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97996,97997],{},[269,97998],{"alt":34,"src":97999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98001,98002],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98004,98005],{},"这时候需要重新加载模块",[29,98007,98009],{"className":31,"code":98008,"language":33,"meta":34,"style":34},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[36,98010,98011,98016,98023,98028],{"__ignoreMap":34},[39,98012,98013],{"class":41,"line":42},[39,98014,98015],{"class":102},"#重新加载模块\n",[39,98017,98018,98020],{"class":41,"line":74},[39,98019,31447],{"class":49},[39,98021,98022],{"class":45}," importlib\n",[39,98024,98025],{"class":41,"line":99},[39,98026,98027],{"class":45},"importlib.reload(mprun_test)\n",[39,98029,98030,98032,98035,98037],{"class":41,"line":106},[39,98031,1534],{"class":49},[39,98033,98034],{"class":45},"mprun ",[39,98036,1732],{"class":49},[39,98038,98039],{"class":45},"f mprun_test.fun_test mprun_test.fun_test()\n",[1133,98041,98042],{},"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":34,"searchDepth":74,"depth":74,"links":98044},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97951,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98051,"title":98052,"body":98053,"description":1142,"extension":1143,"meta":98070,"navigation":1145,"path":98071,"seo":98072,"stem":98073,"__hash__":98074},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98054,"toc":98068},[98055,98058,98063],[10,98056,98052],{"id":98057},"_3一维数组的索引和切片",[19,98059,98060],{},[269,98061],{"alt":34,"src":98062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,98064,98065],{},[269,98066],{"alt":34,"src":98067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":34,"searchDepth":74,"depth":74,"links":98069},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98052,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98076,"title":98077,"body":98078,"description":1142,"extension":1143,"meta":98561,"navigation":1145,"path":98562,"seo":98563,"stem":98564,"__hash__":98565},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98079,"toc":98559},[98080,98083,98086,98091,98124,98127,98165,98168,98202,98205,98310,98313,98350,98353,98454,98457,98508,98511,98553,98556],[10,98081,98077],{"id":98082},"_4二维数组的索引与切片",[19,98084,98085],{},"①获取指定单个元素",[19,98087,98088],{},[269,98089],{"alt":34,"src":98090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[29,98092,98094],{"className":31,"code":98093,"language":33,"meta":34,"style":34},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[36,98095,98096,98101,98106,98111],{"__ignoreMap":34},[39,98097,98098],{"class":41,"line":42},[39,98099,98100],{"class":102},"#获取元素9\n",[39,98102,98103],{"class":41,"line":74},[39,98104,98105],{"class":102},"#先获取所在行，再获取所在列\n",[39,98107,98108],{"class":41,"line":99},[39,98109,98110],{"class":102},"#数组[行索引号，列索引号]\n",[39,98112,98113,98116,98118,98120,98122],{"class":41,"line":106},[39,98114,98115],{"class":45},"a[",[39,98117,57],{"class":56},[39,98119,60],{"class":45},[39,98121,63],{"class":56},[39,98123,34301],{"class":45},[19,98125,98126],{},"②获取整行元素",[29,98128,98130],{"className":31,"code":98129,"language":33,"meta":34,"style":34},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[36,98131,98132,98137,98142,98150,98155],{"__ignoreMap":34},[39,98133,98134],{"class":41,"line":42},[39,98135,98136],{"class":102},"#获取整行 数组[行索引号]\n",[39,98138,98139],{"class":41,"line":74},[39,98140,98141],{"class":102},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[39,98143,98144,98146,98148],{"class":41,"line":99},[39,98145,98115],{"class":45},[39,98147,63],{"class":56},[39,98149,34301],{"class":45},[39,98151,98152],{"class":41,"line":106},[39,98153,98154],{"class":102},"#也可以负索引获取一行\n",[39,98156,98157,98159,98161,98163],{"class":41,"line":112},[39,98158,98115],{"class":45},[39,98160,1732],{"class":49},[39,98162,57],{"class":56},[39,98164,34301],{"class":45},[19,98166,98167],{},"③获取整列元素",[29,98169,98171],{"className":31,"code":98170,"language":33,"meta":34,"style":34},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[36,98172,98173,98178,98187,98192],{"__ignoreMap":34},[39,98174,98175],{"class":41,"line":42},[39,98176,98177],{"class":102},"#获取整列 数组名[:,列索引]\n",[39,98179,98180,98183,98185],{"class":41,"line":74},[39,98181,98182],{"class":45},"a[:,",[39,98184,63],{"class":56},[39,98186,34301],{"class":45},[39,98188,98189],{"class":41,"line":99},[39,98190,98191],{"class":102},"#也可以负索引获取一列\n",[39,98193,98194,98196,98198,98200],{"class":41,"line":106},[39,98195,98182],{"class":45},[39,98197,1732],{"class":49},[39,98199,57],{"class":56},[39,98201,34301],{"class":45},[19,98203,98204],{},"④部分行部分列的元素",[29,98206,98208],{"className":31,"code":98207,"language":33,"meta":34,"style":34},"#部分行部分列 数组名[行切片，列切片]\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",[36,98209,98210,98215,98225,98229,98233,98238,98243,98247,98259,98263,98267,98272,98277,98282,98287,98291,98296],{"__ignoreMap":34},[39,98211,98212],{"class":41,"line":42},[39,98213,98214],{"class":102},"#部分行部分列 数组名[行切片，列切片]\n",[39,98216,98217,98220,98222],{"class":41,"line":74},[39,98218,98219],{"class":45},"a[:",[39,98221,63],{"class":56},[39,98223,98224],{"class":45},",:]\n",[39,98226,98227],{"class":41,"line":99},[39,98228,94614],{"class":102},[39,98230,98231],{"class":41,"line":106},[39,98232,94978],{"class":1319},[39,98234,98235],{"class":41,"line":112},[39,98236,98237],{"class":1319},"array([[ 1,  2,  3,  4,  5,  6],\n",[39,98239,98240],{"class":41,"line":118},[39,98241,98242],{"class":1319},"       [ 7,  8,  9, 10, 11, 12]])\n",[39,98244,98245],{"class":41,"line":413},[39,98246,94978],{"class":1319},[39,98248,98249,98251,98253,98255,98257],{"class":41,"line":419},[39,98250,98182],{"class":45},[39,98252,57],{"class":56},[39,98254,2057],{"class":45},[39,98256,84],{"class":56},[39,98258,34301],{"class":45},[39,98260,98261],{"class":41,"line":425},[39,98262,94614],{"class":102},[39,98264,98265],{"class":41,"line":443},[39,98266,94978],{"class":1319},[39,98268,98269],{"class":41,"line":449},[39,98270,98271],{"class":1319},"array([[ 2,  3,  4],\n",[39,98273,98274],{"class":41,"line":455},[39,98275,98276],{"class":1319},"       [ 8,  9, 10],\n",[39,98278,98279],{"class":41,"line":461},[39,98280,98281],{"class":1319},"       [14, 15, 16],\n",[39,98283,98284],{"class":41,"line":475},[39,98285,98286],{"class":1319},"       [20, 21, 22]])\n",[39,98288,98289],{"class":41,"line":665},[39,98290,94978],{"class":1319},[39,98292,98293],{"class":41,"line":671},[39,98294,98295],{"class":102},"#对列行同时进行切片，使用了step参数\n",[39,98297,98298,98301,98303,98306,98308],{"class":41,"line":684},[39,98299,98300],{"class":45},"a[::",[39,98302,63],{"class":56},[39,98304,98305],{"class":45},",::",[39,98307,63],{"class":56},[39,98309,34301],{"class":45},[19,98311,98312],{},"⑤同时获取两个元素",[29,98314,98316],{"className":31,"code":98315,"language":33,"meta":34,"style":34},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[36,98317,98318,98323,98328],{"__ignoreMap":34},[39,98319,98320],{"class":41,"line":42},[39,98321,98322],{"class":102},"#同时获取第三行第二列，第四行第一列\n",[39,98324,98325],{"class":41,"line":74},[39,98326,98327],{"class":102},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[39,98329,98330,98333,98335,98337,98339,98341,98343,98345,98347],{"class":41,"line":99},[39,98331,98332],{"class":45},"a[(",[39,98334,63],{"class":56},[39,98336,60],{"class":45},[39,98338,68],{"class":56},[39,98340,43302],{"class":45},[39,98342,57],{"class":56},[39,98344,60],{"class":45},[39,98346,260],{"class":56},[39,98348,98349],{"class":45},")]\n",[19,98351,98352],{},"⑥切片，对行进行反向获取",[29,98354,98356],{"className":31,"code":98355,"language":33,"meta":34,"style":34},"#切片 对所有行进行反向获取\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",[36,98357,98358,98363,98373,98377,98381,98386,98391,98396,98401,98405,98410,98426,98430,98435,98440,98445,98450],{"__ignoreMap":34},[39,98359,98360],{"class":41,"line":42},[39,98361,98362],{"class":102},"#切片 对所有行进行反向获取\n",[39,98364,98365,98367,98369,98371],{"class":41,"line":74},[39,98366,98300],{"class":45},[39,98368,1732],{"class":49},[39,98370,57],{"class":56},[39,98372,34301],{"class":45},[39,98374,98375],{"class":41,"line":99},[39,98376,94614],{"class":102},[39,98378,98379],{"class":41,"line":106},[39,98380,94978],{"class":1319},[39,98382,98383],{"class":41,"line":112},[39,98384,98385],{"class":1319},"array([[19, 20, 21, 22, 23, 24],\n",[39,98387,98388],{"class":41,"line":118},[39,98389,98390],{"class":1319},"       [13, 14, 15, 16, 17, 18],\n",[39,98392,98393],{"class":41,"line":413},[39,98394,98395],{"class":1319},"       [ 7,  8,  9, 10, 11, 12],\n",[39,98397,98398],{"class":41,"line":419},[39,98399,98400],{"class":1319},"       [ 1,  2,  3,  4,  5,  6]])\n",[39,98402,98403],{"class":41,"line":425},[39,98404,94978],{"class":1319},[39,98406,98407],{"class":41,"line":443},[39,98408,98409],{"class":102},"#对行列都进行反向切片获取\n",[39,98411,98412,98414,98416,98418,98420,98422,98424],{"class":41,"line":449},[39,98413,98300],{"class":45},[39,98415,1732],{"class":49},[39,98417,57],{"class":56},[39,98419,98305],{"class":45},[39,98421,1732],{"class":49},[39,98423,57],{"class":56},[39,98425,34301],{"class":45},[39,98427,98428],{"class":41,"line":455},[39,98429,94978],{"class":1319},[39,98431,98432],{"class":41,"line":461},[39,98433,98434],{"class":1319},"array([[24, 23, 22, 21, 20, 19],\n",[39,98436,98437],{"class":41,"line":475},[39,98438,98439],{"class":1319},"       [18, 17, 16, 15, 14, 13],\n",[39,98441,98442],{"class":41,"line":665},[39,98443,98444],{"class":1319},"       [12, 11, 10,  9,  8,  7],\n",[39,98446,98447],{"class":41,"line":671},[39,98448,98449],{"class":1319},"       [ 6,  5,  4,  3,  2,  1]])\n",[39,98451,98452],{"class":41,"line":684},[39,98453,94978],{"class":1319},[19,98455,98456],{},"⑦修改元素",[29,98458,98460],{"className":31,"code":98459,"language":33,"meta":34,"style":34},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[36,98461,98462,98467,98485,98490],{"__ignoreMap":34},[39,98463,98464],{"class":41,"line":42},[39,98465,98466],{"class":102},"#获取前两行和前两列\n",[39,98468,98469,98472,98474,98476,98478,98481,98483],{"class":41,"line":74},[39,98470,98471],{"class":45},"sub_a",[39,98473,50],{"class":49},[39,98475,98219],{"class":45},[39,98477,63],{"class":56},[39,98479,98480],{"class":45},",:",[39,98482,63],{"class":56},[39,98484,34301],{"class":45},[39,98486,98487],{"class":41,"line":99},[39,98488,98489],{"class":102},"#修改sub_a第一个元素的值\n",[39,98491,98492,98495,98497,98499,98501,98503,98505],{"class":41,"line":106},[39,98493,98494],{"class":45},"sub_a[",[39,98496,260],{"class":56},[39,98498,60],{"class":45},[39,98500,260],{"class":56},[39,98502,2138],{"class":45},[39,98504,50],{"class":49},[39,98506,98507],{"class":56},"100\n",[19,98509,98510],{},"⑧数组复制copy()",[29,98512,98514],{"className":31,"code":98513,"language":33,"meta":34,"style":34},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[36,98515,98516,98521,98531,98536],{"__ignoreMap":34},[39,98517,98518],{"class":41,"line":42},[39,98519,98520],{"class":102},"#数组复制\n",[39,98522,98523,98526,98528],{"class":41,"line":74},[39,98524,98525],{"class":45},"copy_a",[39,98527,50],{"class":49},[39,98529,98530],{"class":45},"np.copy(sub_a)\n",[39,98532,98533],{"class":41,"line":99},[39,98534,98535],{"class":102},"#修改copy_a后不影响原数组\n",[39,98537,98538,98541,98543,98545,98547,98549,98551],{"class":41,"line":106},[39,98539,98540],{"class":45},"copy_a[",[39,98542,260],{"class":56},[39,98544,60],{"class":45},[39,98546,260],{"class":56},[39,98548,2138],{"class":45},[39,98550,50],{"class":49},[39,98552,98507],{"class":56},[19,98554,98555],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1133,98557,98558],{},"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":34,"searchDepth":74,"depth":74,"links":98560},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98077,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":98567,"title":98568,"body":98569,"description":1142,"extension":1143,"meta":99060,"navigation":1145,"path":99061,"seo":99062,"stem":99063,"__hash__":99064},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":98570,"toc":99052},[98571,98574,98578,98581,98584,98637,98640,98665,98668,98687,98707,98710,98725,98729,98775,98779,98821,98825,98828,98831,98834,98837,98840,98902,98962,98966,98969,99026,99030,99035,99044,99049],[10,98572,98568],{"id":98573},"_5改变数组的维度",[14,98575,98577],{"id":98576},"_51-使用reshape","5.1 使用reshape()",[19,98579,98580],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,98582,98583],{},"①一维数组转换为二维数组",[29,98585,98587],{"className":31,"code":98586,"language":33,"meta":34,"style":34},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[36,98588,98589,98605,98610,98615,98620],{"__ignoreMap":34},[39,98590,98591,98593,98595,98597,98599,98601,98603],{"class":41,"line":42},[39,98592,46],{"class":45},[39,98594,50],{"class":49},[39,98596,191],{"class":45},[39,98598,57],{"class":56},[39,98600,60],{"class":45},[39,98602,156],{"class":56},[39,98604,209],{"class":45},[39,98606,98607],{"class":41,"line":74},[39,98608,98609],{"class":102},"#将一维数组进行转换\n",[39,98611,98612],{"class":41,"line":99},[39,98613,98614],{"class":102},"#注意点：元素个数不可以变\n",[39,98616,98617],{"class":41,"line":106},[39,98618,98619],{"class":102},"#转换维度要保持一致，不一致就异常！！！\n",[39,98621,98622,98624,98626,98629,98631,98633,98635],{"class":41,"line":112},[39,98623,186],{"class":45},[39,98625,50],{"class":49},[39,98627,98628],{"class":45},"a.reshape(",[39,98630,63],{"class":56},[39,98632,60],{"class":45},[39,98634,94],{"class":56},[39,98636,209],{"class":45},[19,98638,98639],{},"②一维数组转换为三维数组",[29,98641,98643],{"className":31,"code":98642,"language":33,"meta":34,"style":34},"aaa=a.reshape(2,3,2)\n",[36,98644,98645],{"__ignoreMap":34},[39,98646,98647,98649,98651,98653,98655,98657,98659,98661,98663],{"class":41,"line":42},[39,98648,327],{"class":45},[39,98650,50],{"class":49},[39,98652,98628],{"class":45},[39,98654,63],{"class":56},[39,98656,60],{"class":45},[39,98658,68],{"class":56},[39,98660,60],{"class":45},[39,98662,63],{"class":56},[39,98664,209],{"class":45},[19,98666,98667],{},"③二维数组转化为一维数组",[29,98669,98671],{"className":31,"code":98670,"language":33,"meta":34,"style":34},"#知道元素个数：\naa.reshape(12)\n",[36,98672,98673,98678],{"__ignoreMap":34},[39,98674,98675],{"class":41,"line":42},[39,98676,98677],{"class":102},"#知道元素个数：\n",[39,98679,98680,98683,98685],{"class":41,"line":74},[39,98681,98682],{"class":45},"aa.reshape(",[39,98684,1699],{"class":56},[39,98686,209],{"class":45},[29,98688,98690],{"className":31,"code":98689,"language":33,"meta":34,"style":34},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[36,98691,98692,98697],{"__ignoreMap":34},[39,98693,98694],{"class":41,"line":42},[39,98695,98696],{"class":102},"#不知道元素个数，参数传递-1\n",[39,98698,98699,98701,98703,98705],{"class":41,"line":74},[39,98700,98682],{"class":45},[39,98702,1732],{"class":49},[39,98704,57],{"class":56},[39,98706,209],{"class":45},[19,98708,98709],{},"④三维数组转换为一维数组",[29,98711,98713],{"className":31,"code":98712,"language":33,"meta":34,"style":34},"aaa.reshape(-1)\n",[36,98714,98715],{"__ignoreMap":34},[39,98716,98717,98719,98721,98723],{"class":41,"line":42},[39,98718,556],{"class":45},[39,98720,1732],{"class":49},[39,98722,57],{"class":56},[39,98724,209],{"class":45},[14,98726,98728],{"id":98727},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[29,98730,98732],{"className":31,"code":98731,"language":33,"meta":34,"style":34},"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",[36,98733,98734,98761,98766,98770],{"__ignoreMap":34},[39,98735,98736,98738,98740,98742,98744,98746,98748,98750,98752,98754,98756,98758],{"class":41,"line":42},[39,98737,186],{"class":45},[39,98739,50],{"class":49},[39,98741,191],{"class":45},[39,98743,57],{"class":56},[39,98745,60],{"class":45},[39,98747,156],{"class":56},[39,98749,200],{"class":45},[39,98751,63],{"class":56},[39,98753,60],{"class":45},[39,98755,94],{"class":56},[39,98757,1632],{"class":45},[39,98759,98760],{"class":102},"#转换为2行6列的数组\n",[39,98762,98763],{"class":41,"line":74},[39,98764,98765],{"class":45},"aa.revel()\n",[39,98767,98768],{"class":41,"line":99},[39,98769,94614],{"class":102},[39,98771,98772],{"class":41,"line":106},[39,98773,98774],{"class":102},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98776,98778],{"id":98777},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[29,98780,98782],{"className":31,"code":98781,"language":33,"meta":34,"style":34},"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",[36,98783,98784,98808,98813,98817],{"__ignoreMap":34},[39,98785,98786,98788,98790,98792,98794,98796,98798,98800,98802,98804,98806],{"class":41,"line":42},[39,98787,186],{"class":45},[39,98789,50],{"class":49},[39,98791,191],{"class":45},[39,98793,57],{"class":56},[39,98795,60],{"class":45},[39,98797,156],{"class":56},[39,98799,200],{"class":45},[39,98801,63],{"class":56},[39,98803,60],{"class":45},[39,98805,94],{"class":56},[39,98807,209],{"class":45},[39,98809,98810],{"class":41,"line":74},[39,98811,98812],{"class":45},"aa.flatten()\n",[39,98814,98815],{"class":41,"line":99},[39,98816,94614],{"class":102},[39,98818,98819],{"class":41,"line":106},[39,98820,98774],{"class":102},[14,98822,98824],{"id":98823},"_54-使用resize","5.4 使用resize()",[19,98826,98827],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,98829,98830],{},"通过resize方法可以改变数组的维度",[19,98832,98833],{},"#resize修改数组维度",[19,98835,98836],{},"#以元组的形式指定形状",[19,98838,98839],{},"#改变的是原数组",[29,98841,98843],{"className":31,"code":98842,"language":33,"meta":34,"style":34},"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",[36,98844,98845,98861,98881,98894,98898],{"__ignoreMap":34},[39,98846,98847,98849,98851,98853,98855,98857,98859],{"class":41,"line":42},[39,98848,46],{"class":45},[39,98850,50],{"class":49},[39,98852,191],{"class":45},[39,98854,57],{"class":56},[39,98856,60],{"class":45},[39,98858,156],{"class":56},[39,98860,209],{"class":45},[39,98862,98863,98866,98868,98870,98872,98874,98876,98878],{"class":41,"line":74},[39,98864,98865],{"class":45},"a.shape",[39,98867,50],{"class":49},[39,98869,1221],{"class":45},[39,98871,63],{"class":56},[39,98873,60],{"class":45},[39,98875,94],{"class":56},[39,98877,1632],{"class":45},[39,98879,98880],{"class":102},"#改变了原数组\n",[39,98882,98883,98885,98887,98890,98892],{"class":41,"line":99},[39,98884,46],{"class":45},[39,98886,50],{"class":49},[39,98888,98889],{"class":45},"resize((",[39,98891,1699],{"class":56},[39,98893,31552],{"class":45},[39,98895,98896],{"class":41,"line":106},[39,98897,94614],{"class":102},[39,98899,98900],{"class":41,"line":112},[39,98901,98774],{"class":102},[29,98903,98905],{"className":31,"code":98904,"language":33,"meta":34,"style":34},"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",[36,98906,98907,98920,98924,98928,98933,98938,98943,98948,98953,98958],{"__ignoreMap":34},[39,98908,98909,98912,98914,98916,98918],{"class":41,"line":42},[39,98910,98911],{"class":45},"a.resize((",[39,98913,94],{"class":56},[39,98915,60],{"class":45},[39,98917,63],{"class":56},[39,98919,31552],{"class":45},[39,98921,98922],{"class":41,"line":74},[39,98923,94614],{"class":102},[39,98925,98926],{"class":41,"line":99},[39,98927,94978],{"class":1319},[39,98929,98930],{"class":41,"line":106},[39,98931,98932],{"class":1319},"array([[ 1,  2],\n",[39,98934,98935],{"class":41,"line":112},[39,98936,98937],{"class":1319},"       [ 3,  4],\n",[39,98939,98940],{"class":41,"line":118},[39,98941,98942],{"class":1319},"       [ 5,  6],\n",[39,98944,98945],{"class":41,"line":413},[39,98946,98947],{"class":1319},"       [ 7,  8],\n",[39,98949,98950],{"class":41,"line":419},[39,98951,98952],{"class":1319},"       [ 9, 10],\n",[39,98954,98955],{"class":41,"line":425},[39,98956,98957],{"class":1319},"       [11, 12]])\n",[39,98959,98960],{"class":41,"line":443},[39,98961,94978],{"class":1319},[14,98963,98965],{"id":98964},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98967,98968],{},"改变了原数组",[29,98970,98972],{"className":31,"code":98971,"language":33,"meta":34,"style":34},"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",[36,98973,98974,98990,99006,99010,99014,99018,99022],{"__ignoreMap":34},[39,98975,98976,98978,98980,98982,98984,98986,98988],{"class":41,"line":42},[39,98977,46],{"class":45},[39,98979,50],{"class":49},[39,98981,191],{"class":45},[39,98983,57],{"class":56},[39,98985,60],{"class":45},[39,98987,156],{"class":56},[39,98989,209],{"class":45},[39,98991,98992,98994,98996,98998,99000,99002,99004],{"class":41,"line":74},[39,98993,98865],{"class":45},[39,98995,50],{"class":49},[39,98997,1221],{"class":45},[39,98999,63],{"class":56},[39,99001,60],{"class":45},[39,99003,94],{"class":56},[39,99005,209],{"class":45},[39,99007,99008],{"class":41,"line":99},[39,99009,94614],{"class":102},[39,99011,99012],{"class":41,"line":106},[39,99013,94978],{"class":1319},[39,99015,99016],{"class":41,"line":112},[39,99017,98237],{"class":1319},[39,99019,99020],{"class":41,"line":118},[39,99021,98242],{"class":1319},[39,99023,99024],{"class":41,"line":413},[39,99025,94978],{"class":1319},[14,99027,99029],{"id":99028},"_56-重要比较","5.6 重要比较：",[19,99031,99032],{},[269,99033],{"alt":34,"src":99034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99036,99037,99038,99040,99041,99043],{},"口诀：NumPy 函数要么用 ",[36,99039,97012],{},"，要么用 ",[36,99042,32551],{},"，创建结构用 shape，造数据用 size",[19,99045,99046],{},[269,99047],{"alt":34,"src":99048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1133,99050,99051],{},"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":34,"searchDepth":74,"depth":74,"links":99053},[99054,99055,99056,99057,99058,99059],{"id":98576,"depth":74,"text":98577},{"id":98727,"depth":74,"text":98728},{"id":98777,"depth":74,"text":98778},{"id":98823,"depth":74,"text":98824},{"id":98964,"depth":74,"text":98965},{"id":99028,"depth":74,"text":99029},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":98568,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":4,"title":5,"body":99066,"description":1142,"extension":1143,"meta":100040,"navigation":1145,"path":1146,"seo":100041,"stem":1148,"__hash__":1149},{"type":7,"value":99067,"toc":100034},[99068,99070,99072,99074,99076,99078,99138,99140,99176,99178,99254,99256,99260,99280,99282,99286,99290,99292,99294,99434,99436,99628,99630,99632,99634,99698,99700,99704,99706,99708,99784,99786,99788,99790,99858,99860,99864,99866,99942,99944,99946,99948,99950,99952,99954,99956,100032],[10,99069,5],{"id":12},[14,99071,17],{"id":16},[19,99073,21],{},[19,99075,24],{},[19,99077,27],{},[29,99079,99080],{"className":31,"code":32,"language":33,"meta":34,"style":34},[36,99081,99082,99102,99122,99126,99130,99134],{"__ignoreMap":34},[39,99083,99084,99086,99088,99090,99092,99094,99096,99098,99100],{"class":41,"line":42},[39,99085,46],{"class":45},[39,99087,50],{"class":49},[39,99089,53],{"class":45},[39,99091,57],{"class":56},[39,99093,60],{"class":45},[39,99095,63],{"class":56},[39,99097,60],{"class":45},[39,99099,68],{"class":56},[39,99101,71],{"class":45},[39,99103,99104,99106,99108,99110,99112,99114,99116,99118,99120],{"class":41,"line":74},[39,99105,77],{"class":45},[39,99107,50],{"class":49},[39,99109,53],{"class":45},[39,99111,84],{"class":56},[39,99113,60],{"class":45},[39,99115,89],{"class":56},[39,99117,60],{"class":45},[39,99119,94],{"class":56},[39,99121,71],{"class":45},[39,99123,99124],{"class":41,"line":99},[39,99125,103],{"class":102},[39,99127,99128],{"class":41,"line":106},[39,99129,109],{"class":45},[39,99131,99132],{"class":41,"line":112},[39,99133,115],{"class":102},[39,99135,99136],{"class":41,"line":118},[39,99137,121],{"class":102},[19,99139,124],{},[29,99141,99142],{"className":31,"code":127,"language":33,"meta":34,"style":34},[36,99143,99144,99148,99168,99172],{"__ignoreMap":34},[39,99145,99146],{"class":41,"line":42},[39,99147,134],{"class":102},[39,99149,99150,99152,99154,99156,99158,99160,99162,99164,99166],{"class":41,"line":74},[39,99151,139],{"class":45},[39,99153,50],{"class":49},[39,99155,53],{"class":45},[39,99157,146],{"class":56},[39,99159,60],{"class":45},[39,99161,151],{"class":56},[39,99163,60],{"class":45},[39,99165,156],{"class":56},[39,99167,71],{"class":45},[39,99169,99170],{"class":41,"line":99},[39,99171,163],{"class":45},[39,99173,99174],{"class":41,"line":106},[39,99175,168],{"class":45},[19,99177,171],{},[29,99179,99180],{"className":31,"code":174,"language":33,"meta":34,"style":34},[36,99181,99182,99186,99210,99234,99238,99242],{"__ignoreMap":34},[39,99183,99184],{"class":41,"line":42},[39,99185,181],{"class":102},[39,99187,99188,99190,99192,99194,99196,99198,99200,99202,99204,99206,99208],{"class":41,"line":74},[39,99189,186],{"class":45},[39,99191,50],{"class":49},[39,99193,191],{"class":45},[39,99195,57],{"class":56},[39,99197,60],{"class":45},[39,99199,156],{"class":56},[39,99201,200],{"class":45},[39,99203,68],{"class":56},[39,99205,60],{"class":45},[39,99207,84],{"class":56},[39,99209,209],{"class":45},[39,99211,99212,99214,99216,99218,99220,99222,99224,99226,99228,99230,99232],{"class":41,"line":99},[39,99213,214],{"class":45},[39,99215,50],{"class":49},[39,99217,191],{"class":45},[39,99219,221],{"class":56},[39,99221,60],{"class":45},[39,99223,226],{"class":56},[39,99225,200],{"class":45},[39,99227,68],{"class":56},[39,99229,60],{"class":45},[39,99231,84],{"class":56},[39,99233,209],{"class":45},[39,99235,99236],{"class":41,"line":106},[39,99237,241],{"class":102},[39,99239,99240],{"class":41,"line":112},[39,99241,246],{"class":102},[39,99243,99244,99246,99248,99250,99252],{"class":41,"line":118},[39,99245,251],{"class":45},[39,99247,255],{"class":254},[39,99249,50],{"class":49},[39,99251,260],{"class":56},[39,99253,209],{"class":45},[19,99255,265],{},[19,99257,99258],{},[269,99259],{"alt":34,"src":271},[29,99261,99262],{"className":31,"code":274,"language":33,"meta":34,"style":34},[36,99263,99264,99268],{"__ignoreMap":34},[39,99265,99266],{"class":41,"line":42},[39,99267,281],{"class":102},[39,99269,99270,99272,99274,99276,99278],{"class":41,"line":74},[39,99271,251],{"class":45},[39,99273,255],{"class":254},[39,99275,50],{"class":49},[39,99277,57],{"class":56},[39,99279,209],{"class":45},[19,99281,265],{},[19,99283,99284],{},[269,99285],{"alt":34,"src":300},[19,99287,99288],{},[304,99289,306],{},[19,99291,309],{},[19,99293,312],{},[29,99295,99296],{"className":31,"code":315,"language":33,"meta":34,"style":34},[36,99297,99298,99302,99330,99358,99362,99378,99382,99386,99390,99406,99410,99414,99418,99430],{"__ignoreMap":34},[39,99299,99300],{"class":41,"line":42},[39,99301,322],{"class":102},[39,99303,99304,99306,99308,99310,99312,99314,99316,99318,99320,99322,99324,99326,99328],{"class":41,"line":74},[39,99305,327],{"class":45},[39,99307,50],{"class":49},[39,99309,191],{"class":45},[39,99311,57],{"class":56},[39,99313,60],{"class":45},[39,99315,338],{"class":56},[39,99317,200],{"class":45},[39,99319,63],{"class":56},[39,99321,60],{"class":45},[39,99323,68],{"class":56},[39,99325,60],{"class":45},[39,99327,94],{"class":56},[39,99329,209],{"class":45},[39,99331,99332,99334,99336,99338,99340,99342,99344,99346,99348,99350,99352,99354,99356],{"class":41,"line":99},[39,99333,357],{"class":45},[39,99335,50],{"class":49},[39,99337,191],{"class":45},[39,99339,221],{"class":56},[39,99341,60],{"class":45},[39,99343,368],{"class":56},[39,99345,200],{"class":45},[39,99347,63],{"class":56},[39,99349,60],{"class":45},[39,99351,68],{"class":56},[39,99353,60],{"class":45},[39,99355,94],{"class":56},[39,99357,209],{"class":45},[39,99359,99360],{"class":41,"line":106},[39,99361,387],{"class":102},[39,99363,99364,99366,99368,99370,99372,99374,99376],{"class":41,"line":112},[39,99365,392],{"class":45},[39,99367,50],{"class":49},[39,99369,397],{"class":45},[39,99371,255],{"class":254},[39,99373,50],{"class":49},[39,99375,260],{"class":56},[39,99377,209],{"class":45},[39,99379,99380],{"class":41,"line":118},[39,99381,410],{"class":45},[39,99383,99384],{"class":41,"line":413},[39,99385,416],{"class":102},[39,99387,99388],{"class":41,"line":419},[39,99389,422],{"class":102},[39,99391,99392,99394,99396,99398,99400,99402,99404],{"class":41,"line":425},[39,99393,428],{"class":45},[39,99395,50],{"class":49},[39,99397,397],{"class":45},[39,99399,255],{"class":254},[39,99401,50],{"class":49},[39,99403,57],{"class":56},[39,99405,209],{"class":45},[39,99407,99408],{"class":41,"line":443},[39,99409,446],{"class":45},[39,99411,99412],{"class":41,"line":449},[39,99413,452],{"class":102},[39,99415,99416],{"class":41,"line":455},[39,99417,458],{"class":102},[39,99419,99420,99422,99424,99426,99428],{"class":41,"line":461},[39,99421,397],{"class":45},[39,99423,255],{"class":254},[39,99425,50],{"class":49},[39,99427,63],{"class":56},[39,99429,472],{"class":45},[39,99431,99432],{"class":41,"line":475},[39,99433,478],{"class":102},[19,99435,481],{},[29,99437,99438],{"className":31,"code":484,"language":33,"meta":34,"style":34},[36,99439,99440,99444,99472,99500,99524,99548,99552,99564,99568,99572,99584,99588,99592,99604,99608,99612,99624],{"__ignoreMap":34},[39,99441,99442],{"class":41,"line":42},[39,99443,322],{"class":102},[39,99445,99446,99448,99450,99452,99454,99456,99458,99460,99462,99464,99466,99468,99470],{"class":41,"line":74},[39,99447,327],{"class":45},[39,99449,50],{"class":49},[39,99451,191],{"class":45},[39,99453,57],{"class":56},[39,99455,60],{"class":45},[39,99457,338],{"class":56},[39,99459,200],{"class":45},[39,99461,63],{"class":56},[39,99463,60],{"class":45},[39,99465,68],{"class":56},[39,99467,60],{"class":45},[39,99469,94],{"class":56},[39,99471,209],{"class":45},[39,99473,99474,99476,99478,99480,99482,99484,99486,99488,99490,99492,99494,99496,99498],{"class":41,"line":99},[39,99475,357],{"class":45},[39,99477,50],{"class":49},[39,99479,191],{"class":45},[39,99481,221],{"class":56},[39,99483,60],{"class":45},[39,99485,368],{"class":56},[39,99487,200],{"class":45},[39,99489,63],{"class":56},[39,99491,60],{"class":45},[39,99493,68],{"class":56},[39,99495,60],{"class":45},[39,99497,94],{"class":56},[39,99499,209],{"class":45},[39,99501,99502,99504,99506,99508,99510,99512,99514,99516,99518,99520,99522],{"class":41,"line":106},[39,99503,551],{"class":45},[39,99505,50],{"class":49},[39,99507,556],{"class":45},[39,99509,63],{"class":56},[39,99511,60],{"class":45},[39,99513,68],{"class":56},[39,99515,60],{"class":45},[39,99517,68],{"class":56},[39,99519,60],{"class":45},[39,99521,63],{"class":56},[39,99523,209],{"class":45},[39,99525,99526,99528,99530,99532,99534,99536,99538,99540,99542,99544,99546],{"class":41,"line":112},[39,99527,577],{"class":45},[39,99529,50],{"class":49},[39,99531,582],{"class":45},[39,99533,63],{"class":56},[39,99535,60],{"class":45},[39,99537,68],{"class":56},[39,99539,60],{"class":45},[39,99541,68],{"class":56},[39,99543,60],{"class":45},[39,99545,63],{"class":56},[39,99547,209],{"class":45},[39,99549,99550],{"class":41,"line":118},[39,99551,387],{"class":102},[39,99553,99554,99556,99558,99560,99562],{"class":41,"line":413},[39,99555,607],{"class":45},[39,99557,255],{"class":254},[39,99559,50],{"class":49},[39,99561,260],{"class":56},[39,99563,472],{"class":45},[39,99565,99566],{"class":41,"line":419},[39,99567,620],{"class":102},[39,99569,99570],{"class":41,"line":425},[39,99571,422],{"class":102},[39,99573,99574,99576,99578,99580,99582],{"class":41,"line":443},[39,99575,607],{"class":45},[39,99577,255],{"class":254},[39,99579,50],{"class":49},[39,99581,57],{"class":56},[39,99583,472],{"class":45},[39,99585,99586],{"class":41,"line":449},[39,99587,641],{"class":102},[39,99589,99590],{"class":41,"line":455},[39,99591,458],{"class":102},[39,99593,99594,99596,99598,99600,99602],{"class":41,"line":461},[39,99595,607],{"class":45},[39,99597,255],{"class":254},[39,99599,50],{"class":49},[39,99601,63],{"class":56},[39,99603,472],{"class":45},[39,99605,99606],{"class":41,"line":475},[39,99607,662],{"class":102},[39,99609,99610],{"class":41,"line":665},[39,99611,668],{"class":102},[39,99613,99614,99616,99618,99620,99622],{"class":41,"line":671},[39,99615,607],{"class":45},[39,99617,255],{"class":254},[39,99619,50],{"class":49},[39,99621,68],{"class":56},[39,99623,472],{"class":45},[39,99625,99626],{"class":41,"line":684},[39,99627,687],{"class":102},[14,99629,691],{"id":690},[19,99631,694],{},[19,99633,697],{},[29,99635,99636],{"className":31,"code":700,"language":33,"meta":34,"style":34},[36,99637,99638,99662,99686,99690,99694],{"__ignoreMap":34},[39,99639,99640,99642,99644,99646,99648,99650,99652,99654,99656,99658,99660],{"class":41,"line":42},[39,99641,186],{"class":45},[39,99643,50],{"class":49},[39,99645,191],{"class":45},[39,99647,57],{"class":56},[39,99649,60],{"class":45},[39,99651,156],{"class":56},[39,99653,200],{"class":45},[39,99655,68],{"class":56},[39,99657,60],{"class":45},[39,99659,84],{"class":56},[39,99661,209],{"class":45},[39,99663,99664,99666,99668,99670,99672,99674,99676,99678,99680,99682,99684],{"class":41,"line":74},[39,99665,214],{"class":45},[39,99667,50],{"class":49},[39,99669,191],{"class":45},[39,99671,221],{"class":56},[39,99673,60],{"class":45},[39,99675,226],{"class":56},[39,99677,200],{"class":45},[39,99679,68],{"class":56},[39,99681,60],{"class":45},[39,99683,84],{"class":56},[39,99685,209],{"class":45},[39,99687,99688],{"class":41,"line":99},[39,99689,755],{"class":45},[39,99691,99692],{"class":41,"line":106},[39,99693,760],{"class":102},[39,99695,99696],{"class":41,"line":112},[39,99697,765],{"class":102},[19,99699,265],{},[19,99701,99702],{},[269,99703],{"alt":34,"src":772},[19,99705,775],{},[19,99707,778],{},[29,99709,99710],{"className":31,"code":781,"language":33,"meta":34,"style":34},[36,99711,99712,99716,99744,99772,99776,99780],{"__ignoreMap":34},[39,99713,99714],{"class":41,"line":42},[39,99715,322],{"class":102},[39,99717,99718,99720,99722,99724,99726,99728,99730,99732,99734,99736,99738,99740,99742],{"class":41,"line":74},[39,99719,327],{"class":45},[39,99721,50],{"class":49},[39,99723,191],{"class":45},[39,99725,57],{"class":56},[39,99727,60],{"class":45},[39,99729,338],{"class":56},[39,99731,200],{"class":45},[39,99733,63],{"class":56},[39,99735,60],{"class":45},[39,99737,68],{"class":56},[39,99739,60],{"class":45},[39,99741,94],{"class":56},[39,99743,209],{"class":45},[39,99745,99746,99748,99750,99752,99754,99756,99758,99760,99762,99764,99766,99768,99770],{"class":41,"line":99},[39,99747,357],{"class":45},[39,99749,50],{"class":49},[39,99751,191],{"class":45},[39,99753,221],{"class":56},[39,99755,60],{"class":45},[39,99757,368],{"class":56},[39,99759,200],{"class":45},[39,99761,63],{"class":56},[39,99763,60],{"class":45},[39,99765,68],{"class":56},[39,99767,60],{"class":45},[39,99769,94],{"class":56},[39,99771,209],{"class":45},[39,99773,99774],{"class":41,"line":106},[39,99775,848],{"class":102},[39,99777,99778],{"class":41,"line":112},[39,99779,853],{"class":45},[39,99781,99782],{"class":41,"line":118},[39,99783,858],{"class":102},[14,99785,862],{"id":861},[19,99787,865],{},[19,99789,697],{},[29,99791,99792],{"className":31,"code":870,"language":33,"meta":34,"style":34},[36,99793,99794,99818,99842,99846,99850,99854],{"__ignoreMap":34},[39,99795,99796,99798,99800,99802,99804,99806,99808,99810,99812,99814,99816],{"class":41,"line":42},[39,99797,186],{"class":45},[39,99799,50],{"class":49},[39,99801,191],{"class":45},[39,99803,57],{"class":56},[39,99805,60],{"class":45},[39,99807,156],{"class":56},[39,99809,200],{"class":45},[39,99811,68],{"class":56},[39,99813,60],{"class":45},[39,99815,84],{"class":56},[39,99817,209],{"class":45},[39,99819,99820,99822,99824,99826,99828,99830,99832,99834,99836,99838,99840],{"class":41,"line":74},[39,99821,214],{"class":45},[39,99823,50],{"class":49},[39,99825,191],{"class":45},[39,99827,221],{"class":56},[39,99829,60],{"class":45},[39,99831,226],{"class":56},[39,99833,200],{"class":45},[39,99835,68],{"class":56},[39,99837,60],{"class":45},[39,99839,84],{"class":56},[39,99841,209],{"class":45},[39,99843,99844],{"class":41,"line":99},[39,99845,925],{"class":102},[39,99847,99848],{"class":41,"line":106},[39,99849,930],{"class":45},[39,99851,99852],{"class":41,"line":112},[39,99853,935],{"class":102},[39,99855,99856],{"class":41,"line":118},[39,99857,940],{"class":45},[19,99859,265],{},[19,99861,99862],{},[269,99863],{"alt":34,"src":947},[19,99865,778],{},[29,99867,99868],{"className":31,"code":952,"language":33,"meta":34,"style":34},[36,99869,99870,99874,99902,99930,99934,99938],{"__ignoreMap":34},[39,99871,99872],{"class":41,"line":42},[39,99873,322],{"class":102},[39,99875,99876,99878,99880,99882,99884,99886,99888,99890,99892,99894,99896,99898,99900],{"class":41,"line":74},[39,99877,327],{"class":45},[39,99879,50],{"class":49},[39,99881,191],{"class":45},[39,99883,57],{"class":56},[39,99885,60],{"class":45},[39,99887,338],{"class":56},[39,99889,200],{"class":45},[39,99891,63],{"class":56},[39,99893,60],{"class":45},[39,99895,68],{"class":56},[39,99897,60],{"class":45},[39,99899,94],{"class":56},[39,99901,209],{"class":45},[39,99903,99904,99906,99908,99910,99912,99914,99916,99918,99920,99922,99924,99926,99928],{"class":41,"line":99},[39,99905,357],{"class":45},[39,99907,50],{"class":49},[39,99909,191],{"class":45},[39,99911,221],{"class":56},[39,99913,60],{"class":45},[39,99915,368],{"class":56},[39,99917,200],{"class":45},[39,99919,63],{"class":56},[39,99921,60],{"class":45},[39,99923,68],{"class":56},[39,99925,60],{"class":45},[39,99927,94],{"class":56},[39,99929,209],{"class":45},[39,99931,99932],{"class":41,"line":106},[39,99933,1019],{"class":102},[39,99935,99936],{"class":41,"line":112},[39,99937,1024],{"class":45},[39,99939,99940],{"class":41,"line":118},[39,99941,1029],{"class":102},[14,99943,1033],{"id":1032},[19,99945,1036],{},[19,99947,1039],{},[19,99949,1042],{},[19,99951,1045],{},[19,99953,1048],{},[19,99955,1051],{},[29,99957,99958],{"className":31,"code":1054,"language":33,"meta":34,"style":34},[36,99959,99960,99964,99992,100020,100024,100028],{"__ignoreMap":34},[39,99961,99962],{"class":41,"line":42},[39,99963,322],{"class":102},[39,99965,99966,99968,99970,99972,99974,99976,99978,99980,99982,99984,99986,99988,99990],{"class":41,"line":74},[39,99967,327],{"class":45},[39,99969,50],{"class":49},[39,99971,191],{"class":45},[39,99973,57],{"class":56},[39,99975,60],{"class":45},[39,99977,338],{"class":56},[39,99979,200],{"class":45},[39,99981,63],{"class":56},[39,99983,60],{"class":45},[39,99985,68],{"class":56},[39,99987,60],{"class":45},[39,99989,94],{"class":56},[39,99991,209],{"class":45},[39,99993,99994,99996,99998,100000,100002,100004,100006,100008,100010,100012,100014,100016,100018],{"class":41,"line":99},[39,99995,357],{"class":45},[39,99997,50],{"class":49},[39,99999,191],{"class":45},[39,100001,221],{"class":56},[39,100003,60],{"class":45},[39,100005,368],{"class":56},[39,100007,200],{"class":45},[39,100009,63],{"class":56},[39,100011,60],{"class":45},[39,100013,68],{"class":56},[39,100015,60],{"class":45},[39,100017,94],{"class":56},[39,100019,209],{"class":45},[39,100021,100022],{"class":41,"line":106},[39,100023,1121],{"class":102},[39,100025,100026],{"class":41,"line":112},[39,100027,1126],{"class":45},[39,100029,100030],{"class":41,"line":118},[39,100031,1131],{"class":102},[1133,100033,1135],{},{"title":34,"searchDepth":74,"depth":74,"links":100035},[100036,100037,100038,100039],{"id":16,"depth":74,"text":17},{"id":690,"depth":74,"text":691},{"id":861,"depth":74,"text":862},{"id":1032,"depth":74,"text":1033},{},{"title":5,"description":1142},{"id":100043,"title":100044,"body":100045,"description":1142,"extension":1143,"meta":100320,"navigation":1145,"path":100321,"seo":100322,"stem":100323,"__hash__":100324},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100046,"toc":100318},[100047,100050,100053,100147,100150,100153,100156,100159,100162,100165,100168,100171,100315],[10,100048,100044],{"id":100049},"_7数组转置",[19,100051,100052],{},"使用transpose()函数",[29,100054,100056],{"className":31,"code":100055,"language":33,"meta":34,"style":34},"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",[36,100057,100058,100068,100092,100097,100102,100107,100112,100120,100124,100128,100133,100138,100143],{"__ignoreMap":34},[39,100059,100060,100062,100064,100066],{"class":41,"line":42},[39,100061,31447],{"class":49},[39,100063,32435],{"class":45},[39,100065,32438],{"class":49},[39,100067,32441],{"class":45},[39,100069,100070,100072,100074,100076,100078,100080,100082,100084,100086,100088,100090],{"class":41,"line":74},[39,100071,46],{"class":45},[39,100073,50],{"class":49},[39,100075,32772],{"class":45},[39,100077,57],{"class":56},[39,100079,60],{"class":45},[39,100081,156],{"class":56},[39,100083,200],{"class":45},[39,100085,84],{"class":56},[39,100087,60],{"class":45},[39,100089,68],{"class":56},[39,100091,209],{"class":45},[39,100093,100094],{"class":41,"line":99},[39,100095,100096],{"class":102},"#二维数组转置\n",[39,100098,100099],{"class":41,"line":106},[39,100100,100101],{"class":102},"#调用transpose()函数\n",[39,100103,100104],{"class":41,"line":112},[39,100105,100106],{"class":45},"a.transpose()\n",[39,100108,100109],{"class":41,"line":118},[39,100110,100111],{"class":102},"#对于二维数组也可以采用.T来实现\n",[39,100113,100114,100117],{"class":41,"line":413},[39,100115,100116],{"class":45},"a.T",[39,100118,100119],{"class":102},"#与上述代码一样\n",[39,100121,100122],{"class":41,"line":419},[39,100123,94614],{"class":102},[39,100125,100126],{"class":41,"line":425},[39,100127,94978],{"class":1319},[39,100129,100130],{"class":41,"line":443},[39,100131,100132],{"class":1319},"array([[ 1,  4,  7, 10],\n",[39,100134,100135],{"class":41,"line":449},[39,100136,100137],{"class":1319},"       [ 2,  5,  8, 11],\n",[39,100139,100140],{"class":41,"line":455},[39,100141,100142],{"class":1319},"       [ 3,  6,  9, 12]])\n",[39,100144,100145],{"class":41,"line":461},[39,100146,94978],{"class":1319},[19,100148,100149],{},"也可以使用np.transpose()的形式",[19,100151,100152],{},"#多维数组进行转置 np.transpose()",[19,100154,100155],{},"#对二维数组也可以使用np.transpose()进行转置",[19,100157,100158],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,100160,100161],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,100163,100164],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,100166,100167],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,100169,100170],{},"四维及以上的数组也是一样的道理",[29,100172,100174],{"className":31,"code":100173,"language":33,"meta":34,"style":34},"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",[36,100175,100176,100204,100209,100214,100219,100237,100242,100274,100279,100284,100289,100310],{"__ignoreMap":34},[39,100177,100178,100180,100182,100184,100186,100188,100190,100192,100194,100196,100198,100200,100202],{"class":41,"line":42},[39,100179,2018],{"class":45},[39,100181,50],{"class":49},[39,100183,191],{"class":45},[39,100185,57],{"class":56},[39,100187,60],{"class":45},[39,100189,338],{"class":56},[39,100191,200],{"class":45},[39,100193,68],{"class":56},[39,100195,60],{"class":45},[39,100197,94],{"class":56},[39,100199,60],{"class":45},[39,100201,63],{"class":56},[39,100203,209],{"class":45},[39,100205,100206],{"class":41,"line":74},[39,100207,100208],{"class":45},"x.shape\n",[39,100210,100211],{"class":41,"line":99},[39,100212,100213],{"class":102},"#结果：（3,6,2）\n",[39,100215,100216],{"class":41,"line":106},[39,100217,100218],{"class":102},"#使用np.transpose()进行转置 变为(2,6,3)\n",[39,100220,100221,100224,100226,100228,100230,100232,100234],{"class":41,"line":112},[39,100222,100223],{"class":45},"np.transpose(x,(",[39,100225,63],{"class":56},[39,100227,60],{"class":45},[39,100229,57],{"class":56},[39,100231,60],{"class":45},[39,100233,260],{"class":56},[39,100235,100236],{"class":45},")).shape\n",[39,100238,100239],{"class":41,"line":118},[39,100240,100241],{"class":102},"#结果：(2,6,3)\n",[39,100243,100244,100246,100248,100250,100252,100254,100256,100258,100260,100262,100264,100266,100268,100270,100272],{"class":41,"line":413},[39,100245,551],{"class":45},[39,100247,50],{"class":49},[39,100249,191],{"class":45},[39,100251,57],{"class":56},[39,100253,60],{"class":45},[39,100255,338],{"class":56},[39,100257,200],{"class":45},[39,100259,68],{"class":56},[39,100261,60],{"class":45},[39,100263,63],{"class":56},[39,100265,60],{"class":45},[39,100267,57],{"class":56},[39,100269,60],{"class":45},[39,100271,94],{"class":56},[39,100273,209],{"class":45},[39,100275,100276],{"class":41,"line":419},[39,100277,100278],{"class":45},"aaaa.shape\n",[39,100280,100281],{"class":41,"line":425},[39,100282,100283],{"class":102},"#结果：（3，2，1，6）\n",[39,100285,100286],{"class":41,"line":443},[39,100287,100288],{"class":102},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[39,100290,100291,100294,100296,100298,100300,100302,100304,100306,100308],{"class":41,"line":449},[39,100292,100293],{"class":45},"np.transpose(aaaa,(",[39,100295,57],{"class":56},[39,100297,60],{"class":45},[39,100299,63],{"class":56},[39,100301,60],{"class":45},[39,100303,260],{"class":56},[39,100305,60],{"class":45},[39,100307,68],{"class":56},[39,100309,100236],{"class":45},[39,100311,100312],{"class":41,"line":455},[39,100313,100314],{"class":102},"#结果：(2,1,3,6)\n",[1133,100316,100317],{},"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":34,"searchDepth":74,"depth":74,"links":100319},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100044,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":100326,"title":100327,"body":100328,"description":1142,"extension":1143,"meta":101062,"navigation":1145,"path":101063,"seo":101064,"stem":101065,"__hash__":101066},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":100329,"toc":101060},[100330,100333,100336,100339,100342,100345,100348,100351,100354,100463,100466,100469,101057],[10,100331,100327],{"id":100332},"_8数组分割",[19,100334,100335],{},"split分割",[19,100337,100338],{},"numpy.split(ary,indics_or_sections,axis)",[19,100340,100341],{},"解释：",[19,100343,100344],{},"ary:被分割的数组",[19,100346,100347],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,100349,100350],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,100352,100353],{},"①一维数组的分割",[29,100355,100357],{"className":31,"code":100356,"language":33,"meta":34,"style":34},"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",[36,100358,100359,100375,100380,100389,100393,100398,100406,100410,100415,100420,100433,100437,100442,100454,100458],{"__ignoreMap":34},[39,100360,100361,100363,100365,100367,100369,100371,100373],{"class":41,"line":42},[39,100362,46],{"class":45},[39,100364,50],{"class":49},[39,100366,191],{"class":45},[39,100368,57],{"class":56},[39,100370,60],{"class":45},[39,100372,1623],{"class":56},[39,100374,209],{"class":45},[39,100376,100377],{"class":41,"line":74},[39,100378,100379],{"class":102},"#如果传入整数，必须能够平分，否则会报错\n",[39,100381,100382,100385,100387],{"class":41,"line":99},[39,100383,100384],{"class":45},"np.split(a,",[39,100386,63],{"class":56},[39,100388,209],{"class":45},[39,100390,100391],{"class":41,"line":106},[39,100392,94614],{"class":102},[39,100394,100395],{"class":41,"line":112},[39,100396,100397],{"class":102},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[39,100399,100400,100402,100404],{"class":41,"line":118},[39,100401,100384],{"class":45},[39,100403,84],{"class":56},[39,100405,209],{"class":45},[39,100407,100408],{"class":41,"line":413},[39,100409,94614],{"class":102},[39,100411,100412],{"class":41,"line":419},[39,100413,100414],{"class":102},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[39,100416,100417],{"class":41,"line":425},[39,100418,100419],{"class":102},"#传入数组\n",[39,100421,100422,100425,100427,100429,100431],{"class":41,"line":443},[39,100423,100424],{"class":45},"np.split(a,[",[39,100426,68],{"class":56},[39,100428,60],{"class":45},[39,100430,89],{"class":56},[39,100432,71],{"class":45},[39,100434,100435],{"class":41,"line":449},[39,100436,94614],{"class":102},[39,100438,100439],{"class":41,"line":455},[39,100440,100441],{"class":102},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[39,100443,100444,100446,100448,100450,100452],{"class":41,"line":461},[39,100445,100424],{"class":45},[39,100447,89],{"class":56},[39,100449,60],{"class":45},[39,100451,1573],{"class":56},[39,100453,71],{"class":45},[39,100455,100456],{"class":41,"line":475},[39,100457,94614],{"class":102},[39,100459,100460],{"class":41,"line":665},[39,100461,100462],{"class":102},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,100464,100465],{},"②二维数组的分割",[19,100467,100468],{},"使用split()",[29,100470,100472],{"className":31,"code":100471,"language":33,"meta":34,"style":34},"#二维数组分割\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",[36,100473,100474,100479,100503,100508,100517,100521,100525,100530,100535,100540,100545,100550,100555,100560,100564,100577,100581,100585,100589,100593,100597,100602,100607,100612,100616,100621,100637,100641,100645,100650,100655,100660,100665,100670,100675,100680,100685,100690,100695,100700,100705,100710,100715,100720,100725,100730,100735,100739,100743,100763,100767,100771,100776,100781,100786,100791,100796,100801,100806,100811,100816,100821,100826,100831,100836,100841,100846,100851,100856,100861,100865,100870,100879,100883,100887,100891,100895,100899,100903,100907,100911,100915,100924,100928,100932,100936,100940,100944,100948,100952,100956,100960,100964,100968,100972,100976,100980,100984,100988,100992,100996,101000,101004,101008,101021,101025,101029,101033,101037,101041,101045,101049,101053],{"__ignoreMap":34},[39,100475,100476],{"class":41,"line":42},[39,100477,100478],{"class":102},"#二维数组分割\n",[39,100480,100481,100483,100485,100487,100489,100491,100493,100495,100497,100499,100501],{"class":41,"line":74},[39,100482,186],{"class":45},[39,100484,50],{"class":49},[39,100486,191],{"class":45},[39,100488,57],{"class":56},[39,100490,60],{"class":45},[39,100492,338],{"class":56},[39,100494,200],{"class":45},[39,100496,94],{"class":56},[39,100498,60],{"class":45},[39,100500,94],{"class":56},[39,100502,209],{"class":45},[39,100504,100505],{"class":41,"line":99},[39,100506,100507],{"class":102},"#默认axis=0  传入整数平均分,按行来的\n",[39,100509,100510,100513,100515],{"class":41,"line":106},[39,100511,100512],{"class":45},"np.split(aa,",[39,100514,68],{"class":56},[39,100516,209],{"class":45},[39,100518,100519],{"class":41,"line":112},[39,100520,96813],{"class":102},[39,100522,100523],{"class":41,"line":118},[39,100524,94978],{"class":1319},[39,100526,100527],{"class":41,"line":413},[39,100528,100529],{"class":1319},"[array([[ 1,  2,  3,  4,  5,  6],\n",[39,100531,100532],{"class":41,"line":419},[39,100533,100534],{"class":1319},"        [ 7,  8,  9, 10, 11, 12]]),\n",[39,100536,100537],{"class":41,"line":425},[39,100538,100539],{"class":1319}," array([[13, 14, 15, 16, 17, 18],\n",[39,100541,100542],{"class":41,"line":443},[39,100543,100544],{"class":1319},"        [19, 20, 21, 22, 23, 24]]),\n",[39,100546,100547],{"class":41,"line":449},[39,100548,100549],{"class":1319}," array([[25, 26, 27, 28, 29, 30],\n",[39,100551,100552],{"class":41,"line":455},[39,100553,100554],{"class":1319},"        [31, 32, 33, 34, 35, 36]])]\n",[39,100556,100557],{"class":41,"line":461},[39,100558,100559],{"class":1319}," '''\n",[39,100561,100562],{"class":41,"line":475},[39,100563,100419],{"class":102},[39,100565,100566,100569,100571,100573,100575],{"class":41,"line":665},[39,100567,100568],{"class":45},"np.split(aa,[",[39,100570,63],{"class":56},[39,100572,60],{"class":45},[39,100574,89],{"class":56},[39,100576,71],{"class":45},[39,100578,100579],{"class":41,"line":671},[39,100580,96813],{"class":102},[39,100582,100583],{"class":41,"line":684},[39,100584,94978],{"class":1319},[39,100586,100587],{"class":41,"line":2732},[39,100588,100529],{"class":1319},[39,100590,100591],{"class":41,"line":2737},[39,100592,100534],{"class":1319},[39,100594,100595],{"class":41,"line":2751},[39,100596,100539],{"class":1319},[39,100598,100599],{"class":41,"line":2756},[39,100600,100601],{"class":1319},"        [19, 20, 21, 22, 23, 24],\n",[39,100603,100604],{"class":41,"line":2785},[39,100605,100606],{"class":1319},"        [25, 26, 27, 28, 29, 30]]),\n",[39,100608,100609],{"class":41,"line":2790},[39,100610,100611],{"class":1319}," array([[31, 32, 33, 34, 35, 36]])]\n",[39,100613,100614],{"class":41,"line":2807},[39,100615,94978],{"class":1319},[39,100617,100618],{"class":41,"line":2812},[39,100619,100620],{"class":102},"#axis=1 按照列来分\n",[39,100622,100623,100625,100627,100629,100631,100633,100635],{"class":41,"line":2817},[39,100624,100512],{"class":45},[39,100626,68],{"class":56},[39,100628,60],{"class":45},[39,100630,255],{"class":254},[39,100632,50],{"class":49},[39,100634,57],{"class":56},[39,100636,209],{"class":45},[39,100638,100639],{"class":41,"line":2822},[39,100640,96813],{"class":102},[39,100642,100643],{"class":41,"line":2836},[39,100644,94978],{"class":1319},[39,100646,100647],{"class":41,"line":2841},[39,100648,100649],{"class":1319},"[array([[ 1,  2],\n",[39,100651,100652],{"class":41,"line":3635},[39,100653,100654],{"class":1319},"        [ 7,  8],\n",[39,100656,100657],{"class":41,"line":3649},[39,100658,100659],{"class":1319},"        [13, 14],\n",[39,100661,100662],{"class":41,"line":3657},[39,100663,100664],{"class":1319},"        [19, 20],\n",[39,100666,100667],{"class":41,"line":3662},[39,100668,100669],{"class":1319},"        [25, 26],\n",[39,100671,100672],{"class":41,"line":3668},[39,100673,100674],{"class":1319},"        [31, 32]]),\n",[39,100676,100677],{"class":41,"line":3674},[39,100678,100679],{"class":1319}," array([[ 3,  4],\n",[39,100681,100682],{"class":41,"line":3679},[39,100683,100684],{"class":1319},"        [ 9, 10],\n",[39,100686,100687],{"class":41,"line":9004},[39,100688,100689],{"class":1319},"        [15, 16],\n",[39,100691,100692],{"class":41,"line":9028},[39,100693,100694],{"class":1319},"        [21, 22],\n",[39,100696,100697],{"class":41,"line":9033},[39,100698,100699],{"class":1319},"        [27, 28],\n",[39,100701,100702],{"class":41,"line":9039},[39,100703,100704],{"class":1319},"        [33, 34]]),\n",[39,100706,100707],{"class":41,"line":9066},[39,100708,100709],{"class":1319}," array([[ 5,  6],\n",[39,100711,100712],{"class":41,"line":9071},[39,100713,100714],{"class":1319},"        [11, 12],\n",[39,100716,100717],{"class":41,"line":9077},[39,100718,100719],{"class":1319},"        [17, 18],\n",[39,100721,100722],{"class":41,"line":9089},[39,100723,100724],{"class":1319},"        [23, 24],\n",[39,100726,100727],{"class":41,"line":9101},[39,100728,100729],{"class":1319},"        [29, 30],\n",[39,100731,100732],{"class":41,"line":9113},[39,100733,100734],{"class":1319},"        [35, 36]])]\n",[39,100736,100737],{"class":41,"line":10772},[39,100738,100559],{"class":1319},[39,100740,100741],{"class":41,"line":10797},[39,100742,100419],{"class":102},[39,100744,100745,100747,100749,100751,100753,100755,100757,100759,100761],{"class":41,"line":10820},[39,100746,100568],{"class":45},[39,100748,57],{"class":56},[39,100750,60],{"class":45},[39,100752,63],{"class":56},[39,100754,42664],{"class":45},[39,100756,255],{"class":254},[39,100758,50],{"class":49},[39,100760,57],{"class":56},[39,100762,209],{"class":45},[39,100764,100765],{"class":41,"line":10844},[39,100766,94614],{"class":102},[39,100768,100769],{"class":41,"line":10849},[39,100770,94978],{"class":1319},[39,100772,100773],{"class":41,"line":10854},[39,100774,100775],{"class":1319},"[array([[ 1],\n",[39,100777,100778],{"class":41,"line":10859},[39,100779,100780],{"class":1319},"        [ 7],\n",[39,100782,100783],{"class":41,"line":10868},[39,100784,100785],{"class":1319},"        [13],\n",[39,100787,100788],{"class":41,"line":10873},[39,100789,100790],{"class":1319},"        [19],\n",[39,100792,100793],{"class":41,"line":10879},[39,100794,100795],{"class":1319},"        [25],\n",[39,100797,100798],{"class":41,"line":10900},[39,100799,100800],{"class":1319},"        [31]]),\n",[39,100802,100803],{"class":41,"line":10906},[39,100804,100805],{"class":1319}," array([[ 2],\n",[39,100807,100808],{"class":41,"line":10920},[39,100809,100810],{"class":1319},"        [ 8],\n",[39,100812,100813],{"class":41,"line":10926},[39,100814,100815],{"class":1319},"        [14],\n",[39,100817,100818],{"class":41,"line":10953},[39,100819,100820],{"class":1319},"        [20],\n",[39,100822,100823],{"class":41,"line":10962},[39,100824,100825],{"class":1319},"        [26],\n",[39,100827,100828],{"class":41,"line":10968},[39,100829,100830],{"class":1319},"        [32]]),\n",[39,100832,100833],{"class":41,"line":10976},[39,100834,100835],{"class":1319}," array([[ 3,  4,  5,  6],\n",[39,100837,100838],{"class":41,"line":10981},[39,100839,100840],{"class":1319},"        [ 9, 10, 11, 12],\n",[39,100842,100843],{"class":41,"line":17660},[39,100844,100845],{"class":1319},"        [15, 16, 17, 18],\n",[39,100847,100848],{"class":41,"line":17666},[39,100849,100850],{"class":1319},"        [21, 22, 23, 24],\n",[39,100852,100853],{"class":41,"line":17689},[39,100854,100855],{"class":1319},"        [27, 28, 29, 30],\n",[39,100857,100858],{"class":41,"line":17695},[39,100859,100860],{"class":1319},"        [33, 34, 35, 36]])]\n",[39,100862,100863],{"class":41,"line":17718},[39,100864,94978],{"class":1319},[39,100866,100867],{"class":41,"line":17732},[39,100868,100869],{"class":102},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[39,100871,100872,100875,100877],{"class":41,"line":17752},[39,100873,100874],{"class":45},"np.vsplit(aa,",[39,100876,68],{"class":56},[39,100878,209],{"class":45},[39,100880,100881],{"class":41,"line":17758},[39,100882,94614],{"class":102},[39,100884,100885],{"class":41,"line":17769},[39,100886,94978],{"class":1319},[39,100888,100889],{"class":41,"line":17792},[39,100890,100529],{"class":1319},[39,100892,100893],{"class":41,"line":17814},[39,100894,100534],{"class":1319},[39,100896,100897],{"class":41,"line":17819},[39,100898,100539],{"class":1319},[39,100900,100901],{"class":41,"line":17825},[39,100902,100544],{"class":1319},[39,100904,100905],{"class":41,"line":17839},[39,100906,100549],{"class":1319},[39,100908,100909],{"class":41,"line":17852},[39,100910,100554],{"class":1319},[39,100912,100913],{"class":41,"line":17857},[39,100914,94978],{"class":1319},[39,100916,100917,100920,100922],{"class":41,"line":17871},[39,100918,100919],{"class":45},"np.hsplit(aa,",[39,100921,68],{"class":56},[39,100923,209],{"class":45},[39,100925,100926],{"class":41,"line":17876},[39,100927,94614],{"class":102},[39,100929,100930],{"class":41,"line":17882},[39,100931,94978],{"class":1319},[39,100933,100934],{"class":41,"line":17887},[39,100935,100649],{"class":1319},[39,100937,100938],{"class":41,"line":17901},[39,100939,100654],{"class":1319},[39,100941,100942],{"class":41,"line":17906},[39,100943,100659],{"class":1319},[39,100945,100946],{"class":41,"line":17911},[39,100947,100664],{"class":1319},[39,100949,100950],{"class":41,"line":17925},[39,100951,100669],{"class":1319},[39,100953,100954],{"class":41,"line":17937},[39,100955,100674],{"class":1319},[39,100957,100958],{"class":41,"line":17942},[39,100959,100679],{"class":1319},[39,100961,100962],{"class":41,"line":17955},[39,100963,100684],{"class":1319},[39,100965,100966],{"class":41,"line":17960},[39,100967,100689],{"class":1319},[39,100969,100970],{"class":41,"line":17965},[39,100971,100694],{"class":1319},[39,100973,100974],{"class":41,"line":17970},[39,100975,100699],{"class":1319},[39,100977,100978],{"class":41,"line":17983},[39,100979,100704],{"class":1319},[39,100981,100982],{"class":41,"line":17988},[39,100983,100709],{"class":1319},[39,100985,100986],{"class":41,"line":33688},[39,100987,100714],{"class":1319},[39,100989,100990],{"class":41,"line":33694},[39,100991,100719],{"class":1319},[39,100993,100994],{"class":41,"line":33700},[39,100995,100724],{"class":1319},[39,100997,100998],{"class":41,"line":33706},[39,100999,100729],{"class":1319},[39,101001,101002],{"class":41,"line":33712},[39,101003,100734],{"class":1319},[39,101005,101006],{"class":41,"line":33723},[39,101007,94978],{"class":1319},[39,101009,101010,101013,101015,101017,101019],{"class":41,"line":33729},[39,101011,101012],{"class":45},"np.vsplit(aa,[",[39,101014,63],{"class":56},[39,101016,60],{"class":45},[39,101018,89],{"class":56},[39,101020,71],{"class":45},[39,101022,101023],{"class":41,"line":33749},[39,101024,94614],{"class":102},[39,101026,101027],{"class":41,"line":33755},[39,101028,94978],{"class":1319},[39,101030,101031],{"class":41,"line":33766},[39,101032,100529],{"class":1319},[39,101034,101035],{"class":41,"line":33772},[39,101036,100534],{"class":1319},[39,101038,101039],{"class":41,"line":33778},[39,101040,100539],{"class":1319},[39,101042,101043],{"class":41,"line":33784},[39,101044,100601],{"class":1319},[39,101046,101047],{"class":41,"line":33790},[39,101048,100606],{"class":1319},[39,101050,101051],{"class":41,"line":33796},[39,101052,100611],{"class":1319},[39,101054,101055],{"class":41,"line":33802},[39,101056,100559],{"class":1319},[1133,101058,101059],{},"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":34,"searchDepth":74,"depth":74,"links":101061},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":100327,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101068,"title":101069,"body":101070,"description":1142,"extension":1143,"meta":101564,"navigation":1145,"path":101565,"seo":101566,"stem":101567,"__hash__":101568},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101071,"toc":101555},[101072,101075,101078,101103,101107,101166,101218,101222,101224,101260,101314,101316,101354,101425,101429,101434,101438,101441,101474,101477,101481,101484,101487,101490,101493,101498,101502,101505,101508,101511,101514,101519,101523,101528,101531,101552],[10,101073,101069],{"id":101074},"_9数学函数",[19,101076,101077],{},"补充回顾：python的列表推导式",[29,101079,101081],{"className":31,"code":101080,"language":33,"meta":34,"style":34},"[1\u002Fi for i in a]\n",[36,101082,101083],{"__ignoreMap":34},[39,101084,101085,101087,101089,101091,101094,101096,101098,101100],{"class":41,"line":42},[39,101086,2088],{"class":45},[39,101088,57],{"class":56},[39,101090,1784],{"class":49},[39,101092,101093],{"class":45},"i ",[39,101095,4083],{"class":49},[39,101097,10494],{"class":45},[39,101099,27100],{"class":49},[39,101101,101102],{"class":45}," a]\n",[14,101104,101106],{"id":101105},"_91-求倒数","9.1 求倒数",[29,101108,101110],{"className":31,"code":101109,"language":33,"meta":34,"style":34},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[36,101111,101112,101117,101145,101157],{"__ignoreMap":34},[39,101113,101114],{"class":41,"line":42},[39,101115,101116],{"class":102},"#数组求倒数\n",[39,101118,101119,101121,101123,101125,101127,101129,101131,101133,101135,101137,101139,101141,101143],{"class":41,"line":74},[39,101120,46],{"class":45},[39,101122,50],{"class":49},[39,101124,2088],{"class":45},[39,101126,57],{"class":56},[39,101128,60],{"class":45},[39,101130,63],{"class":56},[39,101132,60],{"class":45},[39,101134,68],{"class":56},[39,101136,60],{"class":45},[39,101138,84],{"class":56},[39,101140,60],{"class":45},[39,101142,89],{"class":56},[39,101144,34301],{"class":45},[39,101146,101147,101149,101151,101154],{"class":41,"line":99},[39,101148,77],{"class":45},[39,101150,50],{"class":49},[39,101152,101153],{"class":45},"np.array(a)",[39,101155,101156],{"class":102},"#将列表转换为数组\n",[39,101158,101159,101161,101163],{"class":41,"line":106},[39,101160,57],{"class":56},[39,101162,1784],{"class":49},[39,101164,101165],{"class":45},"b\n",[29,101167,101169],{"className":31,"code":101168,"language":33,"meta":34,"style":34},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[36,101170,101171,101199,101208,101213],{"__ignoreMap":34},[39,101172,101173,101175,101177,101179,101181,101183,101185,101187,101189,101191,101193,101195,101197],{"class":41,"line":42},[39,101174,46],{"class":45},[39,101176,50],{"class":49},[39,101178,2088],{"class":45},[39,101180,57],{"class":56},[39,101182,60],{"class":45},[39,101184,63],{"class":56},[39,101186,60],{"class":45},[39,101188,68],{"class":56},[39,101190,60],{"class":45},[39,101192,84],{"class":56},[39,101194,60],{"class":45},[39,101196,89],{"class":56},[39,101198,34301],{"class":45},[39,101200,101201,101203,101205],{"class":41,"line":74},[39,101202,77],{"class":45},[39,101204,50],{"class":49},[39,101206,101207],{"class":45},"np.array(a)\n",[39,101209,101210],{"class":41,"line":99},[39,101211,101212],{"class":102},"#调用numpy中的函数reciprocal()\n",[39,101214,101215],{"class":41,"line":106},[39,101216,101217],{"class":45},"np.reciprocal(b)\n",[14,101219,101221],{"id":101220},"_92-求平方","9.2 求平方",[19,101223,95580],{},[29,101225,101227],{"className":31,"code":101226,"language":33,"meta":34,"style":34},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[36,101228,101229,101234,101239,101255],{"__ignoreMap":34},[39,101230,101231],{"class":41,"line":42},[39,101232,101233],{"class":102},"#square()，求平方\n",[39,101235,101236],{"class":41,"line":74},[39,101237,101238],{"class":102},"#一维数组\n",[39,101240,101241,101243,101245,101247,101249,101251,101253],{"class":41,"line":99},[39,101242,46],{"class":45},[39,101244,50],{"class":49},[39,101246,191],{"class":45},[39,101248,57],{"class":56},[39,101250,60],{"class":45},[39,101252,146],{"class":56},[39,101254,209],{"class":45},[39,101256,101257],{"class":41,"line":106},[39,101258,101259],{"class":45},"np.square(a)\n",[29,101261,101263],{"className":31,"code":101262,"language":33,"meta":34,"style":34},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[36,101264,101265,101270,101275,101296],{"__ignoreMap":34},[39,101266,101267],{"class":41,"line":42},[39,101268,101269],{"class":102},"#或者通过循环遍历的形式来计算\n",[39,101271,101272],{"class":41,"line":74},[39,101273,101274],{"class":102},"#这是一个列表\n",[39,101276,101277,101280,101282,101284,101286,101288,101290,101293],{"class":41,"line":99},[39,101278,101279],{"class":45},"[i",[39,101281,1657],{"class":49},[39,101283,101093],{"class":45},[39,101285,4083],{"class":49},[39,101287,10494],{"class":45},[39,101289,27100],{"class":49},[39,101291,101292],{"class":45}," a]",[39,101294,101295],{"class":102},"#这个求完之后在数列当中\n",[39,101297,101298,101301,101303,101305,101307,101309,101311],{"class":41,"line":106},[39,101299,101300],{"class":45},"np.array([i",[39,101302,1657],{"class":49},[39,101304,101093],{"class":45},[39,101306,4083],{"class":49},[39,101308,10494],{"class":45},[39,101310,27100],{"class":49},[39,101312,101313],{"class":45}," a])\n",[19,101315,94342],{},[29,101317,101319],{"className":31,"code":101318,"language":33,"meta":34,"style":34},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[36,101320,101321,101325,101349],{"__ignoreMap":34},[39,101322,101323],{"class":41,"line":42},[39,101324,94352],{"class":102},[39,101326,101327,101329,101331,101333,101335,101337,101339,101341,101343,101345,101347],{"class":41,"line":74},[39,101328,186],{"class":45},[39,101330,50],{"class":49},[39,101332,191],{"class":45},[39,101334,57],{"class":56},[39,101336,60],{"class":45},[39,101338,156],{"class":56},[39,101340,200],{"class":45},[39,101342,84],{"class":56},[39,101344,60],{"class":45},[39,101346,68],{"class":56},[39,101348,209],{"class":45},[39,101350,101351],{"class":41,"line":99},[39,101352,101353],{"class":45},"np.square(aa)\n",[29,101355,101357],{"className":31,"code":101356,"language":33,"meta":34,"style":34},"#传统的方式\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",[36,101358,101359,101364,101373,101389,101405,101420],{"__ignoreMap":34},[39,101360,101361],{"class":41,"line":42},[39,101362,101363],{"class":102},"#传统的方式\n",[39,101365,101366,101368,101370],{"class":41,"line":74},[39,101367,214],{"class":45},[39,101369,50],{"class":49},[39,101371,101372],{"class":45},"np.empty_like(aa)\n",[39,101374,101375,101377,101379,101381,101383,101385,101387],{"class":41,"line":99},[39,101376,4083],{"class":49},[39,101378,10494],{"class":45},[39,101380,27100],{"class":49},[39,101382,33498],{"class":56},[39,101384,1221],{"class":45},[39,101386,84],{"class":56},[39,101388,31841],{"class":45},[39,101390,101391,101393,101395,101397,101399,101401,101403],{"class":41,"line":106},[39,101392,4259],{"class":49},[39,101394,10556],{"class":45},[39,101396,27100],{"class":49},[39,101398,33498],{"class":56},[39,101400,1221],{"class":45},[39,101402,68],{"class":56},[39,101404,31841],{"class":45},[39,101406,101407,101410,101412,101415,101417],{"class":41,"line":112},[39,101408,101409],{"class":45},"        bb[i,j]",[39,101411,50],{"class":49},[39,101413,101414],{"class":45},"aa[i,j]",[39,101416,1657],{"class":49},[39,101418,101419],{"class":45},"aa[i,j]\n",[39,101421,101422],{"class":41,"line":118},[39,101423,101424],{"class":45},"bb\n",[14,101426,101428],{"id":101427},"_93-求各元素的符号","9.3 求各元素的符号",[19,101430,101431],{},[269,101432],{"alt":34,"src":101433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,101435,101437],{"id":101436},"_94-modf函数","9.4 modf函数",[19,101439,101440],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[29,101442,101444],{"className":31,"code":101443,"language":33,"meta":34,"style":34},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[36,101445,101446,101469],{"__ignoreMap":34},[39,101447,101448,101450,101452,101454,101456,101458,101460,101462,101464,101467],{"class":41,"line":42},[39,101449,46],{"class":45},[39,101451,50],{"class":49},[39,101453,191],{"class":45},[39,101455,1732],{"class":49},[39,101457,146],{"class":56},[39,101459,60],{"class":45},[39,101461,146],{"class":56},[39,101463,60],{"class":45},[39,101465,101466],{"class":56},"0.3",[39,101468,209],{"class":45},[39,101470,101471],{"class":41,"line":74},[39,101472,101473],{"class":45},"np.modf(a)\n",[19,101475,101476],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,101478,101480],{"id":101479},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,101482,101483],{},"np.cell()",[19,101485,101486],{},"np.floor()",[19,101488,101489],{},"np.rint()",[19,101491,101492],{},"对各元素分别向上取整、向下取整、四舍五入",[19,101494,101495],{},[269,101496],{"alt":34,"src":101497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,101499,101501],{"id":101500},"_96-around函数","9.6 around()函数",[19,101503,101504],{},"around()函数也可以实现对数的小数位数进行操作",[19,101506,101507],{},"其中的参数：",[19,101509,101510],{},"1.要传的数组",[19,101512,101513],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,101515,101516],{},[269,101517],{"alt":34,"src":101518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,101520,101522],{"id":101521},"_97-三角函数","9.7 三角函数",[19,101524,101525],{},[269,101526],{"alt":34,"src":101527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,101529,101530],{},"引入图像模块非常重要",[29,101532,101534],{"className":31,"code":101533,"language":33,"meta":34,"style":34},"from matplotlib import pyplot as plt\n",[36,101535,101536],{"__ignoreMap":34},[39,101537,101538,101540,101543,101545,101548,101550],{"class":41,"line":42},[39,101539,31792],{"class":49},[39,101541,101542],{"class":45}," matplotlib ",[39,101544,31447],{"class":49},[39,101546,101547],{"class":45}," pyplot ",[39,101549,32438],{"class":49},[39,101551,32492],{"class":45},[1133,101553,101554],{},"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":34,"searchDepth":74,"depth":74,"links":101556},[101557,101558,101559,101560,101561,101562,101563],{"id":101105,"depth":74,"text":101106},{"id":101220,"depth":74,"text":101221},{"id":101427,"depth":74,"text":101428},{"id":101436,"depth":74,"text":101437},{"id":101479,"depth":74,"text":101480},{"id":101500,"depth":74,"text":101501},{"id":101521,"depth":74,"text":101522},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101069,"description":1142},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101570,"title":101571,"body":101572,"description":1142,"extension":1143,"meta":101576,"navigation":1145,"path":101577,"seo":101578,"stem":101579,"__hash__":101580},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101573,"toc":101574},[],{"title":34,"searchDepth":74,"depth":74,"links":101575},[],{"category":51474},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101571,"description":1142},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101582,"title":101583,"body":101584,"description":34,"extension":1143,"meta":103592,"navigation":1145,"path":103593,"seo":103594,"stem":103595,"__hash__":103596},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101585,"toc":103568},[101586,101589,101593,101596,101599,101605,101608,101631,101634,101668,101671,101712,101716,101719,101812,101815,101859,101862,101879,101882,101896,101899,101902,101947,101950,101987,101991,101994,102000,102005,102025,102029,102032,102098,102101,102119,102123,102126,102155,102165,102171,102175,102178,102184,102195,102199,102202,102232,102235,102515,102518,102521,102532,102535,102538,102560,102567,102570,102588,102591,102594,102608,102616,102619,102645,102651,102654,102657,102667,102679,102699,102708,102728,102738,102762,102775,102789,102794,102835,102852,102877,102889,102909,102915,102960,102979,102996,103009,103025,103032,103044,103053,103088,103109,103134,103147,103171,103186,103211,103214,103235,103244,103247,103258,103262,103265,103271,103283,103290,103294,103297,103309,103312,103326,103329,103339,103349,103352,103392,103395,103399,103405,103408,103422,103426,103429,103462,103466,103469,103492,103500,103503,103509,103515,103518,103521,103549,103553,103556,103562,103565],[10,101587,101583],{"id":101588},"_1环境安装与第一个-mujoco-程序",[14,101590,101592],{"id":101591},"_1目标说明","1.目标说明",[19,101594,101595],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,101597,101598],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[29,101600,101603],{"className":101601,"code":101602,"language":6244,"meta":34},[6242],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[36,101604,101602],{"__ignoreMap":34},[19,101606,101607],{},"需要掌握:",[1171,101609,101610,101613,101616,101621,101626],{},[1174,101611,101612],{},"Fedora 44 下 MuJoCo 的系统依赖",[1174,101614,101615],{},"Python 虚拟环境创建",[1174,101617,101618],{},[36,101619,101620],{},"mujoco.MjModel",[1174,101622,101623],{},[36,101624,101625],{},"mujoco.MjData",[1174,101627,101628],{},[36,101629,101630],{},"mujoco.mj_step(model, data)",[19,101632,101633],{},"MuJoCo 中最重要的两个对象:",[1352,101635,101636,101646],{},[1355,101637,101638],{},[1358,101639,101640,101643],{},[1361,101641,101642],{"align":24792},"对象",[1361,101644,101645],{"align":24792},"含义",[1398,101647,101648,101658],{},[1358,101649,101650,101655],{},[1403,101651,101652],{"align":24792},[36,101653,101654],{},"MjModel",[1403,101656,101657],{"align":24792},"模型结构，来自 XML，基本不随时间变化",[1358,101659,101660,101665],{},[1403,101661,101662],{"align":24792},[36,101663,101664],{},"MjData",[1403,101666,101667],{"align":24792},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,101669,101670],{},"可以先用一个类比理解：",[1352,101672,101673,101683],{},[1355,101674,101675],{},[1358,101676,101677,101680],{},[1361,101678,101679],{"align":24792},"类比",[1361,101681,101682],{"align":24792},"MuJoCo 对象",[1398,101684,101685,101694,101703],{},[1358,101686,101687,101690],{},[1403,101688,101689],{"align":24792},"游戏地图和角色配置",[1403,101691,101692],{"align":24792},[36,101693,101654],{},[1358,101695,101696,101699],{},[1403,101697,101698],{"align":24792},"游戏运行到当前帧的状态",[1403,101700,101701],{"align":24792},[36,101702,101664],{},[1358,101704,101705,101708],{},[1403,101706,101707],{"align":24792},"前进一帧",[1403,101709,101710],{"align":24792},[36,101711,101630],{},[14,101713,101715],{"id":101714},"_2环境与依赖安装","2.环境与依赖安装",[19,101717,101718],{},"Fedora 44 系统依赖:",[29,101720,101722],{"className":24878,"code":101721,"language":24880,"meta":34,"style":34},"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",[36,101723,101724,101736,101749,101762,101772,101782,101801],{"__ignoreMap":34},[39,101725,101726,101728,101730,101732,101734],{"class":41,"line":42},[39,101727,25633],{"class":3021},[39,101729,27372],{"class":1319},[39,101731,24890],{"class":1319},[39,101733,27457],{"class":56},[39,101735,25735],{"class":56},[39,101737,101738,101741,101744,101747],{"class":41,"line":74},[39,101739,101740],{"class":1319},"  python3",[39,101742,101743],{"class":1319}," python3-pip",[39,101745,101746],{"class":1319}," python3-virtualenv",[39,101748,25735],{"class":56},[39,101750,101751,101754,101757,101760],{"class":41,"line":99},[39,101752,101753],{"class":1319},"  mesa-libGL",[39,101755,101756],{"class":1319}," mesa-libGLU",[39,101758,101759],{"class":1319}," mesa-dri-drivers",[39,101761,25735],{"class":56},[39,101763,101764,101767,101770],{"class":41,"line":106},[39,101765,101766],{"class":1319},"  libglvnd-glx",[39,101768,101769],{"class":1319}," libglvnd-opengl",[39,101771,25735],{"class":56},[39,101773,101774,101777,101780],{"class":41,"line":112},[39,101775,101776],{"class":1319},"  glfw",[39,101778,101779],{"class":1319}," glfw-devel",[39,101781,25735],{"class":56},[39,101783,101784,101787,101790,101793,101796,101799],{"class":41,"line":118},[39,101785,101786],{"class":1319},"  libX11",[39,101788,101789],{"class":1319}," libXcursor",[39,101791,101792],{"class":1319}," libXi",[39,101794,101795],{"class":1319}," libXinerama",[39,101797,101798],{"class":1319}," libXrandr",[39,101800,25735],{"class":56},[39,101802,101803,101806,101809],{"class":41,"line":413},[39,101804,101805],{"class":1319},"  gcc",[39,101807,101808],{"class":1319}," gcc-c++",[39,101810,101811],{"class":1319}," make\n",[19,101813,101814],{},"创建 Python 环境:",[29,101816,101818],{"className":24878,"code":101817,"language":24880,"meta":34,"style":34},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[36,101819,101820,101834,101842],{"__ignoreMap":34},[39,101821,101822,101825,101828,101831],{"class":41,"line":42},[39,101823,101824],{"class":3021},"python3",[39,101826,101827],{"class":56}," -m",[39,101829,101830],{"class":1319}," venv",[39,101832,101833],{"class":1319}," .venv\n",[39,101835,101836,101839],{"class":41,"line":74},[39,101837,101838],{"class":56},"source",[39,101840,101841],{"class":1319}," .venv\u002Fbin\u002Factivate\n",[39,101843,101844,101846,101848,101851,101853,101856],{"class":41,"line":99},[39,101845,33],{"class":3021},[39,101847,101827],{"class":56},[39,101849,101850],{"class":1319}," pip",[39,101852,24890],{"class":1319},[39,101854,101855],{"class":56}," --upgrade",[39,101857,101858],{"class":1319}," pip\n",[19,101860,101861],{},"pip 安装:",[29,101863,101865],{"className":24878,"code":101864,"language":24880,"meta":34,"style":34},"pip install \"mujoco>=2.3\" numpy\n",[36,101866,101867],{"__ignoreMap":34},[39,101868,101869,101871,101873,101876],{"class":41,"line":42},[39,101870,24887],{"class":3021},[39,101872,24890],{"class":1319},[39,101874,101875],{"class":1319}," \"mujoco>=2.3\"",[39,101877,101878],{"class":1319}," numpy\n",[19,101880,101881],{},"安装完成后，先做最小检查：",[29,101883,101885],{"className":24878,"code":101884,"language":24880,"meta":34,"style":34},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[36,101886,101887],{"__ignoreMap":34},[39,101888,101889,101891,101893],{"class":41,"line":42},[39,101890,33],{"class":3021},[39,101892,31415],{"class":56},[39,101894,101895],{"class":1319}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101897,101898],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101900,101901],{},"conda 安装:",[29,101903,101905],{"className":24878,"code":101904,"language":24880,"meta":34,"style":34},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[36,101906,101907,101927,101937],{"__ignoreMap":34},[39,101908,101909,101911,101913,101915,101918,101921,101924],{"class":41,"line":42},[39,101910,31387],{"class":3021},[39,101912,30233],{"class":1319},[39,101914,26172],{"class":56},[39,101916,101917],{"class":1319}," mujoco-study",[39,101919,101920],{"class":1319}," python=",[39,101922,101923],{"class":56},"3.10",[39,101925,101926],{"class":56}," -y\n",[39,101928,101929,101931,101934],{"class":41,"line":74},[39,101930,31387],{"class":3021},[39,101932,101933],{"class":1319}," activate",[39,101935,101936],{"class":1319}," mujoco-study\n",[39,101938,101939,101941,101943,101945],{"class":41,"line":99},[39,101940,24887],{"class":3021},[39,101942,24890],{"class":1319},[39,101944,101875],{"class":1319},[39,101946,101878],{"class":1319},[19,101948,101949],{},"版本冲突说明:",[1171,101951,101952,101958,101968,101977],{},[1174,101953,101954,101955,29442],{},"不要安装 ",[36,101956,101957],{},"mujoco-py",[1174,101959,101960,101961,101963,101964,101967],{},"如果旧项目里同时安装了 ",[36,101962,101957],{}," 和 ",[36,101965,101966],{},"mujoco","，建议新建干净虚拟环境。",[1174,101969,101970,101973,101974,29442],{},[36,101971,101972],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[36,101975,101976],{},"~\u002F.mujoco\u002Fmujoco210",[1174,101978,101979,101980,83593,101983,101986],{},"离屏渲染可能涉及 OpenGL 后端，",[36,101981,101982],{},"MUJOCO_GL=egl",[36,101984,101985],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101988,101990],{"id":101989},"_3核心概念解释","3.核心概念解释",[19,101992,101993],{},"MuJoCo 的基本执行流程:",[29,101995,101998],{"className":101996,"code":101997,"language":6244,"meta":34},[6242],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[36,101999,101997],{"__ignoreMap":34},[19,102001,102002,102004],{},[36,102003,101654],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,102006,102007,102009,102010,1425,102013,1425,102016,1425,102019,1425,102022,29442],{},[36,102008,101664],{}," 存放仿真运行时状态，例如 ",[36,102011,102012],{},"data.time",[36,102014,102015],{},"data.qpos",[36,102017,102018],{},"data.qvel",[36,102020,102021],{},"data.ctrl",[36,102023,102024],{},"data.xpos",[1188,102026,102028],{"id":102027},"xml-是什么","XML 是什么",[19,102030,102031],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[29,102033,102035],{"className":54121,"code":102034,"language":54123,"meta":34,"style":34},"\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",[36,102036,102037,102059,102090],{"__ignoreMap":34},[39,102038,102039,102041,102043,102045,102047,102049,102052,102054,102057],{"class":41,"line":42},[39,102040,2108],{"class":45},[39,102042,52854],{"class":52354},[39,102044,15976],{"class":3021},[39,102046,50],{"class":45},[39,102048,54545],{"class":1319},[39,102050,102051],{"class":3021}," pos",[39,102053,50],{"class":45},[39,102055,102056],{"class":1319},"\"0 0 1\"",[39,102058,52361],{"class":45},[39,102060,102061,102063,102066,102068,102070,102073,102075,102077,102079,102082,102084,102087],{"class":41,"line":74},[39,102062,53198],{"class":45},[39,102064,102065],{"class":52354},"geom",[39,102067,15976],{"class":3021},[39,102069,50],{"class":45},[39,102071,102072],{"class":1319},"\"box_geom\"",[39,102074,54878],{"class":3021},[39,102076,50],{"class":45},[39,102078,54545],{"class":1319},[39,102080,102081],{"class":3021}," size",[39,102083,50],{"class":45},[39,102085,102086],{"class":1319},"\"0.1 0.1 0.1\"",[39,102088,102089],{"class":45},"\u002F>\n",[39,102091,102092,102094,102096],{"class":41,"line":99},[39,102093,52839],{"class":45},[39,102095,52854],{"class":52354},[39,102097,52361],{"class":45},[19,102099,102100],{},"这段意思是：",[1171,102102,102103,102109,102116],{},[1174,102104,102105,102106,102108],{},"创建一个叫 ",[36,102107,54768],{}," 的刚体。",[1174,102110,102111,102112,102115],{},"它初始放在 ",[36,102113,102114],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[1174,102117,102118],{},"它里面有一个盒子形状的几何体。",[1188,102120,102122],{"id":102121},"timestep-是什么","timestep 是什么",[19,102124,102125],{},"XML 里的：",[29,102127,102129],{"className":54121,"code":102128,"language":54123,"meta":34,"style":34},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[36,102130,102131],{"__ignoreMap":34},[39,102132,102133,102135,102137,102140,102142,102145,102148,102150,102153],{"class":41,"line":42},[39,102134,2108],{"class":45},[39,102136,70220],{"class":52354},[39,102138,102139],{"class":3021}," timestep",[39,102141,50],{"class":45},[39,102143,102144],{"class":1319},"\"0.01\"",[39,102146,102147],{"class":3021}," gravity",[39,102149,50],{"class":45},[39,102151,102152],{"class":1319},"\"0 0 -9.81\"",[39,102154,102089],{"class":45},[19,102156,102157,102158,102161,102162,102164],{},"表示每调用一次 ",[36,102159,102160],{},"mj_step","，仿真时间前进 ",[36,102163,40041],{}," 秒。循环 100 次，大约就是 1 秒：",[29,102166,102169],{"className":102167,"code":102168,"language":6244,"meta":34},[6242],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[36,102170,102168],{"__ignoreMap":34},[1188,102172,102174],{"id":102173},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,102176,102177],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[29,102179,102182],{"className":102180,"code":102181,"language":6244,"meta":34},[6242],"x y z qw qx qy qz\n",[36,102183,102181],{"__ignoreMap":34},[19,102185,102186,102187,102190,102191,102194],{},"表示一个自由刚体的位置和姿态。其中 ",[36,102188,102189],{},"x y z"," 是位置，",[36,102192,102193],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102196,102198],{"id":102197},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,102200,102201],{},"新建文件:",[29,102203,102205],{"className":24878,"code":102204,"language":24880,"meta":34,"style":34},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[36,102206,102207,102217,102224],{"__ignoreMap":34},[39,102208,102209,102212,102214],{"class":41,"line":42},[39,102210,102211],{"class":3021},"mkdir",[39,102213,30273],{"class":56},[39,102215,102216],{"class":1319}," mujoco_tutorial\n",[39,102218,102219,102222],{"class":41,"line":74},[39,102220,102221],{"class":56},"cd",[39,102223,102216],{"class":1319},[39,102225,102226,102229],{"class":41,"line":99},[39,102227,102228],{"class":3021},"touch",[39,102230,102231],{"class":1319}," ch1_first_sim.py\n",[19,102233,102234],{},"写入:",[29,102236,102238],{"className":31,"code":102237,"language":33,"meta":34,"style":34},"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",[36,102239,102240,102247,102251,102255,102265,102270,102275,102279,102284,102289,102293,102298,102303,102308,102313,102318,102323,102327,102331,102335,102348,102362,102372,102376,102388,102400,102412,102424,102436,102440,102457,102462,102466,102477,102488,102492,102496,102510],{"__ignoreMap":34},[39,102241,102242,102244],{"class":41,"line":42},[39,102243,31447],{"class":49},[39,102245,102246],{"class":45}," mujoco\n",[39,102248,102249],{"class":41,"line":74},[39,102250,3458],{"emptyLinePlaceholder":1145},[39,102252,102253],{"class":41,"line":99},[39,102254,3458],{"emptyLinePlaceholder":1145},[39,102256,102257,102260,102262],{"class":41,"line":106},[39,102258,102259],{"class":56},"XML",[39,102261,14620],{"class":49},[39,102263,102264],{"class":1319}," \"\"\"\n",[39,102266,102267],{"class":41,"line":112},[39,102268,102269],{"class":1319},"\u003Cmujoco model=\"first_sim\">\n",[39,102271,102272],{"class":41,"line":118},[39,102273,102274],{"class":1319},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[39,102276,102277],{"class":41,"line":413},[39,102278,3458],{"emptyLinePlaceholder":1145},[39,102280,102281],{"class":41,"line":419},[39,102282,102283],{"class":1319},"  \u003Cworldbody>\n",[39,102285,102286],{"class":41,"line":425},[39,102287,102288],{"class":1319},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[39,102290,102291],{"class":41,"line":443},[39,102292,3458],{"emptyLinePlaceholder":1145},[39,102294,102295],{"class":41,"line":449},[39,102296,102297],{"class":1319},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[39,102299,102300],{"class":41,"line":455},[39,102301,102302],{"class":1319},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[39,102304,102305],{"class":41,"line":461},[39,102306,102307],{"class":1319},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[39,102309,102310],{"class":41,"line":475},[39,102311,102312],{"class":1319},"    \u003C\u002Fbody>\n",[39,102314,102315],{"class":41,"line":665},[39,102316,102317],{"class":1319},"  \u003C\u002Fworldbody>\n",[39,102319,102320],{"class":41,"line":671},[39,102321,102322],{"class":1319},"\u003C\u002Fmujoco>\n",[39,102324,102325],{"class":41,"line":684},[39,102326,96747],{"class":1319},[39,102328,102329],{"class":41,"line":2732},[39,102330,3458],{"emptyLinePlaceholder":1145},[39,102332,102333],{"class":41,"line":2737},[39,102334,3458],{"emptyLinePlaceholder":1145},[39,102336,102337,102339,102341,102344,102346],{"class":41,"line":2751},[39,102338,33002],{"class":49},[39,102340,3031],{"class":3021},[39,102342,102343],{"class":45},"() -> ",[39,102345,96735],{"class":56},[39,102347,4797],{"class":45},[39,102349,102350,102353,102355,102358,102360],{"class":41,"line":2756},[39,102351,102352],{"class":45},"    model ",[39,102354,50],{"class":49},[39,102356,102357],{"class":45}," mujoco.MjModel.from_xml_string(",[39,102359,102259],{"class":56},[39,102361,209],{"class":45},[39,102363,102364,102367,102369],{"class":41,"line":2785},[39,102365,102366],{"class":45},"    data ",[39,102368,50],{"class":49},[39,102370,102371],{"class":45}," mujoco.MjData(model)\n",[39,102373,102374],{"class":41,"line":2790},[39,102375,3458],{"emptyLinePlaceholder":1145},[39,102377,102378,102380,102382,102385],{"class":41,"line":2807},[39,102379,32354],{"class":56},[39,102381,1221],{"class":45},[39,102383,102384],{"class":1319},"\"nq:\"",[39,102386,102387],{"class":45},", model.nq)\n",[39,102389,102390,102392,102394,102397],{"class":41,"line":2812},[39,102391,32354],{"class":56},[39,102393,1221],{"class":45},[39,102395,102396],{"class":1319},"\"nv:\"",[39,102398,102399],{"class":45},", model.nv)\n",[39,102401,102402,102404,102406,102409],{"class":41,"line":2817},[39,102403,32354],{"class":56},[39,102405,1221],{"class":45},[39,102407,102408],{"class":1319},"\"nu:\"",[39,102410,102411],{"class":45},", model.nu)\n",[39,102413,102414,102416,102418,102421],{"class":41,"line":2822},[39,102415,32354],{"class":56},[39,102417,1221],{"class":45},[39,102419,102420],{"class":1319},"\"initial time:\"",[39,102422,102423],{"class":45},", data.time)\n",[39,102425,102426,102428,102430,102433],{"class":41,"line":2836},[39,102427,32354],{"class":56},[39,102429,1221],{"class":45},[39,102431,102432],{"class":1319},"\"initial qpos:\"",[39,102434,102435],{"class":45},", data.qpos.copy())\n",[39,102437,102438],{"class":41,"line":2841},[39,102439,3458],{"emptyLinePlaceholder":1145},[39,102441,102442,102444,102447,102449,102451,102453,102455],{"class":41,"line":3635},[39,102443,4259],{"class":49},[39,102445,102446],{"class":45}," _ ",[39,102448,27100],{"class":49},[39,102450,33498],{"class":56},[39,102452,1221],{"class":45},[39,102454,1519],{"class":56},[39,102456,31841],{"class":45},[39,102458,102459],{"class":41,"line":3649},[39,102460,102461],{"class":45},"        mujoco.mj_step(model, data)\n",[39,102463,102464],{"class":41,"line":3657},[39,102465,3458],{"emptyLinePlaceholder":1145},[39,102467,102468,102470,102472,102475],{"class":41,"line":3662},[39,102469,32354],{"class":56},[39,102471,1221],{"class":45},[39,102473,102474],{"class":1319},"\"final time:\"",[39,102476,102423],{"class":45},[39,102478,102479,102481,102483,102486],{"class":41,"line":3668},[39,102480,32354],{"class":56},[39,102482,1221],{"class":45},[39,102484,102485],{"class":1319},"\"final qpos:\"",[39,102487,102435],{"class":45},[39,102489,102490],{"class":41,"line":3674},[39,102491,3458],{"emptyLinePlaceholder":1145},[39,102493,102494],{"class":41,"line":3679},[39,102495,3458],{"emptyLinePlaceholder":1145},[39,102497,102498,102500,102502,102505,102508],{"class":41,"line":9004},[39,102499,2596],{"class":49},[39,102501,32275],{"class":56},[39,102503,102504],{"class":49}," ==",[39,102506,102507],{"class":1319}," \"__main__\"",[39,102509,4797],{"class":45},[39,102511,102512],{"class":41,"line":9028},[39,102513,102514],{"class":45},"    main()\n",[1188,102516,102517],{"id":102517},"代码逐段解释",[19,102519,102520],{},"导入库：",[29,102522,102524],{"className":31,"code":102523,"language":33,"meta":34,"style":34},"import mujoco\n",[36,102525,102526],{"__ignoreMap":34},[39,102527,102528,102530],{"class":41,"line":42},[39,102529,31447],{"class":49},[39,102531,102246],{"class":45},[19,102533,102534],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,102536,102537],{},"定义 XML：",[29,102539,102541],{"className":31,"code":102540,"language":33,"meta":34,"style":34},"XML = \"\"\"\n...\n\"\"\"\n",[36,102542,102543,102551,102556],{"__ignoreMap":34},[39,102544,102545,102547,102549],{"class":41,"line":42},[39,102546,102259],{"class":56},[39,102548,14620],{"class":49},[39,102550,102264],{"class":1319},[39,102552,102553],{"class":41,"line":74},[39,102554,102555],{"class":1319},"...\n",[39,102557,102558],{"class":41,"line":99},[39,102559,96747],{"class":1319},[19,102561,102562,102563,102566],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[36,102564,102565],{},"freejoint"," 的方块。",[19,102568,102569],{},"编译模型：",[29,102571,102573],{"className":31,"code":102572,"language":33,"meta":34,"style":34},"model = mujoco.MjModel.from_xml_string(XML)\n",[36,102574,102575],{"__ignoreMap":34},[39,102576,102577,102580,102582,102584,102586],{"class":41,"line":42},[39,102578,102579],{"class":45},"model ",[39,102581,50],{"class":49},[39,102583,102357],{"class":45},[39,102585,102259],{"class":56},[39,102587,209],{"class":45},[19,102589,102590],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,102592,102593],{},"创建数据：",[29,102595,102597],{"className":31,"code":102596,"language":33,"meta":34,"style":34},"data = mujoco.MjData(model)\n",[36,102598,102599],{"__ignoreMap":34},[39,102600,102601,102604,102606],{"class":41,"line":42},[39,102602,102603],{"class":45},"data ",[39,102605,50],{"class":49},[39,102607,102371],{"class":45},[19,102609,102610,102612,102613,102615],{},[36,102611,34456],{}," 会保存仿真当前状态。刚创建时，时间是 ",[36,102614,260],{},"，方块还在初始位置。",[19,102617,102618],{},"推进仿真：",[29,102620,102622],{"className":31,"code":102621,"language":33,"meta":34,"style":34},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[36,102623,102624,102640],{"__ignoreMap":34},[39,102625,102626,102628,102630,102632,102634,102636,102638],{"class":41,"line":42},[39,102627,4083],{"class":49},[39,102629,102446],{"class":45},[39,102631,27100],{"class":49},[39,102633,33498],{"class":56},[39,102635,1221],{"class":45},[39,102637,1519],{"class":56},[39,102639,31841],{"class":45},[39,102641,102642],{"class":41,"line":74},[39,102643,102644],{"class":45},"    mujoco.mj_step(model, data)\n",[19,102646,102647,102648,102650],{},"每次 ",[36,102649,102160],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[1188,102652,102653],{"id":102653},"代码逐行细讲",[19,102655,102656],{},"下面把完整代码按新手视角拆开讲。",[29,102658,102659],{"className":31,"code":102523,"language":33,"meta":34,"style":34},[36,102660,102661],{"__ignoreMap":34},[39,102662,102663,102665],{"class":41,"line":42},[39,102664,31447],{"class":49},[39,102666,102246],{"class":45},[19,102668,102669,102671,102672,1425,102674,1425,102676,29442],{},[36,102670,31447],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[36,102673,101620],{},[36,102675,101625],{},[36,102677,102678],{},"mujoco.mj_step",[29,102680,102681],{"className":31,"code":102540,"language":33,"meta":34,"style":34},[36,102682,102683,102691,102695],{"__ignoreMap":34},[39,102684,102685,102687,102689],{"class":41,"line":42},[39,102686,102259],{"class":56},[39,102688,14620],{"class":49},[39,102690,102264],{"class":1319},[39,102692,102693],{"class":41,"line":74},[39,102694,102555],{"class":1319},[39,102696,102697],{"class":41,"line":99},[39,102698,96747],{"class":1319},[19,102700,102701,102703,102704,102707],{},[36,102702,102259],{}," 是一个变量名。右边的三引号 ",[36,102705,102706],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[29,102709,102710],{"className":54121,"code":102269,"language":54123,"meta":34,"style":34},[36,102711,102712],{"__ignoreMap":34},[39,102713,102714,102716,102718,102721,102723,102726],{"class":41,"line":42},[39,102715,2108],{"class":45},[39,102717,101966],{"class":52354},[39,102719,102720],{"class":3021}," model",[39,102722,50],{"class":45},[39,102724,102725],{"class":1319},"\"first_sim\"",[39,102727,52361],{"class":45},[19,102729,102730,102731,102734,102735,29442],{},"这是 XML 的根标签。",[36,102732,102733],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[36,102736,102737],{},"first_sim",[29,102739,102740],{"className":54121,"code":102128,"language":54123,"meta":34,"style":34},[36,102741,102742],{"__ignoreMap":34},[39,102743,102744,102746,102748,102750,102752,102754,102756,102758,102760],{"class":41,"line":42},[39,102745,2108],{"class":45},[39,102747,70220],{"class":52354},[39,102749,102139],{"class":3021},[39,102751,50],{"class":45},[39,102753,102144],{"class":1319},[39,102755,102147],{"class":3021},[39,102757,50],{"class":45},[39,102759,102152],{"class":1319},[39,102761,102089],{"class":45},[19,102763,102764,102766,102767,102770,102771,102774],{},[36,102765,70220],{}," 用来设置仿真参数。",[36,102768,102769],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[36,102772,102773],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[29,102776,102778],{"className":54121,"code":102777,"language":54123,"meta":34,"style":34},"\u003Cworldbody>\n",[36,102779,102780],{"__ignoreMap":34},[39,102781,102782,102784,102787],{"class":41,"line":42},[39,102783,2108],{"class":45},[39,102785,102786],{"class":52354},"worldbody",[39,102788,52361],{"class":45},[19,102790,102791,102793],{},[36,102792,102786],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[29,102795,102797],{"className":54121,"code":102796,"language":54123,"meta":34,"style":34},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,102798,102799],{"__ignoreMap":34},[39,102800,102801,102803,102805,102807,102809,102812,102814,102816,102819,102821,102823,102826,102828,102830,102833],{"class":41,"line":42},[39,102802,2108],{"class":45},[39,102804,102065],{"class":52354},[39,102806,15976],{"class":3021},[39,102808,50],{"class":45},[39,102810,102811],{"class":1319},"\"floor\"",[39,102813,54878],{"class":3021},[39,102815,50],{"class":45},[39,102817,102818],{"class":1319},"\"plane\"",[39,102820,102081],{"class":3021},[39,102822,50],{"class":45},[39,102824,102825],{"class":1319},"\"2 2 0.1\"",[39,102827,79821],{"class":3021},[39,102829,50],{"class":45},[39,102831,102832],{"class":1319},"\"0.8 0.8 0.8 1\"",[39,102834,102089],{"class":45},[19,102836,102837,102838,102840,102841,102844,102845,102848,102849,102851],{},"这行创建地面。",[36,102839,102065],{}," 是几何体。",[36,102842,102843],{},"name=\"floor\""," 是名字。",[36,102846,102847],{},"type=\"plane\""," 表示平面。",[36,102850,56164],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[29,102853,102855],{"className":54121,"code":102854,"language":54123,"meta":34,"style":34},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[36,102856,102857],{"__ignoreMap":34},[39,102858,102859,102861,102863,102865,102867,102869,102871,102873,102875],{"class":41,"line":42},[39,102860,2108],{"class":45},[39,102862,52854],{"class":52354},[39,102864,15976],{"class":3021},[39,102866,50],{"class":45},[39,102868,54545],{"class":1319},[39,102870,102051],{"class":3021},[39,102872,50],{"class":45},[39,102874,102056],{"class":1319},[39,102876,52361],{"class":45},[19,102878,102879,102880,29442,102882,102885,102886,102888],{},"这行创建一个刚体，名字叫 ",[36,102881,54768],{},[36,102883,102884],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[36,102887,102114],{},"，也就是离地面 1 米高。",[29,102890,102892],{"className":54121,"code":102891,"language":54123,"meta":34,"style":34},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[36,102893,102894],{"__ignoreMap":34},[39,102895,102896,102898,102900,102902,102904,102907],{"class":41,"line":42},[39,102897,2108],{"class":45},[39,102899,102565],{"class":52354},[39,102901,15976],{"class":3021},[39,102903,50],{"class":45},[39,102905,102906],{"class":1319},"\"box_free\"",[39,102908,102089],{"class":45},[19,102910,102911,102912,102914],{},"这行很重要。",[36,102913,102565],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[29,102916,102918],{"className":54121,"code":102917,"language":54123,"meta":34,"style":34},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,102919,102920],{"__ignoreMap":34},[39,102921,102922,102924,102926,102928,102930,102932,102934,102936,102938,102940,102942,102944,102947,102949,102951,102953,102955,102958],{"class":41,"line":42},[39,102923,2108],{"class":45},[39,102925,102065],{"class":52354},[39,102927,15976],{"class":3021},[39,102929,50],{"class":45},[39,102931,102072],{"class":1319},[39,102933,54878],{"class":3021},[39,102935,50],{"class":45},[39,102937,54545],{"class":1319},[39,102939,102081],{"class":3021},[39,102941,50],{"class":45},[39,102943,102086],{"class":1319},[39,102945,102946],{"class":3021}," mass",[39,102948,50],{"class":45},[39,102950,4736],{"class":1319},[39,102952,79821],{"class":3021},[39,102954,50],{"class":45},[39,102956,102957],{"class":1319},"\"1 0 0 1\"",[39,102959,102089],{"class":45},[19,102961,102962,102963,102966,102967,102970,102971,102974,102975,102978],{},"这行给 box body 添加一个盒子形状。",[36,102964,102965],{},"type=\"box\""," 表示形状是盒子。",[36,102968,102969],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[36,102972,102973],{},"mass=\"1\""," 表示质量是 1。",[36,102976,102977],{},"rgba=\"1 0 0 1\""," 表示红色。",[29,102980,102982],{"className":31,"code":102981,"language":33,"meta":34,"style":34},"def main() -> None:\n",[36,102983,102984],{"__ignoreMap":34},[39,102985,102986,102988,102990,102992,102994],{"class":41,"line":42},[39,102987,33002],{"class":49},[39,102989,3031],{"class":3021},[39,102991,102343],{"class":45},[39,102993,96735],{"class":56},[39,102995,4797],{"class":45},[19,102997,102998,103000,103001,103004,103005,103008],{},[36,102999,33002],{}," 用来定义函数。这里定义了一个叫 ",[36,103002,103003],{},"main"," 的函数。",[36,103006,103007],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[29,103010,103011],{"className":31,"code":102572,"language":33,"meta":34,"style":34},[36,103012,103013],{"__ignoreMap":34},[39,103014,103015,103017,103019,103021,103023],{"class":41,"line":42},[39,103016,102579],{"class":45},[39,103018,50],{"class":49},[39,103020,102357],{"class":45},[39,103022,102259],{"class":56},[39,103024,209],{"class":45},[19,103026,103027,103028,103031],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[36,103029,103030],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[29,103033,103034],{"className":31,"code":102596,"language":33,"meta":34,"style":34},[36,103035,103036],{"__ignoreMap":34},[39,103037,103038,103040,103042],{"class":41,"line":42},[39,103039,102603],{"class":45},[39,103041,50],{"class":49},[39,103043,102371],{"class":45},[19,103045,103046,103047,103049,103050,103052],{},"这行创建仿真数据。",[36,103048,34456],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[36,103051,34456],{}," 都会变化。",[29,103054,103056],{"className":31,"code":103055,"language":33,"meta":34,"style":34},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[36,103057,103058,103068,103078],{"__ignoreMap":34},[39,103059,103060,103062,103064,103066],{"class":41,"line":42},[39,103061,31470],{"class":56},[39,103063,1221],{"class":45},[39,103065,102384],{"class":1319},[39,103067,102387],{"class":45},[39,103069,103070,103072,103074,103076],{"class":41,"line":74},[39,103071,31470],{"class":56},[39,103073,1221],{"class":45},[39,103075,102396],{"class":1319},[39,103077,102399],{"class":45},[39,103079,103080,103082,103084,103086],{"class":41,"line":99},[39,103081,31470],{"class":56},[39,103083,1221],{"class":45},[39,103085,102408],{"class":1319},[39,103087,102411],{"class":45},[19,103089,103090,103092,103093,103096,103097,103100,103101,103104,103105,103108],{},[36,103091,31470],{}," 用来输出信息。",[36,103094,103095],{},"model.nq"," 是位置变量数量，",[36,103098,103099],{},"model.nv"," 是速度变量数量，",[36,103102,103103],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[36,103106,103107],{},"nu"," 是 0。",[29,103110,103112],{"className":31,"code":103111,"language":33,"meta":34,"style":34},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[36,103113,103114,103124],{"__ignoreMap":34},[39,103115,103116,103118,103120,103122],{"class":41,"line":42},[39,103117,31470],{"class":56},[39,103119,1221],{"class":45},[39,103121,102420],{"class":1319},[39,103123,102423],{"class":45},[39,103125,103126,103128,103130,103132],{"class":41,"line":74},[39,103127,31470],{"class":56},[39,103129,1221],{"class":45},[39,103131,102432],{"class":1319},[39,103133,102435],{"class":45},[19,103135,103136,103137,103139,103140,103142,103143,103146],{},"这里打印初始时间和初始位置。",[36,103138,102012],{}," 一开始是 0。",[36,103141,102015],{}," 是位置数组。",[36,103144,103145],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[29,103148,103149],{"className":31,"code":102621,"language":33,"meta":34,"style":34},[36,103150,103151,103167],{"__ignoreMap":34},[39,103152,103153,103155,103157,103159,103161,103163,103165],{"class":41,"line":42},[39,103154,4083],{"class":49},[39,103156,102446],{"class":45},[39,103158,27100],{"class":49},[39,103160,33498],{"class":56},[39,103162,1221],{"class":45},[39,103164,1519],{"class":56},[39,103166,31841],{"class":45},[39,103168,103169],{"class":41,"line":74},[39,103170,102644],{"class":45},[19,103172,103173,103175,103176,103179,103180,103182,103183,103185],{},[36,103174,4083],{}," 是循环。",[36,103177,103178],{},"range(100)"," 表示循环 100 次。",[36,103181,2190],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[36,103184,102160],{},"，仿真就前进一步。",[29,103187,103189],{"className":31,"code":103188,"language":33,"meta":34,"style":34},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[36,103190,103191,103201],{"__ignoreMap":34},[39,103192,103193,103195,103197,103199],{"class":41,"line":42},[39,103194,31470],{"class":56},[39,103196,1221],{"class":45},[39,103198,102474],{"class":1319},[39,103200,102423],{"class":45},[39,103202,103203,103205,103207,103209],{"class":41,"line":74},[39,103204,31470],{"class":56},[39,103206,1221],{"class":45},[39,103208,102485],{"class":1319},[39,103210,102435],{"class":45},[19,103212,103213],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[29,103215,103217],{"className":31,"code":103216,"language":33,"meta":34,"style":34},"if __name__ == \"__main__\":\n    main()\n",[36,103218,103219,103231],{"__ignoreMap":34},[39,103220,103221,103223,103225,103227,103229],{"class":41,"line":42},[39,103222,2596],{"class":49},[39,103224,32275],{"class":56},[39,103226,102504],{"class":49},[39,103228,102507],{"class":1319},[39,103230,4797],{"class":45},[39,103232,103233],{"class":41,"line":74},[39,103234,102514],{"class":45},[19,103236,103237,103238,103241,103242,29442],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[36,103239,103240],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[36,103243,103240],{},[19,103245,103246],{},"运行:",[29,103248,103250],{"className":24878,"code":103249,"language":24880,"meta":34,"style":34},"python ch1_first_sim.py\n",[36,103251,103252],{"__ignoreMap":34},[39,103253,103254,103256],{"class":41,"line":42},[39,103255,33],{"class":3021},[39,103257,102231],{"class":1319},[14,103259,103261],{"id":103260},"_5运行结果说明","5.运行结果说明",[19,103263,103264],{},"你应该看到类似输出:",[29,103266,103269],{"className":103267,"code":103268,"language":6244,"meta":34},[6242],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[36,103270,103268],{"__ignoreMap":34},[19,103272,103273,103275,103276,103279,103280,29442],{},[36,103274,102565],{}," 有 7 个位置变量: ",[36,103277,103278],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[36,103281,103282],{},"vx vy vz wx wy wz",[19,103284,103285,103286,103289],{},"你还会看到 ",[36,103287,103288],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103291,103293],{"id":103292},"_6验证步骤","6.验证步骤",[19,103295,103296],{},"确认版本:",[29,103298,103299],{"className":24878,"code":101884,"language":24880,"meta":34,"style":34},[36,103300,103301],{"__ignoreMap":34},[39,103302,103303,103305,103307],{"class":41,"line":42},[39,103304,33],{"class":3021},[39,103306,31415],{"class":56},[39,103308,101895],{"class":1319},[19,103310,103311],{},"确认导入的是官方 bindings:",[29,103313,103315],{"className":24878,"code":103314,"language":24880,"meta":34,"style":34},"python -c \"import mujoco; print(mujoco)\"\n",[36,103316,103317],{"__ignoreMap":34},[39,103318,103319,103321,103323],{"class":41,"line":42},[39,103320,33],{"class":3021},[39,103322,31415],{"class":56},[39,103324,103325],{"class":1319}," \"import mujoco; print(mujoco)\"\n",[19,103327,103328],{},"运行程序:",[29,103330,103331],{"className":24878,"code":103249,"language":24880,"meta":34,"style":34},[36,103332,103333],{"__ignoreMap":34},[39,103334,103335,103337],{"class":41,"line":42},[39,103336,33],{"class":3021},[39,103338,102231],{"class":1319},[19,103340,103341,103342,103345,103346,29442],{},"检查 ",[36,103343,103344],{},"final time"," 是否约等于 ",[36,103347,103348],{},"1.0",[19,103350,103351],{},"再做几个小实验：",[1171,103353,103354,103364,103372,103385],{},[1174,103355,103356,103357,103359,103360,103363],{},"把 ",[36,103358,102884],{}," 改成 ",[36,103361,103362],{},"pos=\"0 0 2\"","，观察初始高度变化。",[1174,103365,103356,103366,103359,103368,103371],{},[36,103367,102773],{},[36,103369,103370],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[1174,103373,103356,103374,103359,103376,103379,103380,103382,103383,29442],{},[36,103375,102769],{},[36,103377,103378],{},"timestep=\"0.005\"","，观察 100 步后的 ",[36,103381,103344],{}," 是否变成约 ",[36,103384,36384],{},[1174,103386,103387,103388,103391],{},"删除 ",[36,103389,103390],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,103393,103394],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,103396,103398],{"id":103397},"_7常见错误与解决方案","7.常见错误与解决方案",[1188,103400,103402],{"id":103401},"modulenotfounderror-no-module-named-mujoco",[36,103403,103404],{},"ModuleNotFoundError: No module named 'mujoco'",[19,103406,103407],{},"解决:",[29,103409,103411],{"className":24878,"code":103410,"language":24880,"meta":34,"style":34},"pip install \"mujoco>=2.3\"\n",[36,103412,103413],{"__ignoreMap":34},[39,103414,103415,103417,103419],{"class":41,"line":42},[39,103416,24887],{"class":3021},[39,103418,24890],{"class":1319},[39,103420,103421],{"class":1319}," \"mujoco>=2.3\"\n",[1188,103423,103425],{"id":103424},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,103427,103428],{},"先安装系统依赖:",[29,103430,103432],{"className":24878,"code":103431,"language":24880,"meta":34,"style":34},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[36,103433,103434],{"__ignoreMap":34},[39,103435,103436,103438,103440,103442,103444,103447,103449,103452,103454,103457,103459],{"class":41,"line":42},[39,103437,25633],{"class":3021},[39,103439,27372],{"class":1319},[39,103441,24890],{"class":1319},[39,103443,27457],{"class":56},[39,103445,103446],{"class":1319}," mesa-libGL",[39,103448,101759],{"class":1319},[39,103450,103451],{"class":1319}," glfw",[39,103453,101779],{"class":1319},[39,103455,103456],{"class":1319}," libX11",[39,103458,101792],{"class":1319},[39,103460,103461],{"class":1319}," libXrandr\n",[1188,103463,103465],{"id":103464},"xml-解析失败","XML 解析失败",[19,103467,103468],{},"检查:",[1171,103470,103471,103474,103477,103483],{},[1174,103472,103473],{},"标签是否闭合",[1174,103475,103476],{},"属性是否带引号",[1174,103478,103479,103480],{},"根节点是否是 ",[36,103481,103482],{},"\u003Cmujoco>",[1174,103484,103485,103487,103488,103491],{},[36,103486,52854],{}," 是否放在 ",[36,103489,103490],{},"\u003Cworldbody>"," 内部",[1188,103493,103495,103497,103498],{"id":103494},"final-time-不是严格等于-10",[36,103496,103344],{}," 不是严格等于 ",[36,103499,103348],{},[19,103501,103502],{},"这通常不是错误。浮点数计算可能得到：",[29,103504,103507],{"className":103505,"code":103506,"language":6244,"meta":34},[6242],"1.0000000000000007\n",[36,103508,103506],{"__ignoreMap":34},[19,103510,103511,103512,103514],{},"只要接近 ",[36,103513,103348],{}," 就正常。",[1188,103516,103517],{"id":103517},"方块没有掉下来",[19,103519,103520],{},"检查：",[1171,103522,103523,103529,103535,103540],{},[1174,103524,103525,103526],{},"方块 body 里是否有 ",[36,103527,103528],{},"\u003Cfreejoint\u002F>",[1174,103530,103531,103532],{},"重力是否是 ",[36,103533,103534],{},"0 0 -9.81",[1174,103536,103537,103538],{},"是否真的调用了 ",[36,103539,101630],{},[1174,103541,103542,103543,103545,103546],{},"你看的是否是 ",[36,103544,103288],{},"，不是 ",[36,103547,103548],{},"initial qpos",[14,103550,103552],{"id":103551},"_8本章小结","8.本章小结",[19,103554,103555],{},"本章你已经完成了 MuJoCo 的最小闭环：",[29,103557,103560],{"className":103558,"code":103559,"language":6244,"meta":34},[6242],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[36,103561,103559],{"__ignoreMap":34},[19,103563,103564],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1133,103566,103567],{},"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":34,"searchDepth":74,"depth":74,"links":103569},[103570,103571,103572,103577,103581,103582,103583,103591],{"id":101591,"depth":74,"text":101592},{"id":101714,"depth":74,"text":101715},{"id":101989,"depth":74,"text":101990,"children":103573},[103574,103575,103576],{"id":102027,"depth":99,"text":102028},{"id":102121,"depth":99,"text":102122},{"id":102173,"depth":99,"text":102174},{"id":102197,"depth":74,"text":102198,"children":103578},[103579,103580],{"id":102517,"depth":99,"text":102517},{"id":102653,"depth":99,"text":102653},{"id":103260,"depth":74,"text":103261},{"id":103292,"depth":74,"text":103293},{"id":103397,"depth":74,"text":103398,"children":103584},[103585,103586,103587,103588,103590],{"id":103401,"depth":99,"text":103404},{"id":103424,"depth":99,"text":103425},{"id":103464,"depth":99,"text":103465},{"id":103494,"depth":99,"text":103589},"final time 不是严格等于 1.0",{"id":103517,"depth":99,"text":103517},{"id":103551,"depth":74,"text":103552},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101583,"description":34},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103598,"title":103599,"body":103600,"description":34,"extension":1143,"meta":105256,"navigation":1145,"path":105257,"seo":105258,"stem":105259,"__hash__":105260},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103601,"toc":105232},[103602,103605,103607,103610,103613,103630,103725,103728,103734,103736,103738,103762,103765,103779,103782,103823,103825,103838,103840,103843,103891,103903,103906,103909,103915,103928,103995,103998,104017,104020,104023,104029,104031,104040,104043,104047,104056,104138,104147,104151,104157,104171,104181,104183,104513,104516,104528,104530,104541,104543,104546,104564,104567,104570,104588,104599,104602,104617,104627,104629,104650,104667,104687,104693,104733,104749,104765,104771,104774,104798,104814,104819,104849,104866,104891,104894,104909,104918,104933,104942,104957,104964,104966,104976,104989,104996,104999,105038,105045,105047,105099,105101,105107,105110,105117,105124,105127,105129,105147,105150,105153,105187,105199,105201,105204,105226,105229],[10,103603,103599],{"id":103604},"_2xml-与-mjcf-物理建模基础",[14,103606,101592],{"id":101591},[19,103608,103609],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,103611,103612],{},"本章结束后，你应该能看懂一个简单模型里：",[1171,103614,103615,103618,103621,103624,103627],{},[1174,103616,103617],{},"地面在哪里。",[1174,103619,103620],{},"物体初始位置在哪里。",[1174,103622,103623],{},"几何体是什么形状。",[1174,103625,103626],{},"哪些 body 可以自由运动。",[1174,103628,103629],{},"如何用名字在 Python 里找到 XML 中的对象。",[1352,103631,103632,103642],{},[1355,103633,103634],{},[1358,103635,103636,103639],{},[1361,103637,103638],{"align":24792},"标签",[1361,103640,103641],{"align":24792},"作用",[1398,103643,103644,103653,103663,103672,103682,103692,103705,103715],{},[1358,103645,103646,103650],{},[1403,103647,103648],{"align":24792},[36,103649,103482],{},[1403,103651,103652],{"align":24792},"根节点",[1358,103654,103655,103660],{},[1403,103656,103657],{"align":24792},[36,103658,103659],{},"\u003Coption>",[1403,103661,103662],{"align":24792},"仿真参数",[1358,103664,103665,103669],{},[1403,103666,103667],{"align":24792},[36,103668,103490],{},[1403,103670,103671],{"align":24792},"世界中的物体",[1358,103673,103674,103679],{},[1403,103675,103676],{"align":24792},[36,103677,103678],{},"\u003Cbody>",[1403,103680,103681],{"align":24792},"刚体",[1358,103683,103684,103689],{},[1403,103685,103686],{"align":24792},[36,103687,103688],{},"\u003Cgeom>",[1403,103690,103691],{"align":24792},"几何体、碰撞体、可视体",[1358,103693,103694,103702],{},[1403,103695,103696,26035,103699],{"align":24792},[36,103697,103698],{},"\u003Cjoint>",[36,103700,103701],{},"\u003Cfreejoint>",[1403,103703,103704],{"align":24792},"关节",[1358,103706,103707,103712],{},[1403,103708,103709],{"align":24792},[36,103710,103711],{},"\u003Csite>",[1403,103713,103714],{"align":24792},"标记点",[1358,103716,103717,103722],{},[1403,103718,103719],{"align":24792},[36,103720,103721],{},"\u003Cactuator>",[1403,103723,103724],{"align":24792},"控制器",[19,103726,103727],{},"初学时可以先记住：",[29,103729,103732],{"className":103730,"code":103731,"language":6244,"meta":34},[6242],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[36,103733,103731],{"__ignoreMap":34},[14,103735,101715],{"id":101714},[19,103737,101718],{},[29,103739,103741],{"className":24878,"code":103740,"language":24880,"meta":34,"style":34},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[36,103742,103743],{"__ignoreMap":34},[39,103744,103745,103747,103749,103751,103753,103755,103757,103759],{"class":41,"line":42},[39,103746,25633],{"class":3021},[39,103748,27372],{"class":1319},[39,103750,24890],{"class":1319},[39,103752,27457],{"class":56},[39,103754,103446],{"class":1319},[39,103756,101759],{"class":1319},[39,103758,103451],{"class":1319},[39,103760,103761],{"class":1319}," glfw-devel\n",[19,103763,103764],{},"pip:",[29,103766,103767],{"className":24878,"code":101864,"language":24880,"meta":34,"style":34},[36,103768,103769],{"__ignoreMap":34},[39,103770,103771,103773,103775,103777],{"class":41,"line":42},[39,103772,24887],{"class":3021},[39,103774,24890],{"class":1319},[39,103776,101875],{"class":1319},[39,103778,101878],{"class":1319},[19,103780,103781],{},"conda:",[29,103783,103785],{"className":24878,"code":103784,"language":24880,"meta":34,"style":34},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[36,103786,103787,103804,103813],{"__ignoreMap":34},[39,103788,103789,103791,103793,103795,103798,103800,103802],{"class":41,"line":42},[39,103790,31387],{"class":3021},[39,103792,30233],{"class":1319},[39,103794,26172],{"class":56},[39,103796,103797],{"class":1319}," mujoco-xml",[39,103799,101920],{"class":1319},[39,103801,101923],{"class":56},[39,103803,101926],{"class":56},[39,103805,103806,103808,103810],{"class":41,"line":74},[39,103807,31387],{"class":3021},[39,103809,101933],{"class":1319},[39,103811,103812],{"class":1319}," mujoco-xml\n",[39,103814,103815,103817,103819,103821],{"class":41,"line":99},[39,103816,24887],{"class":3021},[39,103818,24890],{"class":1319},[39,103820,101875],{"class":1319},[39,103822,101878],{"class":1319},[19,103824,101949],{},[1171,103826,103827,103830,103835],{},[1174,103828,103829],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[1174,103831,103832,103833,29442],{},"本章使用基础标签，适用于 ",[36,103834,101972],{},[1174,103836,103837],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103839,101990],{"id":101989},[19,103841,103842],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[29,103844,103846],{"className":54121,"code":103845,"language":54123,"meta":34,"style":34},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[36,103847,103848,103862,103870,103875,103883],{"__ignoreMap":34},[39,103849,103850,103852,103854,103856,103858,103860],{"class":41,"line":42},[39,103851,2108],{"class":45},[39,103853,101966],{"class":52354},[39,103855,102720],{"class":3021},[39,103857,50],{"class":45},[39,103859,63733],{"class":1319},[39,103861,52361],{"class":45},[39,103863,103864,103866,103868],{"class":41,"line":74},[39,103865,53198],{"class":45},[39,103867,102786],{"class":52354},[39,103869,52361],{"class":45},[39,103871,103872],{"class":41,"line":99},[39,103873,103874],{"class":45},"    ...\n",[39,103876,103877,103879,103881],{"class":41,"line":106},[39,103878,53471],{"class":45},[39,103880,102786],{"class":52354},[39,103882,52361],{"class":45},[39,103884,103885,103887,103889],{"class":41,"line":112},[39,103886,52839],{"class":45},[39,103888,101966],{"class":52354},[39,103890,52361],{"class":45},[19,103892,103893,103895,103896,103898,103899,103902],{},[36,103894,52854],{}," 表示刚体。",[36,103897,102065],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[36,103900,103901],{},"joint"," 表示刚体相对父刚体如何运动。",[1188,103904,103905],{"id":103905},"层级结构非常重要",[19,103907,103908],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[29,103910,103913],{"className":103911,"code":103912,"language":6244,"meta":34},[6242],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[36,103914,103912],{"__ignoreMap":34},[19,103916,103917,101963,103920,103923,103924,103927],{},[36,103918,103919],{},"red_box_geom",[36,103921,103922],{},"box_center"," 都属于 ",[36,103925,103926],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[29,103929,103931],{"className":54121,"code":103930,"language":54123,"meta":34,"style":34},"\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",[36,103932,103933,103953,103967,103987],{"__ignoreMap":34},[39,103934,103935,103937,103939,103941,103943,103945,103947,103949,103951],{"class":41,"line":42},[39,103936,2108],{"class":45},[39,103938,52854],{"class":52354},[39,103940,15976],{"class":3021},[39,103942,50],{"class":45},[39,103944,54545],{"class":1319},[39,103946,102051],{"class":3021},[39,103948,50],{"class":45},[39,103950,102056],{"class":1319},[39,103952,52361],{"class":45},[39,103954,103955,103957,103959,103961,103963,103965],{"class":41,"line":74},[39,103956,53198],{"class":45},[39,103958,102565],{"class":52354},[39,103960,15976],{"class":3021},[39,103962,50],{"class":45},[39,103964,102906],{"class":1319},[39,103966,102089],{"class":45},[39,103968,103969,103971,103973,103975,103977,103979,103981,103983,103985],{"class":41,"line":99},[39,103970,53198],{"class":45},[39,103972,102065],{"class":52354},[39,103974,54878],{"class":3021},[39,103976,50],{"class":45},[39,103978,54545],{"class":1319},[39,103980,102081],{"class":3021},[39,103982,50],{"class":45},[39,103984,102086],{"class":1319},[39,103986,102089],{"class":45},[39,103988,103989,103991,103993],{"class":41,"line":106},[39,103990,52839],{"class":45},[39,103992,52854],{"class":52354},[39,103994,52361],{"class":45},[19,103996,103997],{},"含义:",[1171,103999,104000,104006,104011,104014],{},[1174,104001,104002,104003,104005],{},"创建名为 ",[36,104004,54768],{}," 的刚体",[1174,104007,104008,104009],{},"初始位置在世界坐标 ",[36,104010,102114],{},[1174,104012,104013],{},"它有一个自由关节",[1174,104015,104016],{},"它有一个盒子几何体",[1188,104018,104019],{"id":104019},"坐标怎么理解",[19,104021,104022],{},"MuJoCo 默认使用三维坐标：",[29,104024,104027],{"className":104025,"code":104026,"language":6244,"meta":34},[6242],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[36,104028,104026],{"__ignoreMap":34},[19,104030,15689],{},[29,104032,104034],{"className":54121,"code":104033,"language":54123,"meta":34,"style":34},"pos=\"0 0 1\"\n",[36,104035,104036],{"__ignoreMap":34},[39,104037,104038],{"class":41,"line":42},[39,104039,104033],{"class":45},[19,104041,104042],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[1188,104044,104046],{"id":104045},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,104048,104049,104050,83584,104053,104055],{},"不同 ",[36,104051,104052],{},"type",[36,104054,32551],{}," 含义不同：",[1352,104057,104058,104073],{},[1355,104059,104060],{},[1358,104061,104062,104066,104071],{},[1361,104063,104064],{"align":24792},[36,104065,104052],{},[1361,104067,104068,104070],{"align":24792},[36,104069,32551],{}," 示例",[1361,104072,101645],{"align":24792},[1398,104074,104075,104089,104104,104123],{},[1358,104076,104077,104081,104086],{},[1403,104078,104079],{"align":24792},[36,104080,54768],{},[1403,104082,104083],{"align":24792},[36,104084,104085],{},"size=\"0.1 0.2 0.3\"",[1403,104087,104088],{"align":24792},"x\u002Fy\u002Fz 半边长，不是完整长度",[1358,104090,104091,104096,104101],{},[1403,104092,104093],{"align":24792},[36,104094,104095],{},"sphere",[1403,104097,104098],{"align":24792},[36,104099,104100],{},"size=\"0.1\"",[1403,104102,104103],{"align":24792},"球半径",[1358,104105,104106,104111,104116],{},[1403,104107,104108],{"align":24792},[36,104109,104110],{},"capsule",[1403,104112,104113],{"align":24792},[36,104114,104115],{},"size=\"0.03\"",[1403,104117,104118,104119,104122],{"align":24792},"胶囊半径，长度常用 ",[36,104120,104121],{},"fromto"," 指定",[1358,104124,104125,104130,104135],{},[1403,104126,104127],{"align":24792},[36,104128,104129],{},"plane",[1403,104131,104132],{"align":24792},[36,104133,104134],{},"size=\"3 3 0.1\"",[1403,104136,104137],{"align":24792},"可视平面大小，通常当地面",[19,104139,104140,104141,104143,104144,104146],{},"最容易踩坑的是 box：",[36,104142,102969],{}," 表示边长大约是 ",[36,104145,33092],{},"，因为 MuJoCo 用的是半边长。",[1188,104148,104150],{"id":104149},"site-是什么","site 是什么",[19,104152,104153,104156],{},[36,104154,104155],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[1171,104158,104159,104162,104165,104168],{},[1174,104160,104161],{},"标记机械臂末端。",[1174,104163,104164],{},"标记目标位置。",[1174,104166,104167],{},"放传感器或相机参考点。",[1174,104169,104170],{},"在 Python 中读取某个关键点的世界坐标。",[19,104172,104173,104174,101963,104177,104180],{},"在后面的 Reacher 任务中，",[36,104175,104176],{},"tip",[36,104178,104179],{},"target"," 就会用 site 表示。",[14,104182,102198],{"id":102197},[29,104184,104186],{"className":31,"code":104185,"language":33,"meta":34,"style":34},"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",[36,104187,104188,104194,104204,104208,104212,104220,104225,104229,104233,104237,104242,104246,104251,104256,104261,104266,104270,104274,104278,104282,104286,104290,104302,104314,104322,104326,104341,104356,104360,104373,104388,104401,104414,104418,104434,104438,104442,104453,104465,104477,104489,104493,104497,104509],{"__ignoreMap":34},[39,104189,104190,104192],{"class":41,"line":42},[39,104191,31447],{"class":49},[39,104193,102246],{"class":45},[39,104195,104196,104198,104200,104202],{"class":41,"line":74},[39,104197,31447],{"class":49},[39,104199,32435],{"class":45},[39,104201,32438],{"class":49},[39,104203,32441],{"class":45},[39,104205,104206],{"class":41,"line":99},[39,104207,3458],{"emptyLinePlaceholder":1145},[39,104209,104210],{"class":41,"line":106},[39,104211,3458],{"emptyLinePlaceholder":1145},[39,104213,104214,104216,104218],{"class":41,"line":112},[39,104215,102259],{"class":56},[39,104217,14620],{"class":49},[39,104219,102264],{"class":1319},[39,104221,104222],{"class":41,"line":118},[39,104223,104224],{"class":1319},"\u003Cmujoco model=\"xml_basic\">\n",[39,104226,104227],{"class":41,"line":413},[39,104228,102274],{"class":1319},[39,104230,104231],{"class":41,"line":419},[39,104232,3458],{"emptyLinePlaceholder":1145},[39,104234,104235],{"class":41,"line":425},[39,104236,102283],{"class":1319},[39,104238,104239],{"class":41,"line":443},[39,104240,104241],{"class":1319},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[39,104243,104244],{"class":41,"line":449},[39,104245,3458],{"emptyLinePlaceholder":1145},[39,104247,104248],{"class":41,"line":455},[39,104249,104250],{"class":1319},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[39,104252,104253],{"class":41,"line":461},[39,104254,104255],{"class":1319},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[39,104257,104258],{"class":41,"line":475},[39,104259,104260],{"class":1319},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[39,104262,104263],{"class":41,"line":665},[39,104264,104265],{"class":1319},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[39,104267,104268],{"class":41,"line":671},[39,104269,102312],{"class":1319},[39,104271,104272],{"class":41,"line":684},[39,104273,102317],{"class":1319},[39,104275,104276],{"class":41,"line":2732},[39,104277,102322],{"class":1319},[39,104279,104280],{"class":41,"line":2737},[39,104281,96747],{"class":1319},[39,104283,104284],{"class":41,"line":2751},[39,104285,3458],{"emptyLinePlaceholder":1145},[39,104287,104288],{"class":41,"line":2756},[39,104289,3458],{"emptyLinePlaceholder":1145},[39,104291,104292,104294,104296,104298,104300],{"class":41,"line":2785},[39,104293,33002],{"class":49},[39,104295,3031],{"class":3021},[39,104297,102343],{"class":45},[39,104299,96735],{"class":56},[39,104301,4797],{"class":45},[39,104303,104304,104306,104308,104310,104312],{"class":41,"line":2790},[39,104305,102352],{"class":45},[39,104307,50],{"class":49},[39,104309,102357],{"class":45},[39,104311,102259],{"class":56},[39,104313,209],{"class":45},[39,104315,104316,104318,104320],{"class":41,"line":2807},[39,104317,102366],{"class":45},[39,104319,50],{"class":49},[39,104321,102371],{"class":45},[39,104323,104324],{"class":41,"line":2812},[39,104325,3458],{"emptyLinePlaceholder":1145},[39,104327,104328,104331,104333,104336,104339],{"class":41,"line":2817},[39,104329,104330],{"class":45},"    box_body_id ",[39,104332,50],{"class":49},[39,104334,104335],{"class":45}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[39,104337,104338],{"class":1319},"\"red_box\"",[39,104340,209],{"class":45},[39,104342,104343,104346,104348,104351,104354],{"class":41,"line":2822},[39,104344,104345],{"class":45},"    site_id ",[39,104347,50],{"class":49},[39,104349,104350],{"class":45}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[39,104352,104353],{"class":1319},"\"box_center\"",[39,104355,209],{"class":45},[39,104357,104358],{"class":41,"line":2836},[39,104359,3458],{"emptyLinePlaceholder":1145},[39,104361,104362,104364,104367,104369,104371],{"class":41,"line":2841},[39,104363,4159],{"class":49},[39,104365,104366],{"class":45}," box_body_id ",[39,104368,2108],{"class":49},[39,104370,5151],{"class":56},[39,104372,4797],{"class":45},[39,104374,104375,104378,104381,104383,104386],{"class":41,"line":3635},[39,104376,104377],{"class":49},"        raise",[39,104379,104380],{"class":56}," RuntimeError",[39,104382,1221],{"class":45},[39,104384,104385],{"class":1319},"\"body red_box not found\"",[39,104387,209],{"class":45},[39,104389,104390,104392,104395,104397,104399],{"class":41,"line":3649},[39,104391,4159],{"class":49},[39,104393,104394],{"class":45}," site_id ",[39,104396,2108],{"class":49},[39,104398,5151],{"class":56},[39,104400,4797],{"class":45},[39,104402,104403,104405,104407,104409,104412],{"class":41,"line":3657},[39,104404,104377],{"class":49},[39,104406,104380],{"class":56},[39,104408,1221],{"class":45},[39,104410,104411],{"class":1319},"\"site box_center not found\"",[39,104413,209],{"class":45},[39,104415,104416],{"class":41,"line":3662},[39,104417,3458],{"emptyLinePlaceholder":1145},[39,104419,104420,104422,104424,104426,104428,104430,104432],{"class":41,"line":3668},[39,104421,4259],{"class":49},[39,104423,102446],{"class":45},[39,104425,27100],{"class":49},[39,104427,33498],{"class":56},[39,104429,1221],{"class":45},[39,104431,2780],{"class":56},[39,104433,31841],{"class":45},[39,104435,104436],{"class":41,"line":3674},[39,104437,102461],{"class":45},[39,104439,104440],{"class":41,"line":3679},[39,104441,3458],{"emptyLinePlaceholder":1145},[39,104443,104444,104446,104448,104451],{"class":41,"line":9004},[39,104445,32354],{"class":56},[39,104447,1221],{"class":45},[39,104449,104450],{"class":1319},"\"simulation time:\"",[39,104452,102423],{"class":45},[39,104454,104455,104457,104459,104462],{"class":41,"line":9028},[39,104456,32354],{"class":56},[39,104458,1221],{"class":45},[39,104460,104461],{"class":1319},"\"box body position:\"",[39,104463,104464],{"class":45},", data.xpos[box_body_id].copy())\n",[39,104466,104467,104469,104471,104474],{"class":41,"line":9033},[39,104468,32354],{"class":56},[39,104470,1221],{"class":45},[39,104472,104473],{"class":1319},"\"site position:\"",[39,104475,104476],{"class":45},", data.site_xpos[site_id].copy())\n",[39,104478,104479,104481,104483,104486],{"class":41,"line":9039},[39,104480,32354],{"class":56},[39,104482,1221],{"class":45},[39,104484,104485],{"class":1319},"\"box qpos:\"",[39,104487,104488],{"class":45},", np.array(data.qpos))\n",[39,104490,104491],{"class":41,"line":9066},[39,104492,3458],{"emptyLinePlaceholder":1145},[39,104494,104495],{"class":41,"line":9071},[39,104496,3458],{"emptyLinePlaceholder":1145},[39,104498,104499,104501,104503,104505,104507],{"class":41,"line":9077},[39,104500,2596],{"class":49},[39,104502,32275],{"class":56},[39,104504,102504],{"class":49},[39,104506,102507],{"class":1319},[39,104508,4797],{"class":45},[39,104510,104511],{"class":41,"line":9089},[39,104512,102514],{"class":45},[19,104514,104515],{},"保存为：",[29,104517,104519],{"className":24878,"code":104518,"language":24880,"meta":34,"style":34},"touch ch2_xml_basic.py\n",[36,104520,104521],{"__ignoreMap":34},[39,104522,104523,104525],{"class":41,"line":42},[39,104524,102228],{"class":3021},[39,104526,104527],{"class":1319}," ch2_xml_basic.py\n",[19,104529,103246],{},[29,104531,104533],{"className":24878,"code":104532,"language":24880,"meta":34,"style":34},"python ch2_xml_basic.py\n",[36,104534,104535],{"__ignoreMap":34},[39,104536,104537,104539],{"class":41,"line":42},[39,104538,33],{"class":3021},[39,104540,104527],{"class":1319},[1188,104542,102517],{"id":102517},[19,104544,104545],{},"用名字查找 body：",[29,104547,104549],{"className":31,"code":104548,"language":33,"meta":34,"style":34},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[36,104550,104551],{"__ignoreMap":34},[39,104552,104553,104556,104558,104560,104562],{"class":41,"line":42},[39,104554,104555],{"class":45},"box_body_id ",[39,104557,50],{"class":49},[39,104559,104335],{"class":45},[39,104561,104338],{"class":1319},[39,104563,209],{"class":45},[19,104565,104566],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,104568,104569],{},"用名字查找 site：",[29,104571,104573],{"className":31,"code":104572,"language":33,"meta":34,"style":34},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[36,104574,104575],{"__ignoreMap":34},[39,104576,104577,104580,104582,104584,104586],{"class":41,"line":42},[39,104578,104579],{"class":45},"site_id ",[39,104581,50],{"class":49},[39,104583,104350],{"class":45},[39,104585,104353],{"class":1319},[39,104587,209],{"class":45},[19,104589,104590,104591,104594,104595,104598],{},"注意第二个参数是对象类型。查 body 就用 ",[36,104592,104593],{},"mjOBJ_BODY","，查 site 就用 ",[36,104596,104597],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,104600,104601],{},"读取世界坐标：",[29,104603,104605],{"className":31,"code":104604,"language":33,"meta":34,"style":34},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[36,104606,104607,104612],{"__ignoreMap":34},[39,104608,104609],{"class":41,"line":42},[39,104610,104611],{"class":45},"data.xpos[box_body_id]\n",[39,104613,104614],{"class":41,"line":74},[39,104615,104616],{"class":45},"data.site_xpos[site_id]\n",[19,104618,104619,104622,104623,104626],{},[36,104620,104621],{},"xpos"," 是 body 的世界坐标，",[36,104624,104625],{},"site_xpos"," 是 site 的世界坐标。",[1188,104628,102653],{"id":102653},[29,104630,104632],{"className":31,"code":104631,"language":33,"meta":34,"style":34},"import mujoco\nimport numpy as np\n",[36,104633,104634,104640],{"__ignoreMap":34},[39,104635,104636,104638],{"class":41,"line":42},[39,104637,31447],{"class":49},[39,104639,102246],{"class":45},[39,104641,104642,104644,104646,104648],{"class":41,"line":74},[39,104643,31447],{"class":49},[39,104645,32435],{"class":45},[39,104647,32438],{"class":49},[39,104649,32441],{"class":45},[19,104651,104652,104653,104656,104657,104660,104661,1425,104664,29442],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[36,104654,104655],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[36,104658,104659],{},"as np"," 是习惯写法，后面就可以写 ",[36,104662,104663],{},"np.array(...)",[36,104665,104666],{},"np.round(...)",[29,104668,104669],{"className":31,"code":102540,"language":33,"meta":34,"style":34},[36,104670,104671,104679,104683],{"__ignoreMap":34},[39,104672,104673,104675,104677],{"class":41,"line":42},[39,104674,102259],{"class":56},[39,104676,14620],{"class":49},[39,104678,102264],{"class":1319},[39,104680,104681],{"class":41,"line":74},[39,104682,102555],{"class":1319},[39,104684,104685],{"class":41,"line":99},[39,104686,96747],{"class":1319},[19,104688,104689,104690,29442],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[36,104691,104692],{},"mujoco.MjModel.from_xml_string(XML)",[29,104694,104696],{"className":54121,"code":104695,"language":54123,"meta":34,"style":34},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[36,104697,104698],{"__ignoreMap":34},[39,104699,104700,104702,104704,104706,104708,104710,104712,104714,104717,104719,104721,104724,104726,104728,104731],{"class":41,"line":42},[39,104701,2108],{"class":45},[39,104703,104155],{"class":52354},[39,104705,15976],{"class":3021},[39,104707,50],{"class":45},[39,104709,104353],{"class":1319},[39,104711,102051],{"class":3021},[39,104713,50],{"class":45},[39,104715,104716],{"class":1319},"\"0 0 0\"",[39,104718,102081],{"class":3021},[39,104720,50],{"class":45},[39,104722,104723],{"class":1319},"\"0.03\"",[39,104725,79821],{"class":3021},[39,104727,50],{"class":45},[39,104729,104730],{"class":1319},"\"0 1 0 1\"",[39,104732,102089],{"class":45},[19,104734,104735,104737,104738,104741,104742,104744,104745,104748],{},[36,104736,104155],{}," 是标记点。",[36,104739,104740],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[36,104743,104115],{}," 表示显示出来的小球大小。",[36,104746,104747],{},"rgba=\"0 1 0 1\""," 表示绿色。",[29,104750,104751],{"className":31,"code":104548,"language":33,"meta":34,"style":34},[36,104752,104753],{"__ignoreMap":34},[39,104754,104755,104757,104759,104761,104763],{"class":41,"line":42},[39,104756,104555],{"class":45},[39,104758,50],{"class":49},[39,104760,104335],{"class":45},[39,104762,104338],{"class":1319},[39,104764,209],{"class":45},[19,104766,104767,104768,104770],{},"这行的作用是：根据名字 ",[36,104769,104338],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,104772,104773],{},"拆开看：",[1171,104775,104776,104782,104787,104793],{},[1174,104777,104778,104781],{},[36,104779,104780],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[1174,104783,104784,104786],{},[36,104785,103030],{}," 是被查询的模型。",[1174,104788,104789,104792],{},[36,104790,104791],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[1174,104794,104795,104797],{},[36,104796,104338],{}," 是 XML 里写的名字。",[29,104799,104800],{"className":31,"code":104572,"language":33,"meta":34,"style":34},[36,104801,104802],{"__ignoreMap":34},[39,104803,104804,104806,104808,104810,104812],{"class":41,"line":42},[39,104805,104579],{"class":45},[39,104807,50],{"class":49},[39,104809,104350],{"class":45},[39,104811,104353],{"class":1319},[39,104813,209],{"class":45},[19,104815,104816,104817,29442],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[36,104818,104353],{},[29,104820,104822],{"className":31,"code":104821,"language":33,"meta":34,"style":34},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[36,104823,104824,104836],{"__ignoreMap":34},[39,104825,104826,104828,104830,104832,104834],{"class":41,"line":42},[39,104827,2596],{"class":49},[39,104829,104366],{"class":45},[39,104831,2108],{"class":49},[39,104833,5151],{"class":56},[39,104835,4797],{"class":45},[39,104837,104838,104841,104843,104845,104847],{"class":41,"line":74},[39,104839,104840],{"class":49},"    raise",[39,104842,104380],{"class":56},[39,104844,1221],{"class":45},[39,104846,104385],{"class":1319},[39,104848,209],{"class":45},[19,104850,104851,104853,104854,104857,104858,104861,104862,104865],{},[36,104852,2596],{}," 是条件判断。",[36,104855,104856],{},"mj_name2id"," 找不到对象时会返回 ",[36,104859,104860],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[36,104863,104864],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[29,104867,104869],{"className":31,"code":104868,"language":33,"meta":34,"style":34},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[36,104870,104871,104887],{"__ignoreMap":34},[39,104872,104873,104875,104877,104879,104881,104883,104885],{"class":41,"line":42},[39,104874,4083],{"class":49},[39,104876,102446],{"class":45},[39,104878,27100],{"class":49},[39,104880,33498],{"class":56},[39,104882,1221],{"class":45},[39,104884,2780],{"class":56},[39,104886,31841],{"class":45},[39,104888,104889],{"class":41,"line":74},[39,104890,102644],{"class":45},[19,104892,104893],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[29,104895,104897],{"className":31,"code":104896,"language":33,"meta":34,"style":34},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[36,104898,104899],{"__ignoreMap":34},[39,104900,104901,104903,104905,104907],{"class":41,"line":42},[39,104902,31470],{"class":56},[39,104904,1221],{"class":45},[39,104906,104461],{"class":1319},[39,104908,104464],{"class":45},[19,104910,104911,104913,104914,104917],{},[36,104912,102024],{}," 保存所有 body 的世界坐标。",[36,104915,104916],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[29,104919,104921],{"className":31,"code":104920,"language":33,"meta":34,"style":34},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[36,104922,104923],{"__ignoreMap":34},[39,104924,104925,104927,104929,104931],{"class":41,"line":42},[39,104926,31470],{"class":56},[39,104928,1221],{"class":45},[39,104930,104473],{"class":1319},[39,104932,104476],{"class":45},[19,104934,104935,104938,104939,104941],{},[36,104936,104937],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[36,104940,103922],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[29,104943,104945],{"className":31,"code":104944,"language":33,"meta":34,"style":34},"print(\"box qpos:\", np.array(data.qpos))\n",[36,104946,104947],{"__ignoreMap":34},[39,104948,104949,104951,104953,104955],{"class":41,"line":42},[39,104950,31470],{"class":56},[39,104952,1221],{"class":45},[39,104954,104485],{"class":1319},[39,104956,104488],{"class":45},[19,104958,104959,104960,104963],{},"这里打印广义位置数组。",[36,104961,104962],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104965,103261],{"id":103260},[19,104967,104968,104969,104972,104973,29442],{},"程序会输出 ",[36,104970,104971],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[36,104974,104975],{},"qpos",[19,104977,104978,104980,104981,104984,104985,104988],{},[36,104979,104916],{}," 是 body 的世界坐标位置。",[36,104982,104983],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[36,104986,104987],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104990,83276,104991,83584,104993,104995],{},[36,104992,103922],{},[36,104994,104740],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104997,104998],{},"如果你把 site 改成：",[29,105000,105002],{"className":54121,"code":105001,"language":54123,"meta":34,"style":34},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[36,105003,105004],{"__ignoreMap":34},[39,105005,105006,105008,105010,105012,105014,105017,105019,105021,105024,105026,105028,105030,105032,105034,105036],{"class":41,"line":42},[39,105007,2108],{"class":45},[39,105009,104155],{"class":52354},[39,105011,15976],{"class":3021},[39,105013,50],{"class":45},[39,105015,105016],{"class":1319},"\"box_top\"",[39,105018,102051],{"class":3021},[39,105020,50],{"class":45},[39,105022,105023],{"class":1319},"\"0 0 0.15\"",[39,105025,102081],{"class":3021},[39,105027,50],{"class":45},[39,105029,104723],{"class":1319},[39,105031,79821],{"class":3021},[39,105033,50],{"class":45},[39,105035,104730],{"class":1319},[39,105037,102089],{"class":45},[19,105039,105040,105041,105044],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[36,105042,105043],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105046,103293],{"id":103292},[1171,105048,105049,105058,105061,105068,105074,105085],{},[1174,105050,103356,105051,105053,105054,103359,105056,29442],{},[36,105052,103926],{}," 的初始高度从 ",[36,105055,57],{},[36,105057,63],{},[1174,105059,105060],{},"重新运行程序。",[1174,105062,105063,105064,105067],{},"观察 ",[36,105065,105066],{},"box qpos"," 和最终位置是否变化。",[1174,105069,105070,105071,105073],{},"故意把 ",[36,105072,104155],{}," 名称改错，确认程序能报错。",[1174,105075,103356,105076,105078,105079,103359,105081,105084],{},[36,105077,102065],{}," 的颜色 ",[36,105080,102977],{},[36,105082,105083],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[1174,105086,103356,105087,83584,105089,103359,105092,105095,105096,105098],{},[36,105088,103922],{},[36,105090,105091],{},"pos",[36,105093,105094],{},"0 0 0.2","，观察 ",[36,105097,105043],{}," 如何变化。",[14,105100,103398],{"id":103397},[1188,105102,105104],{"id":105103},"xml-error-schema-violation",[36,105105,105106],{},"XML Error: Schema violation",[19,105108,105109],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[1188,105111,105113,82344,105115],{"id":105112},"mj_name2id-返回-1",[36,105114,104856],{},[36,105116,104860],{},[19,105118,105119,105120,105123],{},"说明名字没有找到。检查 XML 中 ",[36,105121,105122],{},"name=\"...\"","，并确认对象类型正确。",[1188,105125,105126],{"id":105126},"物体不下落",[19,105128,103468],{},[1171,105130,105131,105136,105141],{},[1174,105132,105133,105134],{},"body 是否有 ",[36,105135,102565],{},[1174,105137,105138,105139],{},"gravity 是否为 ",[36,105140,103534],{},[1174,105142,105143,105144,105146],{},"body 是否被固定在 ",[36,105145,102786],{}," 中",[1188,105148,105149],{"id":105149},"坐标看起来不符合预期",[19,105151,105152],{},"先区分两种坐标：",[1352,105154,105155,105164],{},[1355,105156,105157],{},[1358,105158,105159,105162],{},[1361,105160,105161],{"align":24792},"坐标",[1361,105163,101645],{"align":24792},[1398,105165,105166,105176],{},[1358,105167,105168,105173],{},[1403,105169,105170,105171],{"align":24792},"XML 里的 ",[36,105172,105091],{},[1403,105174,105175],{"align":24792},"相对父 body 的局部坐标",[1358,105177,105178,105184],{},[1403,105179,105180,26035,105182],{"align":24792},[36,105181,102024],{},[36,105183,104937],{},[1403,105185,105186],{"align":24792},"仿真更新后的世界坐标",[19,105188,105189,105190,105192,105193,83593,105196,105198],{},"如果你修改了 ",[36,105191,102015],{},"，但还没调用 ",[36,105194,105195],{},"mj_forward",[36,105197,102160],{},"，世界坐标可能还没有更新。",[14,105200,103552],{"id":103551},[19,105202,105203],{},"MJCF 建模先掌握四件事：",[1171,105205,105206,105211,105216,105221],{},[1174,105207,105208,105210],{},[36,105209,52854],{}," 表示刚体层级。",[1174,105212,105213,105215],{},[36,105214,102065],{}," 表示形状、碰撞和质量。",[1174,105217,105218,105220],{},[36,105219,103901],{}," 决定 body 能不能动、怎么动。",[1174,105222,105223,105225],{},[36,105224,104155],{}," 用来标记关键点，方便 Python 读取位置。",[19,105227,105228],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1133,105230,105231],{},"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":34,"searchDepth":74,"depth":74,"links":105233},[105234,105235,105236,105242,105246,105247,105248,105255],{"id":101591,"depth":74,"text":101592},{"id":101714,"depth":74,"text":101715},{"id":101989,"depth":74,"text":101990,"children":105237},[105238,105239,105240,105241],{"id":103905,"depth":99,"text":103905},{"id":104019,"depth":99,"text":104019},{"id":104045,"depth":99,"text":104046},{"id":104149,"depth":99,"text":104150},{"id":102197,"depth":74,"text":102198,"children":105243},[105244,105245],{"id":102517,"depth":99,"text":102517},{"id":102653,"depth":99,"text":102653},{"id":103260,"depth":74,"text":103261},{"id":103292,"depth":74,"text":103293},{"id":103397,"depth":74,"text":103398,"children":105249},[105250,105251,105253,105254],{"id":105103,"depth":99,"text":105106},{"id":105112,"depth":99,"text":105252},"mj_name2id 返回 -1",{"id":105126,"depth":99,"text":105126},{"id":105149,"depth":99,"text":105149},{"id":103551,"depth":74,"text":103552},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103599,"description":34},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":105262,"title":105263,"body":105264,"description":34,"extension":1143,"meta":106759,"navigation":1145,"path":106760,"seo":106761,"stem":106762,"__hash__":106763},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105265,"toc":106731},[105266,105269,105271,105274,105277,105315,105318,105324,105327,105329,105331,105358,105360,105374,105376,105417,105419,105443,105445,105448,105457,105466,105469,105478,105486,105495,105498,105508,105511,105563,105570,105576,105584,105632,105635,105654,105657,105665,105669,105678,105711,105713,106061,106063,106075,106077,106088,106090,106093,106114,106120,106123,106148,106158,106161,106169,106172,106175,106196,106207,106209,106229,106232,106253,106262,106281,106287,106312,106315,106329,106336,106360,106363,106371,106380,106396,106408,106416,106425,106427,106430,106454,106459,106462,106484,106486,106525,106527,106534,106536,106544,106547,106550,106562,106603,106610,106621,106628,106631,106680,106683,106686,106692,106694,106699,106725,106728],[10,105267,105263],{"id":105268},"_3python-控制接口读取状态与推进仿真",[14,105270,101592],{"id":101591},[19,105272,105273],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,105275,105276],{},"你将学习:",[1171,105278,105279,105284,105289,105293,105298,105309],{},[1174,105280,105281],{},[36,105282,105283],{},"MjModel.from_xml_string",[1174,105285,105286],{},[36,105287,105288],{},"MjData(model)",[1174,105290,105291],{},[36,105292,102160],{},[1174,105294,105295],{},[36,105296,105297],{},"mj_resetData",[1174,105299,105300,105301,1425,105303,1425,105306],{},"读取 ",[36,105302,104975],{},[36,105304,105305],{},"qvel",[36,105307,105308],{},"ctrl",[1174,105310,105311,105312],{},"使用 ",[36,105313,105314],{},"model.opt.timestep",[19,105316,105317],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[29,105319,105322],{"className":105320,"code":105321,"language":6244,"meta":34},[6242],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[36,105323,105321],{"__ignoreMap":34},[19,105325,105326],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105328,101715],{"id":101714},[19,105330,101718],{},[29,105332,105334],{"className":24878,"code":105333,"language":24880,"meta":34,"style":34},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[36,105335,105336],{"__ignoreMap":34},[39,105337,105338,105340,105342,105344,105346,105349,105351,105353,105355],{"class":41,"line":42},[39,105339,25633],{"class":3021},[39,105341,27372],{"class":1319},[39,105343,24890],{"class":1319},[39,105345,27457],{"class":56},[39,105347,105348],{"class":1319}," python3",[39,105350,101743],{"class":1319},[39,105352,103446],{"class":1319},[39,105354,101759],{"class":1319},[39,105356,105357],{"class":1319}," glfw\n",[19,105359,103764],{},[29,105361,105362],{"className":24878,"code":101864,"language":24880,"meta":34,"style":34},[36,105363,105364],{"__ignoreMap":34},[39,105365,105366,105368,105370,105372],{"class":41,"line":42},[39,105367,24887],{"class":3021},[39,105369,24890],{"class":1319},[39,105371,101875],{"class":1319},[39,105373,101878],{"class":1319},[19,105375,103781],{},[29,105377,105379],{"className":24878,"code":105378,"language":24880,"meta":34,"style":34},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[36,105380,105381,105398,105407],{"__ignoreMap":34},[39,105382,105383,105385,105387,105389,105392,105394,105396],{"class":41,"line":42},[39,105384,31387],{"class":3021},[39,105386,30233],{"class":1319},[39,105388,26172],{"class":56},[39,105390,105391],{"class":1319}," mujoco-python-api",[39,105393,101920],{"class":1319},[39,105395,101923],{"class":56},[39,105397,101926],{"class":56},[39,105399,105400,105402,105404],{"class":41,"line":74},[39,105401,31387],{"class":3021},[39,105403,101933],{"class":1319},[39,105405,105406],{"class":1319}," mujoco-python-api\n",[39,105408,105409,105411,105413,105415],{"class":41,"line":99},[39,105410,24887],{"class":3021},[39,105412,24890],{"class":1319},[39,105414,101875],{"class":1319},[39,105416,101878],{"class":1319},[19,105418,101949],{},[1171,105420,105421,105428,105437],{},[1174,105422,105423,101963,105425,105427],{},[36,105424,101620],{},[36,105426,101625],{}," 是官方 Python bindings 的类名。",[1174,105429,105430,105431,105434,105435,29442],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[36,105432,105433],{},"mjModel"," 在 Python 中是 ",[36,105436,101654],{},[1174,105438,105439,105440,29442],{},"不要使用 ",[36,105441,105442],{},"sim = mujoco_py.MjSim(...)",[14,105444,101990],{"id":101989},[19,105446,105447],{},"仿真推进核心代码:",[29,105449,105451],{"className":31,"code":105450,"language":33,"meta":34,"style":34},"mujoco.mj_step(model, data)\n",[36,105452,105453],{"__ignoreMap":34},[39,105454,105455],{"class":41,"line":42},[39,105456,105450],{"class":45},[19,105458,105459,105460,1425,105462,1425,105464,29442],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[36,105461,102015],{},[36,105463,102018],{},[36,105465,102012],{},[19,105467,105468],{},"重置仿真:",[29,105470,105472],{"className":31,"code":105471,"language":33,"meta":34,"style":34},"mujoco.mj_resetData(model, data)\n",[36,105473,105474],{"__ignoreMap":34},[39,105475,105476],{"class":41,"line":42},[39,105477,105471],{"class":45},[19,105479,105480,105481,83593,105483,105485],{},"如果手动修改了 ",[36,105482,102015],{},[36,105484,102018],{},"，通常应调用:",[29,105487,105489],{"className":31,"code":105488,"language":33,"meta":34,"style":34},"mujoco.mj_forward(model, data)\n",[36,105490,105491],{"__ignoreMap":34},[39,105492,105493],{"class":41,"line":42},[39,105494,105488],{"class":45},[19,105496,105497],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[1188,105499,105501,1425,105503,1425,105505,105507],{"id":105500},"qposqvelctrl-是什么",[36,105502,104975],{},[36,105504,105305],{},[36,105506,105308],{}," 是什么",[19,105509,105510],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[1352,105512,105513,105525],{},[1355,105514,105515],{},[1358,105516,105517,105520,105522],{},[1361,105518,105519],{"align":24792},"字段",[1361,105521,101645],{"align":24792},[1361,105523,105524],{"align":24792},"谁来修改",[1398,105526,105527,105539,105551],{},[1358,105528,105529,105533,105536],{},[1403,105530,105531],{"align":24792},[36,105532,102015],{},[1403,105534,105535],{"align":24792},"广义位置，例如小车位置、关节角、自由物体位置姿态",[1403,105537,105538],{"align":24792},"MuJoCo 更新，也可以手动设置初始状态",[1358,105540,105541,105545,105548],{},[1403,105542,105543],{"align":24792},[36,105544,102018],{},[1403,105546,105547],{"align":24792},"广义速度，例如小车速度、关节角速度",[1403,105549,105550],{"align":24792},"MuJoCo 更新，也可以手动清零",[1358,105552,105553,105557,105560],{},[1403,105554,105555],{"align":24792},[36,105556,102021],{},[1403,105558,105559],{"align":24792},"actuator 的控制输入",[1403,105561,105562],{"align":24792},"主要由你的控制代码写入",[19,105564,10081,105565,101963,105567,105569],{},[36,105566,104975],{},[36,105568,105305],{}," 不一定同维。自由刚体就是典型例子：",[29,105571,105574],{"className":105572,"code":105573,"language":6244,"meta":34},[6242],"freejoint: qpos 7 维，qvel 6 维\n",[36,105575,105573],{"__ignoreMap":34},[1188,105577,105579,101963,105581,105583],{"id":105578},"mj_step-和-mj_forward-的区别",[36,105580,102160],{},[36,105582,105195],{}," 的区别",[1352,105585,105586,105599],{},[1355,105587,105588],{},[1358,105589,105590,105593,105596],{},[1361,105591,105592],{"align":24792},"函数",[1361,105594,105595],{"align":24792},"是否推进时间",[1361,105597,105598],{"align":24792},"什么时候用",[1398,105600,105601,105614],{},[1358,105602,105603,105608,105611],{},[1403,105604,105605],{"align":24792},[36,105606,105607],{},"mj_step(model, data)",[1403,105609,105610],{"align":24792},"是",[1403,105612,105613],{"align":24792},"正常仿真循环，每调用一次前进一步",[1358,105615,105616,105621,105624],{},[1403,105617,105618],{"align":24792},[36,105619,105620],{},"mj_forward(model, data)",[1403,105622,105623],{"align":24792},"否",[1403,105625,105626,105627,1425,105629,105631],{"align":24792},"手动改了 ",[36,105628,104975],{},[36,105630,105305],{}," 后，刷新派生量",[19,105633,105634],{},"例如你写：",[29,105636,105638],{"className":31,"code":105637,"language":33,"meta":34,"style":34},"data.qpos[2] = 2.0\n",[36,105639,105640],{"__ignoreMap":34},[39,105641,105642,105645,105647,105649,105651],{"class":41,"line":42},[39,105643,105644],{"class":45},"data.qpos[",[39,105646,63],{"class":56},[39,105648,5501],{"class":45},[39,105650,50],{"class":49},[39,105652,105653],{"class":56}," 2.0\n",[19,105655,105656],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[29,105658,105659],{"className":31,"code":105488,"language":33,"meta":34,"style":34},[36,105660,105661],{"__ignoreMap":34},[39,105662,105663],{"class":41,"line":42},[39,105664,105488],{"class":45},[1188,105666,105668],{"id":105667},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,105670,105671,105674,105675,105677],{},[36,105672,105673],{},"mujoco.mj_resetData(model, data)"," 会把 ",[36,105676,34456],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[29,105679,105681],{"className":31,"code":105680,"language":33,"meta":34,"style":34},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[36,105682,105683,105687,105697,105707],{"__ignoreMap":34},[39,105684,105685],{"class":41,"line":42},[39,105686,105471],{"class":45},[39,105688,105689,105692,105694],{"class":41,"line":74},[39,105690,105691],{"class":45},"data.qpos[:] ",[39,105693,50],{"class":49},[39,105695,105696],{"class":45}," random_qpos\n",[39,105698,105699,105702,105704],{"class":41,"line":99},[39,105700,105701],{"class":45},"data.qvel[:] ",[39,105703,50],{"class":49},[39,105705,105706],{"class":56}," 0.0\n",[39,105708,105709],{"class":41,"line":106},[39,105710,105488],{"class":45},[14,105712,102198],{"id":102197},[29,105714,105716],{"className":31,"code":105715,"language":33,"meta":34,"style":34},"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",[36,105717,105718,105724,105734,105738,105742,105750,105755,105759,105763,105767,105772,105776,105781,105786,105791,105795,105799,105803,105807,105811,105815,105834,105841,105853,105864,105880,105896,105900,105904,105916,105928,105936,105940,105951,105955,105971,105975,105979,105988,105992,105997,106006,106010,106023,106028,106037,106041,106045,106057],{"__ignoreMap":34},[39,105719,105720,105722],{"class":41,"line":42},[39,105721,31447],{"class":49},[39,105723,102246],{"class":45},[39,105725,105726,105728,105730,105732],{"class":41,"line":74},[39,105727,31447],{"class":49},[39,105729,32435],{"class":45},[39,105731,32438],{"class":49},[39,105733,32441],{"class":45},[39,105735,105736],{"class":41,"line":99},[39,105737,3458],{"emptyLinePlaceholder":1145},[39,105739,105740],{"class":41,"line":106},[39,105741,3458],{"emptyLinePlaceholder":1145},[39,105743,105744,105746,105748],{"class":41,"line":112},[39,105745,102259],{"class":56},[39,105747,14620],{"class":49},[39,105749,102264],{"class":1319},[39,105751,105752],{"class":41,"line":118},[39,105753,105754],{"class":1319},"\u003Cmujoco model=\"state_api\">\n",[39,105756,105757],{"class":41,"line":413},[39,105758,102274],{"class":1319},[39,105760,105761],{"class":41,"line":419},[39,105762,3458],{"emptyLinePlaceholder":1145},[39,105764,105765],{"class":41,"line":425},[39,105766,102283],{"class":1319},[39,105768,105769],{"class":41,"line":443},[39,105770,105771],{"class":1319},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[39,105773,105774],{"class":41,"line":449},[39,105775,3458],{"emptyLinePlaceholder":1145},[39,105777,105778],{"class":41,"line":455},[39,105779,105780],{"class":1319},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[39,105782,105783],{"class":41,"line":461},[39,105784,105785],{"class":1319},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[39,105787,105788],{"class":41,"line":475},[39,105789,105790],{"class":1319},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[39,105792,105793],{"class":41,"line":665},[39,105794,102312],{"class":1319},[39,105796,105797],{"class":41,"line":671},[39,105798,102317],{"class":1319},[39,105800,105801],{"class":41,"line":684},[39,105802,102322],{"class":1319},[39,105804,105805],{"class":41,"line":2732},[39,105806,96747],{"class":1319},[39,105808,105809],{"class":41,"line":2737},[39,105810,3458],{"emptyLinePlaceholder":1145},[39,105812,105813],{"class":41,"line":2751},[39,105814,3458],{"emptyLinePlaceholder":1145},[39,105816,105817,105819,105822,105825,105827,105830,105832],{"class":41,"line":2756},[39,105818,33002],{"class":49},[39,105820,105821],{"class":3021}," print_state",[39,105823,105824],{"class":45},"(prefix: ",[39,105826,2368],{"class":56},[39,105828,105829],{"class":45},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[39,105831,96735],{"class":56},[39,105833,4797],{"class":45},[39,105835,105836,105838],{"class":41,"line":2785},[39,105837,32354],{"class":56},[39,105839,105840],{"class":45},"(prefix)\n",[39,105842,105843,105845,105847,105850],{"class":41,"line":2790},[39,105844,32354],{"class":56},[39,105846,1221],{"class":45},[39,105848,105849],{"class":1319},"\"  timestep:\"",[39,105851,105852],{"class":45},", model.opt.timestep)\n",[39,105854,105855,105857,105859,105862],{"class":41,"line":2807},[39,105856,32354],{"class":56},[39,105858,1221],{"class":45},[39,105860,105861],{"class":1319},"\"  time:\"",[39,105863,102423],{"class":45},[39,105865,105866,105868,105870,105873,105876,105878],{"class":41,"line":2812},[39,105867,32354],{"class":56},[39,105869,1221],{"class":45},[39,105871,105872],{"class":1319},"\"  qpos:\"",[39,105874,105875],{"class":45},", np.round(data.qpos.copy(), ",[39,105877,84],{"class":56},[39,105879,31552],{"class":45},[39,105881,105882,105884,105886,105889,105892,105894],{"class":41,"line":2817},[39,105883,32354],{"class":56},[39,105885,1221],{"class":45},[39,105887,105888],{"class":1319},"\"  qvel:\"",[39,105890,105891],{"class":45},", np.round(data.qvel.copy(), ",[39,105893,84],{"class":56},[39,105895,31552],{"class":45},[39,105897,105898],{"class":41,"line":2822},[39,105899,3458],{"emptyLinePlaceholder":1145},[39,105901,105902],{"class":41,"line":2836},[39,105903,3458],{"emptyLinePlaceholder":1145},[39,105905,105906,105908,105910,105912,105914],{"class":41,"line":2841},[39,105907,33002],{"class":49},[39,105909,3031],{"class":3021},[39,105911,102343],{"class":45},[39,105913,96735],{"class":56},[39,105915,4797],{"class":45},[39,105917,105918,105920,105922,105924,105926],{"class":41,"line":3635},[39,105919,102352],{"class":45},[39,105921,50],{"class":49},[39,105923,102357],{"class":45},[39,105925,102259],{"class":56},[39,105927,209],{"class":45},[39,105929,105930,105932,105934],{"class":41,"line":3649},[39,105931,102366],{"class":45},[39,105933,50],{"class":49},[39,105935,102371],{"class":45},[39,105937,105938],{"class":41,"line":3657},[39,105939,3458],{"emptyLinePlaceholder":1145},[39,105941,105942,105945,105948],{"class":41,"line":3662},[39,105943,105944],{"class":45},"    print_state(",[39,105946,105947],{"class":1319},"\"initial\"",[39,105949,105950],{"class":45},", model, data)\n",[39,105952,105953],{"class":41,"line":3668},[39,105954,3458],{"emptyLinePlaceholder":1145},[39,105956,105957,105959,105961,105963,105965,105967,105969],{"class":41,"line":3674},[39,105958,4259],{"class":49},[39,105960,102446],{"class":45},[39,105962,27100],{"class":49},[39,105964,33498],{"class":56},[39,105966,1221],{"class":45},[39,105968,1855],{"class":56},[39,105970,31841],{"class":45},[39,105972,105973],{"class":41,"line":3679},[39,105974,102461],{"class":45},[39,105976,105977],{"class":41,"line":9004},[39,105978,3458],{"emptyLinePlaceholder":1145},[39,105980,105981,105983,105986],{"class":41,"line":9028},[39,105982,105944],{"class":45},[39,105984,105985],{"class":1319},"\"after 50 steps\"",[39,105987,105950],{"class":45},[39,105989,105990],{"class":41,"line":9033},[39,105991,3458],{"emptyLinePlaceholder":1145},[39,105993,105994],{"class":41,"line":9039},[39,105995,105996],{"class":45},"    mujoco.mj_resetData(model, data)\n",[39,105998,105999,106001,106004],{"class":41,"line":9066},[39,106000,105944],{"class":45},[39,106002,106003],{"class":1319},"\"after reset\"",[39,106005,105950],{"class":45},[39,106007,106008],{"class":41,"line":9071},[39,106009,3458],{"emptyLinePlaceholder":1145},[39,106011,106012,106015,106017,106019,106021],{"class":41,"line":9077},[39,106013,106014],{"class":45},"    data.qpos[",[39,106016,63],{"class":56},[39,106018,5501],{"class":45},[39,106020,50],{"class":49},[39,106022,105653],{"class":56},[39,106024,106025],{"class":41,"line":9089},[39,106026,106027],{"class":45},"    mujoco.mj_forward(model, data)\n",[39,106029,106030,106032,106035],{"class":41,"line":9101},[39,106031,105944],{"class":45},[39,106033,106034],{"class":1319},"\"after manual qpos edit\"",[39,106036,105950],{"class":45},[39,106038,106039],{"class":41,"line":9113},[39,106040,3458],{"emptyLinePlaceholder":1145},[39,106042,106043],{"class":41,"line":10772},[39,106044,3458],{"emptyLinePlaceholder":1145},[39,106046,106047,106049,106051,106053,106055],{"class":41,"line":10797},[39,106048,2596],{"class":49},[39,106050,32275],{"class":56},[39,106052,102504],{"class":49},[39,106054,102507],{"class":1319},[39,106056,4797],{"class":45},[39,106058,106059],{"class":41,"line":10820},[39,106060,102514],{"class":45},[19,106062,104515],{},[29,106064,106066],{"className":24878,"code":106065,"language":24880,"meta":34,"style":34},"touch ch3_python_state.py\n",[36,106067,106068],{"__ignoreMap":34},[39,106069,106070,106072],{"class":41,"line":42},[39,106071,102228],{"class":3021},[39,106073,106074],{"class":1319}," ch3_python_state.py\n",[19,106076,103246],{},[29,106078,106080],{"className":24878,"code":106079,"language":24880,"meta":34,"style":34},"python ch3_python_state.py\n",[36,106081,106082],{"__ignoreMap":34},[39,106083,106084,106086],{"class":41,"line":42},[39,106085,33],{"class":3021},[39,106087,106074],{"class":1319},[1188,106089,102517],{"id":102517},[19,106091,106092],{},"打印状态的函数：",[29,106094,106096],{"className":31,"code":106095,"language":33,"meta":34,"style":34},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[36,106097,106098],{"__ignoreMap":34},[39,106099,106100,106102,106104,106106,106108,106110,106112],{"class":41,"line":42},[39,106101,33002],{"class":49},[39,106103,105821],{"class":3021},[39,106105,105824],{"class":45},[39,106107,2368],{"class":56},[39,106109,105829],{"class":45},[39,106111,96735],{"class":56},[39,106113,4797],{"class":45},[19,106115,106116,106117,106119],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[36,106118,34456],{}," 里发生了什么。",[19,106121,106122],{},"推进 50 步：",[29,106124,106126],{"className":31,"code":106125,"language":33,"meta":34,"style":34},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[36,106127,106128,106144],{"__ignoreMap":34},[39,106129,106130,106132,106134,106136,106138,106140,106142],{"class":41,"line":42},[39,106131,4083],{"class":49},[39,106133,102446],{"class":45},[39,106135,27100],{"class":49},[39,106137,33498],{"class":56},[39,106139,1221],{"class":45},[39,106141,1855],{"class":56},[39,106143,31841],{"class":45},[39,106145,106146],{"class":41,"line":74},[39,106147,102644],{"class":45},[19,106149,106150,106151,106154,106155,106157],{},"由于 ",[36,106152,106153],{},"timestep=0.01","，所以 50 步后时间约为 ",[36,106156,36384],{}," 秒。",[19,106159,106160],{},"重置：",[29,106162,106163],{"className":31,"code":105471,"language":33,"meta":34,"style":34},[36,106164,106165],{"__ignoreMap":34},[39,106166,106167],{"class":41,"line":42},[39,106168,105471],{"class":45},[19,106170,106171],{},"这会把时间、位置、速度恢复到初始状态。",[19,106173,106174],{},"手动改高度：",[29,106176,106178],{"className":31,"code":106177,"language":33,"meta":34,"style":34},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[36,106179,106180,106192],{"__ignoreMap":34},[39,106181,106182,106184,106186,106188,106190],{"class":41,"line":42},[39,106183,105644],{"class":45},[39,106185,63],{"class":56},[39,106187,5501],{"class":45},[39,106189,50],{"class":49},[39,106191,105653],{"class":56},[39,106193,106194],{"class":41,"line":74},[39,106195,105488],{"class":45},[19,106197,106198,106199,106202,106203,106206],{},"这个例子里 ",[36,106200,106201],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[36,106204,106205],{},"2.0"," 表示把小球放到更高的位置。",[1188,106208,102653],{"id":102653},[29,106210,106211],{"className":31,"code":106095,"language":33,"meta":34,"style":34},[36,106212,106213],{"__ignoreMap":34},[39,106214,106215,106217,106219,106221,106223,106225,106227],{"class":41,"line":42},[39,106216,33002],{"class":49},[39,106218,105821],{"class":3021},[39,106220,105824],{"class":45},[39,106222,2368],{"class":56},[39,106224,105829],{"class":45},[39,106226,96735],{"class":56},[39,106228,4797],{"class":45},[19,106230,106231],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[1171,106233,106234,106243,106248],{},[1174,106235,106236,106239,106240,106242],{},[36,106237,106238],{},"prefix","：一段文字，比如 ",[36,106241,105947],{},"，用来说明现在打印的是哪个阶段。",[1174,106244,106245,106247],{},[36,106246,103030],{},"：MuJoCo 模型。",[1174,106249,106250,106252],{},[36,106251,34456],{},"：MuJoCo 当前状态。",[19,106254,106255,1425,106258,106261],{},[36,106256,106257],{},"prefix: str",[36,106259,106260],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[29,106263,106265],{"className":31,"code":106264,"language":33,"meta":34,"style":34},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[36,106266,106267],{"__ignoreMap":34},[39,106268,106269,106271,106273,106275,106277,106279],{"class":41,"line":42},[39,106270,31470],{"class":56},[39,106272,1221],{"class":45},[39,106274,105872],{"class":1319},[39,106276,105875],{"class":45},[39,106278,84],{"class":56},[39,106280,31552],{"class":45},[19,106282,106283,106286],{},[36,106284,106285],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[29,106288,106290],{"className":31,"code":106289,"language":33,"meta":34,"style":34},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[36,106291,106292,106304],{"__ignoreMap":34},[39,106293,106294,106296,106298,106300,106302],{"class":41,"line":42},[39,106295,102579],{"class":45},[39,106297,50],{"class":49},[39,106299,102357],{"class":45},[39,106301,102259],{"class":56},[39,106303,209],{"class":45},[39,106305,106306,106308,106310],{"class":41,"line":74},[39,106307,102603],{"class":45},[39,106309,50],{"class":49},[39,106311,102371],{"class":45},[19,106313,106314],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[29,106316,106318],{"className":31,"code":106317,"language":33,"meta":34,"style":34},"print_state(\"initial\", model, data)\n",[36,106319,106320],{"__ignoreMap":34},[39,106321,106322,106325,106327],{"class":41,"line":42},[39,106323,106324],{"class":45},"print_state(",[39,106326,105947],{"class":1319},[39,106328,105950],{"class":45},[19,106330,106331,106332,106335],{},"调用刚才定义的 ",[36,106333,106334],{},"print_state"," 函数，打印初始状态。",[29,106337,106338],{"className":31,"code":106125,"language":33,"meta":34,"style":34},[36,106339,106340,106356],{"__ignoreMap":34},[39,106341,106342,106344,106346,106348,106350,106352,106354],{"class":41,"line":42},[39,106343,4083],{"class":49},[39,106345,102446],{"class":45},[39,106347,27100],{"class":49},[39,106349,33498],{"class":56},[39,106351,1221],{"class":45},[39,106353,1855],{"class":56},[39,106355,31841],{"class":45},[39,106357,106358],{"class":41,"line":74},[39,106359,102644],{"class":45},[19,106361,106362],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[29,106364,106365],{"className":31,"code":105471,"language":33,"meta":34,"style":34},[36,106366,106367],{"__ignoreMap":34},[39,106368,106369],{"class":41,"line":42},[39,106370,105471],{"class":45},[19,106372,106373,106374,106376,106377,106379],{},"重置 ",[36,106375,34456],{},"。注意它不会重新创建 ",[36,106378,103030],{},"，因为模型结构没有变，只是状态回到初始值。",[29,106381,106382],{"className":31,"code":105637,"language":33,"meta":34,"style":34},[36,106383,106384],{"__ignoreMap":34},[39,106385,106386,106388,106390,106392,106394],{"class":41,"line":42},[39,106387,105644],{"class":45},[39,106389,63],{"class":56},[39,106391,5501],{"class":45},[39,106393,50],{"class":49},[39,106395,105653],{"class":56},[19,106397,106398,106399,1425,106402,1425,106405,106407],{},"这行是“手动改状态”。在 freejoint 中，",[36,106400,106401],{},"qpos[0]",[36,106403,106404],{},"qpos[1]",[36,106406,106201],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[29,106409,106410],{"className":31,"code":105488,"language":33,"meta":34,"style":34},[36,106411,106412],{"__ignoreMap":34},[39,106413,106414],{"class":41,"line":42},[39,106415,105488],{"class":45},[19,106417,106418,106419,106421,106422,106424],{},"手动改完 ",[36,106420,104975],{}," 后，调用 ",[36,106423,105195],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106426,103261],{"id":103260},[19,106428,106429],{},"你会看到:",[1171,106431,106432,106437,106442,106445],{},[1174,106433,106434,106435],{},"初始时间为 ",[36,106436,260],{},[1174,106438,106439,106440],{},"50 步后时间约为 ",[36,106441,36384],{},[1174,106443,106444],{},"reset 后状态恢复",[1174,106446,106447,106448,106451,106452],{},"手动修改 ",[36,106449,106450],{},"data.qpos[2]"," 后，小球高度变为 ",[36,106453,106205],{},[19,106455,106456,106458],{},[36,106457,106201],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,106460,106461],{},"输出里可以重点看三件事：",[1171,106463,106464,106472,106477],{},[1174,106465,106466,106468,106469,106471],{},[36,106467,3445],{}," 是否随着 ",[36,106470,102160],{}," 增加。",[1174,106473,106474,106476],{},[36,106475,104975],{}," 的 z 坐标是否因为下落而变化。",[1174,106478,106479,106481,106482,29442],{},[36,106480,105297],{}," 后时间是否回到 ",[36,106483,260],{},[14,106485,103293],{"id":103292},[1171,106487,106488,106494,106500,106506,106509,106518],{},[1174,106489,106490,106491,29442],{},"修改 timestep 为 ",[36,106492,106493],{},"0.005",[1174,106495,106496,106497,29442],{},"重新运行，检查 50 步后时间是否约为 ",[36,106498,106499],{},"0.25",[1174,106501,106502,106503,29442],{},"修改重力为 ",[36,106504,106505],{},"0 0 -1.0",[1174,106507,106508],{},"观察小球下降速度是否变慢。",[1174,106510,103356,106511,103359,106514,106517],{},[36,106512,106513],{},"data.qpos[2] = 2.0",[36,106515,106516],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[1174,106519,106520,106521,106524],{},"注释掉 ",[36,106522,106523],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106526,103398],{"id":103397},[1188,106528,106530,106531,106533],{"id":106529},"修改-dataqpos-后位置没有更新","修改 ",[36,106532,102015],{}," 后位置没有更新",[19,106535,103407],{},[29,106537,106538],{"className":31,"code":105488,"language":33,"meta":34,"style":34},[36,106539,106540],{"__ignoreMap":34},[39,106541,106542],{"class":41,"line":42},[39,106543,105488],{"class":45},[1188,106545,106546],{"id":106546},"数组维度看不懂",[19,106548,106549],{},"打印模型维度:",[29,106551,106553],{"className":31,"code":106552,"language":33,"meta":34,"style":34},"print(model.nq, model.nv, model.nu)\n",[36,106554,106555],{"__ignoreMap":34},[39,106556,106557,106559],{"class":41,"line":42},[39,106558,31470],{"class":56},[39,106560,106561],{"class":45},"(model.nq, model.nv, model.nu)\n",[1352,106563,106564,106572],{},[1355,106565,106566],{},[1358,106567,106568,106570],{},[1361,106569,105519],{"align":24792},[1361,106571,101645],{"align":24792},[1398,106573,106574,106584,106594],{},[1358,106575,106576,106581],{},[1403,106577,106578],{"align":24792},[36,106579,106580],{},"nq",[1403,106582,106583],{"align":24792},"位置变量数量",[1358,106585,106586,106591],{},[1403,106587,106588],{"align":24792},[36,106589,106590],{},"nv",[1403,106592,106593],{"align":24792},"速度变量数量",[1358,106595,106596,106600],{},[1403,106597,106598],{"align":24792},[36,106599,103107],{},[1403,106601,106602],{"align":24792},"控制输入数量",[1188,106604,106606,106607,106609],{"id":106605},"误以为-qpos-一定等于关节数","误以为 ",[36,106608,104975],{}," 一定等于关节数",[19,106611,106612,106613,83584,106615,106617,106618,106620],{},"不是。例如 ",[36,106614,102565],{},[36,106616,104975],{}," 是 7 维，但 ",[36,106619,105305],{}," 是 6 维。",[1188,106622,106624,106625,106627],{"id":106623},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[36,106626,104975],{}," 的第几位",[19,106629,106630],{},"初学时可以先打印：",[29,106632,106634],{"className":31,"code":106633,"language":33,"meta":34,"style":34},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[36,106635,106636,106646,106656,106668],{"__ignoreMap":34},[39,106637,106638,106640,106642,106644],{"class":41,"line":42},[39,106639,31470],{"class":56},[39,106641,1221],{"class":45},[39,106643,102384],{"class":1319},[39,106645,102387],{"class":45},[39,106647,106648,106650,106652,106654],{"class":41,"line":74},[39,106649,31470],{"class":56},[39,106651,1221],{"class":45},[39,106653,102396],{"class":1319},[39,106655,102399],{"class":45},[39,106657,106658,106660,106662,106665],{"class":41,"line":99},[39,106659,31470],{"class":56},[39,106661,1221],{"class":45},[39,106663,106664],{"class":1319},"\"qpos:\"",[39,106666,106667],{"class":45},", data.qpos)\n",[39,106669,106670,106672,106674,106677],{"class":41,"line":106},[39,106671,31470],{"class":56},[39,106673,1221],{"class":45},[39,106675,106676],{"class":1319},"\"qvel:\"",[39,106678,106679],{"class":45},", data.qvel)\n",[19,106681,106682],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[1188,106684,106685],{"id":106685},"仿真结果每次都一样",[19,106687,106688,106689,106691],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[36,106690,104975],{},"、目标点或控制输入。",[14,106693,103552],{"id":103551},[19,106695,106696,106697,25675],{},"Python 控制 MuJoCo 的核心就是读写 ",[36,106698,34456],{},[1171,106700,106701,106709,106714,106719],{},[1174,106702,106703,106704,101963,106706,106708],{},"用 ",[36,106705,102015],{},[36,106707,102018],{}," 读取状态。",[1174,106710,106703,106711,106713],{},[36,106712,102021],{}," 写入控制。",[1174,106715,106703,106716,106718],{},[36,106717,102160],{}," 推进时间。",[1174,106720,106721,106722,106724],{},"手动改状态后用 ",[36,106723,105195],{}," 刷新派生量。",[19,106726,106727],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1133,106729,106730],{},"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":34,"searchDepth":74,"depth":74,"links":106732},[106733,106734,106735,106742,106746,106747,106748,106758],{"id":101591,"depth":74,"text":101592},{"id":101714,"depth":74,"text":101715},{"id":101989,"depth":74,"text":101990,"children":106736},[106737,106739,106741],{"id":105500,"depth":99,"text":106738},"qpos、qvel、ctrl 是什么",{"id":105578,"depth":99,"text":106740},"mj_step 和 mj_forward 的区别",{"id":105667,"depth":99,"text":105668},{"id":102197,"depth":74,"text":102198,"children":106743},[106744,106745],{"id":102517,"depth":99,"text":102517},{"id":102653,"depth":99,"text":102653},{"id":103260,"depth":74,"text":103261},{"id":103292,"depth":74,"text":103293},{"id":103397,"depth":74,"text":103398,"children":106749},[106750,106752,106753,106755,106757],{"id":106529,"depth":99,"text":106751},"修改 data.qpos 后位置没有更新",{"id":106546,"depth":99,"text":106546},{"id":106605,"depth":99,"text":106754},"误以为 qpos 一定等于关节数",{"id":106623,"depth":99,"text":106756},"不知道某个元素在 qpos 的第几位",{"id":106685,"depth":99,"text":106685},{"id":103551,"depth":74,"text":103552},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105263,"description":34},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106765,"title":106766,"body":106767,"description":34,"extension":1143,"meta":108457,"navigation":1145,"path":108458,"seo":108459,"stem":108460,"__hash__":108461},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106768,"toc":108433},[106769,106772,106774,106777,106779,106804,106807,106826,106829,106831,106833,106857,106859,106873,106875,106916,106918,106942,106944,106947,106981,106983,106996,106999,107067,107076,107080,107083,107117,107123,107126,107130,107169,107172,107192,107196,107239,107241,107270,107273,107279,107282,107284,107678,107680,107692,107694,107705,107707,107710,107739,107747,107750,107785,107788,107790,107798,107801,107803,107814,107824,107844,107847,107883,107895,107943,107962,108004,108017,108045,108050,108071,108081,108099,108102,108136,108139,108159,108162,108181,108187,108189,108192,108198,108204,108214,108217,108223,108232,108234,108280,108282,108288,108294,108297,108300,108320,108323,108329,108335,108337,108360,108363,108366,108375,108378,108416,108418,108421,108427,108430],[10,106770,106766],{"id":106771},"_4关节actuator-与力控制",[14,106773,101592],{"id":101591},[19,106775,106776],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,106778,105276],{},[1171,106780,106781,106787,106792,106796,106801],{},[1174,106782,106783,106786],{},[36,106784,106785],{},"hinge"," 关节",[1174,106788,106789],{},[36,106790,106791],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[1174,106793,106794],{},[36,106795,102021],{},[1174,106797,106798],{},[36,106799,106800],{},"ctrlrange",[1174,106802,106803],{},"读取关节角和角速度",[19,106805,106806],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[29,106808,106810],{"className":31,"code":106809,"language":33,"meta":34,"style":34},"data.ctrl[0] = ...\n",[36,106811,106812],{"__ignoreMap":34},[39,106813,106814,106817,106819,106821,106823],{"class":41,"line":42},[39,106815,106816],{"class":45},"data.ctrl[",[39,106818,260],{"class":56},[39,106820,5501],{"class":45},[39,106822,50],{"class":49},[39,106824,106825],{"class":56}," ...\n",[19,106827,106828],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106830,101715],{"id":101714},[19,106832,101718],{},[29,106834,106835],{"className":24878,"code":105333,"language":24880,"meta":34,"style":34},[36,106836,106837],{"__ignoreMap":34},[39,106838,106839,106841,106843,106845,106847,106849,106851,106853,106855],{"class":41,"line":42},[39,106840,25633],{"class":3021},[39,106842,27372],{"class":1319},[39,106844,24890],{"class":1319},[39,106846,27457],{"class":56},[39,106848,105348],{"class":1319},[39,106850,101743],{"class":1319},[39,106852,103446],{"class":1319},[39,106854,101759],{"class":1319},[39,106856,105357],{"class":1319},[19,106858,103764],{},[29,106860,106861],{"className":24878,"code":101864,"language":24880,"meta":34,"style":34},[36,106862,106863],{"__ignoreMap":34},[39,106864,106865,106867,106869,106871],{"class":41,"line":42},[39,106866,24887],{"class":3021},[39,106868,24890],{"class":1319},[39,106870,101875],{"class":1319},[39,106872,101878],{"class":1319},[19,106874,103781],{},[29,106876,106878],{"className":24878,"code":106877,"language":24880,"meta":34,"style":34},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[36,106879,106880,106897,106906],{"__ignoreMap":34},[39,106881,106882,106884,106886,106888,106891,106893,106895],{"class":41,"line":42},[39,106883,31387],{"class":3021},[39,106885,30233],{"class":1319},[39,106887,26172],{"class":56},[39,106889,106890],{"class":1319}," mujoco-control",[39,106892,101920],{"class":1319},[39,106894,101923],{"class":56},[39,106896,101926],{"class":56},[39,106898,106899,106901,106903],{"class":41,"line":74},[39,106900,31387],{"class":3021},[39,106902,101933],{"class":1319},[39,106904,106905],{"class":1319}," mujoco-control\n",[39,106907,106908,106910,106912,106914],{"class":41,"line":99},[39,106909,24887],{"class":3021},[39,106911,24890],{"class":1319},[39,106913,101875],{"class":1319},[39,106915,101878],{"class":1319},[19,106917,101949],{},[1171,106919,106920,106926,106933,106939],{},[1174,106921,106922,106925],{},[36,106923,106924],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[1174,106927,106928,106930,106931,29442],{},[36,106929,102021],{}," 长度等于 ",[36,106932,103103],{},[1174,106934,83276,106935,106938],{},[36,106936,106937],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[1174,106940,106941],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106943,101990],{"id":101989},[19,106945,106946],{},"关节决定 body 如何运动:",[29,106948,106950],{"className":54121,"code":106949,"language":54123,"meta":34,"style":34},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[36,106951,106952],{"__ignoreMap":34},[39,106953,106954,106956,106958,106960,106962,106965,106967,106969,106971,106974,106976,106979],{"class":41,"line":42},[39,106955,2108],{"class":45},[39,106957,103901],{"class":52354},[39,106959,15976],{"class":3021},[39,106961,50],{"class":45},[39,106963,106964],{"class":1319},"\"hinge\"",[39,106966,54878],{"class":3021},[39,106968,50],{"class":45},[39,106970,106964],{"class":1319},[39,106972,106973],{"class":3021}," axis",[39,106975,50],{"class":45},[39,106977,106978],{"class":1319},"\"0 1 0\"",[39,106980,102089],{"class":45},[19,106982,103997],{},[1171,106984,106985,106990,106993],{},[1174,106986,106987,106988],{},"名字是 ",[36,106989,106785],{},[1174,106991,106992],{},"类型是旋转关节",[1174,106994,106995],{},"绕 y 轴旋转",[19,106997,106998],{},"actuator 决定如何施加控制:",[29,107000,107002],{"className":54121,"code":107001,"language":54123,"meta":34,"style":34},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[36,107003,107004,107013,107059],{"__ignoreMap":34},[39,107005,107006,107008,107011],{"class":41,"line":42},[39,107007,2108],{"class":45},[39,107009,107010],{"class":52354},"actuator",[39,107012,52361],{"class":45},[39,107014,107015,107017,107020,107022,107024,107027,107030,107032,107034,107037,107039,107041,107044,107046,107049,107052,107054,107057],{"class":41,"line":74},[39,107016,53198],{"class":45},[39,107018,107019],{"class":52354},"motor",[39,107021,15976],{"class":3021},[39,107023,50],{"class":45},[39,107025,107026],{"class":1319},"\"hinge_motor\"",[39,107028,107029],{"class":3021}," joint",[39,107031,50],{"class":45},[39,107033,106964],{"class":1319},[39,107035,107036],{"class":3021}," gear",[39,107038,50],{"class":45},[39,107040,4736],{"class":1319},[39,107042,107043],{"class":3021}," ctrlrange",[39,107045,50],{"class":45},[39,107047,107048],{"class":1319},"\"-2 2\"",[39,107050,107051],{"class":3021}," ctrllimited",[39,107053,50],{"class":45},[39,107055,107056],{"class":1319},"\"true\"",[39,107058,102089],{"class":45},[39,107060,107061,107063,107065],{"class":41,"line":99},[39,107062,52839],{"class":45},[39,107064,107010],{"class":52354},[39,107066,52361],{"class":45},[19,107068,107069,107072,107073,29442],{},[36,107070,107071],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[36,107074,107075],{},"[-2, 2]",[1188,107077,107079],{"id":107078},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,107081,107082],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[1352,107084,107085,107095],{},[1355,107086,107087],{},[1358,107088,107089,107091,107093],{},[1361,107090,26810],{"align":24792},[1361,107092,103641],{"align":24792},[1361,107094,101679],{"align":24792},[1398,107096,107097,107107],{},[1358,107098,107099,107101,107104],{},[1403,107100,103901],{"align":24792},[1403,107102,107103],{"align":24792},"定义能怎么动",[1403,107105,107106],{"align":24792},"门轴允许门旋转",[1358,107108,107109,107111,107114],{},[1403,107110,107010],{"align":24792},[1403,107112,107113],{"align":24792},"定义怎么施力或控制",[1403,107115,107116],{"align":24792},"人推门、马达带动门",[19,107118,107119,107120,107122],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[36,107121,102021],{}," 主动控制它。",[19,107124,107125],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[1188,107127,107129],{"id":107128},"hinge-joint","hinge joint",[29,107131,107133],{"className":54121,"code":107132,"language":54123,"meta":34,"style":34},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,107134,107135],{"__ignoreMap":34},[39,107136,107137,107139,107141,107143,107145,107147,107149,107151,107153,107155,107157,107159,107162,107164,107167],{"class":41,"line":42},[39,107138,2108],{"class":45},[39,107140,103901],{"class":52354},[39,107142,15976],{"class":3021},[39,107144,50],{"class":45},[39,107146,106964],{"class":1319},[39,107148,54878],{"class":3021},[39,107150,50],{"class":45},[39,107152,106964],{"class":1319},[39,107154,106973],{"class":3021},[39,107156,50],{"class":45},[39,107158,106978],{"class":1319},[39,107160,107161],{"class":3021}," damping",[39,107163,50],{"class":45},[39,107165,107166],{"class":1319},"\"0.1\"",[39,107168,102089],{"class":45},[19,107170,107171],{},"含义：",[1171,107173,107174,107180,107186],{},[1174,107175,107176,107179],{},[36,107177,107178],{},"type=\"hinge\"","：只能绕一个轴旋转。",[1174,107181,107182,107185],{},[36,107183,107184],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[1174,107187,107188,107191],{},[36,107189,107190],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[1188,107193,107195],{"id":107194},"motor-actuator","motor actuator",[29,107197,107199],{"className":54121,"code":107198,"language":54123,"meta":34,"style":34},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[36,107200,107201],{"__ignoreMap":34},[39,107202,107203,107205,107207,107209,107211,107213,107215,107217,107219,107221,107223,107225,107227,107229,107231,107233,107235,107237],{"class":41,"line":42},[39,107204,2108],{"class":45},[39,107206,107019],{"class":52354},[39,107208,15976],{"class":3021},[39,107210,50],{"class":45},[39,107212,107026],{"class":1319},[39,107214,107029],{"class":3021},[39,107216,50],{"class":45},[39,107218,106964],{"class":1319},[39,107220,107036],{"class":3021},[39,107222,50],{"class":45},[39,107224,4736],{"class":1319},[39,107226,107043],{"class":3021},[39,107228,50],{"class":45},[39,107230,107048],{"class":1319},[39,107232,107051],{"class":3021},[39,107234,50],{"class":45},[39,107236,107056],{"class":1319},[39,107238,102089],{"class":45},[19,107240,107171],{},[1171,107242,107243,107252,107258,107264],{},[1174,107244,107245,107248,107249,107251],{},[36,107246,107247],{},"joint=\"hinge\"","：这个电机作用在名为 ",[36,107250,106785],{}," 的关节上。",[1174,107253,107254,107257],{},[36,107255,107256],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[1174,107259,107260,107263],{},[36,107261,107262],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[1174,107265,107266,107269],{},[36,107267,107268],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,107271,107272],{},"简单理解：",[29,107274,107277],{"className":107275,"code":107276,"language":6244,"meta":34},[6242],"实际施加效果 ≈ data.ctrl[0] * gear\n",[36,107278,107276],{"__ignoreMap":34},[19,107280,107281],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107283,102198],{"id":102197},[29,107285,107287],{"className":31,"code":107286,"language":33,"meta":34,"style":34},"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",[36,107288,107289,107296,107300,107306,107316,107320,107324,107332,107337,107342,107346,107350,107355,107360,107364,107369,107374,107379,107384,107388,107392,107396,107401,107406,107411,107415,107419,107423,107427,107439,107451,107459,107463,107473,107483,107493,107497,107510,107523,107527,107544,107558,107593,107597,107601,107612,107627,107642,107654,107658,107662,107674],{"__ignoreMap":34},[39,107290,107291,107293],{"class":41,"line":42},[39,107292,31447],{"class":49},[39,107294,107295],{"class":45}," math\n",[39,107297,107298],{"class":41,"line":74},[39,107299,3458],{"emptyLinePlaceholder":1145},[39,107301,107302,107304],{"class":41,"line":99},[39,107303,31447],{"class":49},[39,107305,102246],{"class":45},[39,107307,107308,107310,107312,107314],{"class":41,"line":106},[39,107309,31447],{"class":49},[39,107311,32435],{"class":45},[39,107313,32438],{"class":49},[39,107315,32441],{"class":45},[39,107317,107318],{"class":41,"line":112},[39,107319,3458],{"emptyLinePlaceholder":1145},[39,107321,107322],{"class":41,"line":118},[39,107323,3458],{"emptyLinePlaceholder":1145},[39,107325,107326,107328,107330],{"class":41,"line":413},[39,107327,102259],{"class":56},[39,107329,14620],{"class":49},[39,107331,102264],{"class":1319},[39,107333,107334],{"class":41,"line":419},[39,107335,107336],{"class":1319},"\u003Cmujoco model=\"one_link_motor\">\n",[39,107338,107339],{"class":41,"line":425},[39,107340,107341],{"class":1319},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[39,107343,107344],{"class":41,"line":443},[39,107345,3458],{"emptyLinePlaceholder":1145},[39,107347,107348],{"class":41,"line":449},[39,107349,102283],{"class":1319},[39,107351,107352],{"class":41,"line":455},[39,107353,107354],{"class":1319},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[39,107356,107357],{"class":41,"line":461},[39,107358,107359],{"class":1319},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[39,107361,107362],{"class":41,"line":475},[39,107363,3458],{"emptyLinePlaceholder":1145},[39,107365,107366],{"class":41,"line":665},[39,107367,107368],{"class":1319},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[39,107370,107371],{"class":41,"line":671},[39,107372,107373],{"class":1319},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[39,107375,107376],{"class":41,"line":684},[39,107377,107378],{"class":1319},"        \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",[39,107380,107381],{"class":41,"line":2732},[39,107382,107383],{"class":1319},"      \u003C\u002Fbody>\n",[39,107385,107386],{"class":41,"line":2737},[39,107387,102312],{"class":1319},[39,107389,107390],{"class":41,"line":2751},[39,107391,102317],{"class":1319},[39,107393,107394],{"class":41,"line":2756},[39,107395,3458],{"emptyLinePlaceholder":1145},[39,107397,107398],{"class":41,"line":2785},[39,107399,107400],{"class":1319},"  \u003Cactuator>\n",[39,107402,107403],{"class":41,"line":2790},[39,107404,107405],{"class":1319},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[39,107407,107408],{"class":41,"line":2807},[39,107409,107410],{"class":1319},"  \u003C\u002Factuator>\n",[39,107412,107413],{"class":41,"line":2812},[39,107414,102322],{"class":1319},[39,107416,107417],{"class":41,"line":2817},[39,107418,96747],{"class":1319},[39,107420,107421],{"class":41,"line":2822},[39,107422,3458],{"emptyLinePlaceholder":1145},[39,107424,107425],{"class":41,"line":2836},[39,107426,3458],{"emptyLinePlaceholder":1145},[39,107428,107429,107431,107433,107435,107437],{"class":41,"line":2841},[39,107430,33002],{"class":49},[39,107432,3031],{"class":3021},[39,107434,102343],{"class":45},[39,107436,96735],{"class":56},[39,107438,4797],{"class":45},[39,107440,107441,107443,107445,107447,107449],{"class":41,"line":3635},[39,107442,102352],{"class":45},[39,107444,50],{"class":49},[39,107446,102357],{"class":45},[39,107448,102259],{"class":56},[39,107450,209],{"class":45},[39,107452,107453,107455,107457],{"class":41,"line":3649},[39,107454,102366],{"class":45},[39,107456,50],{"class":49},[39,107458,102371],{"class":45},[39,107460,107461],{"class":41,"line":3657},[39,107462,3458],{"emptyLinePlaceholder":1145},[39,107464,107465,107467,107469,107471],{"class":41,"line":3662},[39,107466,32354],{"class":56},[39,107468,1221],{"class":45},[39,107470,102384],{"class":1319},[39,107472,102387],{"class":45},[39,107474,107475,107477,107479,107481],{"class":41,"line":3668},[39,107476,32354],{"class":56},[39,107478,1221],{"class":45},[39,107480,102396],{"class":1319},[39,107482,102399],{"class":45},[39,107484,107485,107487,107489,107491],{"class":41,"line":3674},[39,107486,32354],{"class":56},[39,107488,1221],{"class":45},[39,107490,102408],{"class":1319},[39,107492,102411],{"class":45},[39,107494,107495],{"class":41,"line":3679},[39,107496,3458],{"emptyLinePlaceholder":1145},[39,107498,107499,107501,107504,107506,107508],{"class":41,"line":9004},[39,107500,4159],{"class":49},[39,107502,107503],{"class":45}," model.nu ",[39,107505,22004],{"class":49},[39,107507,26175],{"class":56},[39,107509,4797],{"class":45},[39,107511,107512,107514,107516,107518,107521],{"class":41,"line":9028},[39,107513,104377],{"class":49},[39,107515,104380],{"class":56},[39,107517,1221],{"class":45},[39,107519,107520],{"class":1319},"\"expected exactly one actuator\"",[39,107522,209],{"class":45},[39,107524,107525],{"class":41,"line":9033},[39,107526,3458],{"emptyLinePlaceholder":1145},[39,107528,107529,107531,107533,107535,107537,107539,107542],{"class":41,"line":9039},[39,107530,4259],{"class":49},[39,107532,32671],{"class":45},[39,107534,27100],{"class":49},[39,107536,33498],{"class":56},[39,107538,1221],{"class":45},[39,107540,107541],{"class":56},"2000",[39,107543,31841],{"class":45},[39,107545,107546,107549,107551,107553,107555],{"class":41,"line":9066},[39,107547,107548],{"class":45},"        t ",[39,107550,50],{"class":49},[39,107552,32671],{"class":45},[39,107554,1657],{"class":49},[39,107556,107557],{"class":45}," model.opt.timestep\n",[39,107559,107560,107563,107565,107567,107569,107572,107574,107577,107579,107581,107584,107586,107588,107590],{"class":41,"line":9071},[39,107561,107562],{"class":45},"        data.ctrl[",[39,107564,260],{"class":56},[39,107566,5501],{"class":45},[39,107568,50],{"class":49},[39,107570,107571],{"class":56}," 1.5",[39,107573,7574],{"class":49},[39,107575,107576],{"class":45}," math.sin(",[39,107578,106205],{"class":56},[39,107580,7574],{"class":49},[39,107582,107583],{"class":45}," math.pi ",[39,107585,1657],{"class":49},[39,107587,62921],{"class":56},[39,107589,7574],{"class":49},[39,107591,107592],{"class":45}," t)\n",[39,107594,107595],{"class":41,"line":9077},[39,107596,102461],{"class":45},[39,107598,107599],{"class":41,"line":9089},[39,107600,3458],{"emptyLinePlaceholder":1145},[39,107602,107603,107605,107607,107610],{"class":41,"line":9101},[39,107604,32354],{"class":56},[39,107606,1221],{"class":45},[39,107608,107609],{"class":1319},"\"time:\"",[39,107611,102423],{"class":45},[39,107613,107614,107616,107618,107621,107623,107625],{"class":41,"line":9113},[39,107615,32354],{"class":56},[39,107617,1221],{"class":45},[39,107619,107620],{"class":1319},"\"joint qpos:\"",[39,107622,105875],{"class":45},[39,107624,84],{"class":56},[39,107626,31552],{"class":45},[39,107628,107629,107631,107633,107636,107638,107640],{"class":41,"line":10772},[39,107630,32354],{"class":56},[39,107632,1221],{"class":45},[39,107634,107635],{"class":1319},"\"joint qvel:\"",[39,107637,105891],{"class":45},[39,107639,84],{"class":56},[39,107641,31552],{"class":45},[39,107643,107644,107646,107648,107651],{"class":41,"line":10797},[39,107645,32354],{"class":56},[39,107647,1221],{"class":45},[39,107649,107650],{"class":1319},"\"last ctrl:\"",[39,107652,107653],{"class":45},", data.ctrl.copy())\n",[39,107655,107656],{"class":41,"line":10820},[39,107657,3458],{"emptyLinePlaceholder":1145},[39,107659,107660],{"class":41,"line":10844},[39,107661,3458],{"emptyLinePlaceholder":1145},[39,107663,107664,107666,107668,107670,107672],{"class":41,"line":10849},[39,107665,2596],{"class":49},[39,107667,32275],{"class":56},[39,107669,102504],{"class":49},[39,107671,102507],{"class":1319},[39,107673,4797],{"class":45},[39,107675,107676],{"class":41,"line":10854},[39,107677,102514],{"class":45},[19,107679,104515],{},[29,107681,107683],{"className":24878,"code":107682,"language":24880,"meta":34,"style":34},"touch ch4_joint_motor.py\n",[36,107684,107685],{"__ignoreMap":34},[39,107686,107687,107689],{"class":41,"line":42},[39,107688,102228],{"class":3021},[39,107690,107691],{"class":1319}," ch4_joint_motor.py\n",[19,107693,103246],{},[29,107695,107697],{"className":24878,"code":107696,"language":24880,"meta":34,"style":34},"python ch4_joint_motor.py\n",[36,107698,107699],{"__ignoreMap":34},[39,107700,107701,107703],{"class":41,"line":42},[39,107702,33],{"class":3021},[39,107704,107691],{"class":1319},[1188,107706,102517],{"id":102517},[19,107708,107709],{},"检查 actuator 数量：",[29,107711,107713],{"className":31,"code":107712,"language":33,"meta":34,"style":34},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[36,107714,107715,107727],{"__ignoreMap":34},[39,107716,107717,107719,107721,107723,107725],{"class":41,"line":42},[39,107718,2596],{"class":49},[39,107720,107503],{"class":45},[39,107722,22004],{"class":49},[39,107724,26175],{"class":56},[39,107726,4797],{"class":45},[39,107728,107729,107731,107733,107735,107737],{"class":41,"line":74},[39,107730,104840],{"class":49},[39,107732,104380],{"class":56},[39,107734,1221],{"class":45},[39,107736,107520],{"class":1319},[39,107738,209],{"class":45},[19,107740,107741,107743,107744,107746],{},[36,107742,103103],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[36,107745,102021],{}," 长度应该是 1。",[19,107748,107749],{},"产生正弦控制信号：",[29,107751,107753],{"className":31,"code":107752,"language":33,"meta":34,"style":34},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[36,107754,107755],{"__ignoreMap":34},[39,107756,107757,107759,107761,107763,107765,107767,107769,107771,107773,107775,107777,107779,107781,107783],{"class":41,"line":42},[39,107758,106816],{"class":45},[39,107760,260],{"class":56},[39,107762,5501],{"class":45},[39,107764,50],{"class":49},[39,107766,107571],{"class":56},[39,107768,7574],{"class":49},[39,107770,107576],{"class":45},[39,107772,106205],{"class":56},[39,107774,7574],{"class":49},[39,107776,107583],{"class":45},[39,107778,1657],{"class":49},[39,107780,62921],{"class":56},[39,107782,7574],{"class":49},[39,107784,107592],{"class":45},[19,107786,107787],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,107789,102618],{},[29,107791,107792],{"className":31,"code":105450,"language":33,"meta":34,"style":34},[36,107793,107794],{"__ignoreMap":34},[39,107795,107796],{"class":41,"line":42},[39,107797,105450],{"class":45},[19,107799,107800],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[1188,107802,102653],{"id":102653},[29,107804,107806],{"className":31,"code":107805,"language":33,"meta":34,"style":34},"import math\n",[36,107807,107808],{"__ignoreMap":34},[39,107809,107810,107812],{"class":41,"line":42},[39,107811,31447],{"class":49},[39,107813,107295],{"class":45},[19,107815,107816,107817,101963,107820,107823],{},"导入 Python 标准库里的数学模块。后面要用 ",[36,107818,107819],{},"math.sin",[36,107821,107822],{},"math.pi"," 生成周期变化的控制信号。",[29,107825,107826],{"className":31,"code":104631,"language":33,"meta":34,"style":34},[36,107827,107828,107834],{"__ignoreMap":34},[39,107829,107830,107832],{"class":41,"line":42},[39,107831,31447],{"class":49},[39,107833,102246],{"class":45},[39,107835,107836,107838,107840,107842],{"class":41,"line":74},[39,107837,31447],{"class":49},[39,107839,32435],{"class":45},[39,107841,32438],{"class":49},[39,107843,32441],{"class":45},[19,107845,107846],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[29,107848,107849],{"className":54121,"code":107132,"language":54123,"meta":34,"style":34},[36,107850,107851],{"__ignoreMap":34},[39,107852,107853,107855,107857,107859,107861,107863,107865,107867,107869,107871,107873,107875,107877,107879,107881],{"class":41,"line":42},[39,107854,2108],{"class":45},[39,107856,103901],{"class":52354},[39,107858,15976],{"class":3021},[39,107860,50],{"class":45},[39,107862,106964],{"class":1319},[39,107864,54878],{"class":3021},[39,107866,50],{"class":45},[39,107868,106964],{"class":1319},[39,107870,106973],{"class":3021},[39,107872,50],{"class":45},[39,107874,106978],{"class":1319},[39,107876,107161],{"class":3021},[39,107878,50],{"class":45},[39,107880,107166],{"class":1319},[39,107882,102089],{"class":45},[19,107884,107885,107886,107888,107889,107891,107892,107894],{},"这行定义关节。",[36,107887,106785],{}," 表示旋转关节。",[36,107890,107184],{}," 表示绕 y 轴旋转。",[36,107893,107190],{}," 表示有一点阻尼，运动不会完全无损耗。",[29,107896,107898],{"className":54121,"code":107897,"language":54123,"meta":34,"style":34},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[36,107899,107900],{"__ignoreMap":34},[39,107901,107902,107904,107906,107908,107910,107913,107915,107917,107920,107923,107925,107928,107930,107932,107934,107936,107938,107941],{"class":41,"line":42},[39,107903,2108],{"class":45},[39,107905,102065],{"class":52354},[39,107907,15976],{"class":3021},[39,107909,50],{"class":45},[39,107911,107912],{"class":1319},"\"link_geom\"",[39,107914,54878],{"class":3021},[39,107916,50],{"class":45},[39,107918,107919],{"class":1319},"\"capsule\"",[39,107921,107922],{"class":3021}," fromto",[39,107924,50],{"class":45},[39,107926,107927],{"class":1319},"\"0 0 0 0 0 0.5\"",[39,107929,102081],{"class":3021},[39,107931,50],{"class":45},[39,107933,104723],{"class":1319},[39,107935,102946],{"class":3021},[39,107937,50],{"class":45},[39,107939,107940],{"class":1319},"\"0.5\"",[39,107942,102089],{"class":45},[19,107944,107945,107946,107948,107949,107951,107952,107955,107956,29442,107959,107961],{},"这行定义摆杆的形状。",[36,107947,104110],{}," 是胶囊体，适合表示杆子。",[36,107950,104121],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[36,107953,107954],{},"(0,0,0)"," 延伸到 ",[36,107957,107958],{},"(0,0,0.5)",[36,107960,104115],{}," 是半径。",[29,107963,107964],{"className":54121,"code":107198,"language":54123,"meta":34,"style":34},[36,107965,107966],{"__ignoreMap":34},[39,107967,107968,107970,107972,107974,107976,107978,107980,107982,107984,107986,107988,107990,107992,107994,107996,107998,108000,108002],{"class":41,"line":42},[39,107969,2108],{"class":45},[39,107971,107019],{"class":52354},[39,107973,15976],{"class":3021},[39,107975,50],{"class":45},[39,107977,107026],{"class":1319},[39,107979,107029],{"class":3021},[39,107981,50],{"class":45},[39,107983,106964],{"class":1319},[39,107985,107036],{"class":3021},[39,107987,50],{"class":45},[39,107989,4736],{"class":1319},[39,107991,107043],{"class":3021},[39,107993,50],{"class":45},[39,107995,107048],{"class":1319},[39,107997,107051],{"class":3021},[39,107999,50],{"class":45},[39,108001,107056],{"class":1319},[39,108003,102089],{"class":45},[19,108005,108006,108007,108009,108010,108013,108014,108016],{},"这行定义电机。它作用在 ",[36,108008,106785],{}," 关节上。",[36,108011,108012],{},"gear"," 可以理解成放大倍数。",[36,108015,106800],{}," 限制控制输入范围。",[29,108018,108019],{"className":31,"code":107712,"language":33,"meta":34,"style":34},[36,108020,108021,108033],{"__ignoreMap":34},[39,108022,108023,108025,108027,108029,108031],{"class":41,"line":42},[39,108024,2596],{"class":49},[39,108026,107503],{"class":45},[39,108028,22004],{"class":49},[39,108030,26175],{"class":56},[39,108032,4797],{"class":45},[39,108034,108035,108037,108039,108041,108043],{"class":41,"line":74},[39,108036,104840],{"class":49},[39,108038,104380],{"class":56},[39,108040,1221],{"class":45},[39,108042,107520],{"class":1319},[39,108044,209],{"class":45},[19,108046,108047,108049],{},[36,108048,103103],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[29,108051,108053],{"className":31,"code":108052,"language":33,"meta":34,"style":34},"for step in range(2000):\n",[36,108054,108055],{"__ignoreMap":34},[39,108056,108057,108059,108061,108063,108065,108067,108069],{"class":41,"line":42},[39,108058,4083],{"class":49},[39,108060,32671],{"class":45},[39,108062,27100],{"class":49},[39,108064,33498],{"class":56},[39,108066,1221],{"class":45},[39,108068,107541],{"class":56},[39,108070,31841],{"class":45},[19,108072,108073,108074,108076,108077,108080],{},"循环 2000 步。这里没有用 ",[36,108075,2190],{},"，而是用 ",[36,108078,108079],{},"step","，因为后面要用当前步数计算时间。",[29,108082,108084],{"className":31,"code":108083,"language":33,"meta":34,"style":34},"t = step * model.opt.timestep\n",[36,108085,108086],{"__ignoreMap":34},[39,108087,108088,108091,108093,108095,108097],{"class":41,"line":42},[39,108089,108090],{"class":45},"t ",[39,108092,50],{"class":49},[39,108094,32671],{"class":45},[39,108096,1657],{"class":49},[39,108098,107557],{"class":45},[19,108100,108101],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[29,108103,108104],{"className":31,"code":107752,"language":33,"meta":34,"style":34},[36,108105,108106],{"__ignoreMap":34},[39,108107,108108,108110,108112,108114,108116,108118,108120,108122,108124,108126,108128,108130,108132,108134],{"class":41,"line":42},[39,108109,106816],{"class":45},[39,108111,260],{"class":56},[39,108113,5501],{"class":45},[39,108115,50],{"class":49},[39,108117,107571],{"class":56},[39,108119,7574],{"class":49},[39,108121,107576],{"class":45},[39,108123,106205],{"class":56},[39,108125,7574],{"class":49},[39,108127,107583],{"class":45},[39,108129,1657],{"class":49},[39,108131,62921],{"class":56},[39,108133,7574],{"class":49},[39,108135,107592],{"class":45},[19,108137,108138],{},"这行给电机输入一个正弦波。拆开看：",[1171,108140,108141,108147,108153],{},[1174,108142,108143,108146],{},[36,108144,108145],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[1174,108148,108149,108152],{},[36,108150,108151],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[1174,108154,108155,108158],{},[36,108156,108157],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,108160,108161],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[29,108163,108165],{"className":31,"code":108164,"language":33,"meta":34,"style":34},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[36,108166,108167],{"__ignoreMap":34},[39,108168,108169,108171,108173,108175,108177,108179],{"class":41,"line":42},[39,108170,31470],{"class":56},[39,108172,1221],{"class":45},[39,108174,107620],{"class":1319},[39,108176,105875],{"class":45},[39,108178,84],{"class":56},[39,108180,31552],{"class":45},[19,108182,108183,108184,108186],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[36,108185,102015],{}," 只有一个数。",[14,108188,103261],{"id":103260},[19,108190,108191],{},"输出类似:",[29,108193,108196],{"className":108194,"code":108195,"language":6244,"meta":34},[6242],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[36,108197,108195],{"__ignoreMap":34},[19,108199,108200,108201,108203],{},"这里 ",[36,108202,107071],{}," 是电机输入。",[19,108205,108206,108209,108210,108213],{},[36,108207,108208],{},"joint qpos"," 是关节角度，单位通常是弧度。",[36,108211,108212],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,108215,108216],{},"角度单位提示：",[29,108218,108221],{"className":108219,"code":108220,"language":6244,"meta":34},[6242],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[36,108222,108220],{"__ignoreMap":34},[19,108224,108225,108226,108228,108229,108231],{},"如果你看到 ",[36,108227,104975],{}," 是 ",[36,108230,36384],{},"，大约就是 28.6 度。",[14,108233,103293],{"id":103292},[1171,108235,108236,108243,108246,108253,108256,108264,108272],{},[1174,108237,103356,108238,103359,108240,29442],{},[36,108239,107256],{},[36,108241,108242],{},"gear=\"5\"",[1174,108244,108245],{},"重新运行，观察关节运动是否更剧烈。",[1174,108247,103356,108248,103359,108250,29442],{},[36,108249,106800],{},[36,108251,108252],{},"-0.2 0.2",[1174,108254,108255],{},"重新运行，观察控制能力是否变弱。",[1174,108257,108258,108259,108261,108262,29442],{},"去掉 actuator，确认 ",[36,108260,103103],{}," 变成 ",[36,108263,260],{},[1174,108265,103356,108266,103359,108268,108271],{},[36,108267,107190],{},[36,108269,108270],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[1174,108273,103356,108274,103359,108276,108279],{},[36,108275,107184],{},[36,108277,108278],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108281,103398],{"id":103397},[1188,108283,108285],{"id":108284},"indexerror-index-0-is-out-of-bounds",[36,108286,108287],{},"IndexError: index 0 is out of bounds",[19,108289,108290,108291,108293],{},"原因是 ",[36,108292,106937],{},"，没有 actuator。",[1188,108295,108296],{"id":108296},"关节几乎不动",[19,108298,108299],{},"可能原因:",[1171,108301,108302,108307,108311,108317],{},[1174,108303,108304,108306],{},[36,108305,108012],{}," 太小",[1174,108308,108309,108306],{},[36,108310,106800],{},[1174,108312,108313,108316],{},[36,108314,108315],{},"damping"," 太大",[1174,108318,108319],{},"重力方向导致运动不明显",[1188,108321,108322],{"id":108322},"模型编译失败",[19,108324,108325,108326,108328],{},"检查 actuator 引用的 ",[36,108327,107247],{}," 是否存在，joint 名称是否拼写一致。",[1188,108330,108332,108334],{"id":108331},"datactrl0-写了但没有效果",[36,108333,107071],{}," 写了但没有效果",[19,108336,103520],{},[1171,108338,108339,108344,108347,108352,108357],{},[1174,108340,108341,108343],{},[36,108342,103103],{}," 是否大于 0。",[1174,108345,108346],{},"motor 是否引用了正确 joint。",[1174,108348,108349,108351],{},[36,108350,108012],{}," 是否太小。",[1174,108353,108354,108356],{},[36,108355,106800],{}," 是否把输入限制得太小。",[1174,108358,108359],{},"body 是否真的有可动 joint。",[1188,108361,108362],{"id":108362},"控制输入超过范围会怎样",[19,108364,108365],{},"如果设置了：",[29,108367,108369],{"className":54121,"code":108368,"language":54123,"meta":34,"style":34},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[36,108370,108371],{"__ignoreMap":34},[39,108372,108373],{"class":41,"line":42},[39,108374,108368],{"class":45},[19,108376,108377],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[29,108379,108381],{"className":31,"code":108380,"language":33,"meta":34,"style":34},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[36,108382,108383,108403],{"__ignoreMap":34},[39,108384,108385,108388,108390,108393,108395,108397,108399,108401],{"class":41,"line":42},[39,108386,108387],{"class":45},"action ",[39,108389,50],{"class":49},[39,108391,108392],{"class":45}," np.clip(action, ",[39,108394,1732],{"class":49},[39,108396,106205],{"class":56},[39,108398,13491],{"class":45},[39,108400,106205],{"class":56},[39,108402,209],{"class":45},[39,108404,108405,108407,108409,108411,108413],{"class":41,"line":74},[39,108406,106816],{"class":45},[39,108408,260],{"class":56},[39,108410,5501],{"class":45},[39,108412,50],{"class":49},[39,108414,108415],{"class":45}," action\n",[14,108417,103552],{"id":103551},[19,108419,108420],{},"这一章建立了控制任务的基本形式：",[29,108422,108425],{"className":108423,"code":108424,"language":6244,"meta":34},[6242],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[36,108426,108424],{"__ignoreMap":34},[19,108428,108429],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1133,108431,108432],{},"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":34,"searchDepth":74,"depth":74,"links":108434},[108435,108436,108437,108442,108446,108447,108448,108456],{"id":101591,"depth":74,"text":101592},{"id":101714,"depth":74,"text":101715},{"id":101989,"depth":74,"text":101990,"children":108438},[108439,108440,108441],{"id":107078,"depth":99,"text":107079},{"id":107128,"depth":99,"text":107129},{"id":107194,"depth":99,"text":107195},{"id":102197,"depth":74,"text":102198,"children":108443},[108444,108445],{"id":102517,"depth":99,"text":102517},{"id":102653,"depth":99,"text":102653},{"id":103260,"depth":74,"text":103261},{"id":103292,"depth":74,"text":103293},{"id":103397,"depth":74,"text":103398,"children":108449},[108450,108451,108452,108453,108455],{"id":108284,"depth":99,"text":108287},{"id":108296,"depth":99,"text":108296},{"id":108322,"depth":99,"text":108322},{"id":108331,"depth":99,"text":108454},"data.ctrl[0] 写了但没有效果",{"id":108362,"depth":99,"text":108362},{"id":103551,"depth":74,"text":103552},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106766,"description":34},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108463,"title":108464,"body":108465,"description":34,"extension":1143,"meta":110374,"navigation":1145,"path":110375,"seo":110376,"stem":110377,"__hash__":110378},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108466,"toc":110350},[108467,108470,108472,108475,108483,108486,108503,108506,108531,108534,108580,108582,108584,108639,108641,108660,108662,108705,108708,108725,108728,108744,108754,108761,108763,108766,108769,108803,108806,108854,108858,108861,108875,108884,108888,108891,108916,108919,108923,108936,108939,108945,108948,108963,108965,108968,109228,109230,109242,109245,109557,109559,109571,109573,109576,109591,109596,109599,109621,109624,109627,109661,109664,109668,109679,109682,109699,109702,109716,109723,109743,109750,109764,109767,109779,109794,109814,109817,109839,109842,109846,109861,109872,109887,109890,109920,109936,109965,109973,109997,110000,110018,110028,110040,110047,110056,110062,110071,110074,110076,110085,110088,110103,110105,110108,110119,110122,110133,110136,110154,110156,110173,110176,110204,110206,110210,110213,110243,110249,110252,110256,110264,110267,110269,110290,110293,110296,110312,110315,110331,110333,110336,110347],[10,108468,108464],{"id":108469},"_5viewer-可视化与-renderer-离屏渲染",[14,108471,101592],{"id":101591},[19,108473,108474],{},"本章掌握两类可视化方式:",[1171,108476,108477,108480],{},[1174,108478,108479],{},"交互式 viewer: 适合人工观察仿真",[1174,108481,108482],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108484,108485],{},"使用官方接口:",[29,108487,108489],{"className":31,"code":108488,"language":33,"meta":34,"style":34},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[36,108490,108491,108498],{"__ignoreMap":34},[39,108492,108493,108495],{"class":41,"line":42},[39,108494,31447],{"class":49},[39,108496,108497],{"class":45}," mujoco.viewer\n",[39,108499,108500],{"class":41,"line":74},[39,108501,108502],{"class":45},"mujoco.viewer.launch_passive(model, data)\n",[19,108504,108505],{},"以及:",[29,108507,108509],{"className":31,"code":108508,"language":33,"meta":34,"style":34},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[36,108510,108511,108521],{"__ignoreMap":34},[39,108512,108513,108516,108518],{"class":41,"line":42},[39,108514,108515],{"class":45},"renderer ",[39,108517,50],{"class":49},[39,108519,108520],{"class":45}," mujoco.Renderer(model)\n",[39,108522,108523,108526,108528],{"class":41,"line":74},[39,108524,108525],{"class":45},"image ",[39,108527,50],{"class":49},[39,108529,108530],{"class":45}," renderer.render()\n",[19,108532,108533],{},"新手建议先理解二者区别：",[1352,108535,108536,108552],{},[1355,108537,108538],{},[1358,108539,108540,108543,108546,108549],{},[1361,108541,108542],{"align":24792},"工具",[1361,108544,108545],{"align":24792},"用途",[1361,108547,108548],{"align":24792},"是否打开窗口",[1361,108550,108551],{"align":24792},"常见场景",[1398,108553,108554,108567],{},[1358,108555,108556,108559,108562,108564],{},[1403,108557,108558],{"align":24792},"Viewer",[1403,108560,108561],{"align":24792},"人眼实时观察仿真",[1403,108563,105610],{"align":24792},[1403,108565,108566],{"align":24792},"调试模型、看控制效果",[1358,108568,108569,108572,108575,108577],{},[1403,108570,108571],{"align":24792},"Renderer",[1403,108573,108574],{"align":24792},"生成图像数组",[1403,108576,105623],{"align":24792},[1403,108578,108579],{"align":24792},"保存图片、训练视觉策略、服务器批量采集",[14,108581,101715],{"id":101714},[19,108583,101718],{},[29,108585,108587],{"className":24878,"code":108586,"language":24880,"meta":34,"style":34},"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",[36,108588,108589,108601,108611,108619,108627],{"__ignoreMap":34},[39,108590,108591,108593,108595,108597,108599],{"class":41,"line":42},[39,108592,25633],{"class":3021},[39,108594,27372],{"class":1319},[39,108596,24890],{"class":1319},[39,108598,27457],{"class":56},[39,108600,25735],{"class":56},[39,108602,108603,108605,108607,108609],{"class":41,"line":74},[39,108604,101753],{"class":1319},[39,108606,101756],{"class":1319},[39,108608,101759],{"class":1319},[39,108610,25735],{"class":56},[39,108612,108613,108615,108617],{"class":41,"line":99},[39,108614,101766],{"class":1319},[39,108616,101769],{"class":1319},[39,108618,25735],{"class":56},[39,108620,108621,108623,108625],{"class":41,"line":106},[39,108622,101776],{"class":1319},[39,108624,101779],{"class":1319},[39,108626,25735],{"class":56},[39,108628,108629,108631,108633,108635,108637],{"class":41,"line":112},[39,108630,101786],{"class":1319},[39,108632,101789],{"class":1319},[39,108634,101792],{"class":1319},[39,108636,101795],{"class":1319},[39,108638,103461],{"class":1319},[19,108640,103764],{},[29,108642,108644],{"className":24878,"code":108643,"language":24880,"meta":34,"style":34},"pip install \"mujoco>=2.3\" numpy pillow\n",[36,108645,108646],{"__ignoreMap":34},[39,108647,108648,108650,108652,108654,108657],{"class":41,"line":42},[39,108649,24887],{"class":3021},[39,108651,24890],{"class":1319},[39,108653,101875],{"class":1319},[39,108655,108656],{"class":1319}," numpy",[39,108658,108659],{"class":1319}," pillow\n",[19,108661,103781],{},[29,108663,108665],{"className":24878,"code":108664,"language":24880,"meta":34,"style":34},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[36,108666,108667,108684,108693],{"__ignoreMap":34},[39,108668,108669,108671,108673,108675,108678,108680,108682],{"class":41,"line":42},[39,108670,31387],{"class":3021},[39,108672,30233],{"class":1319},[39,108674,26172],{"class":56},[39,108676,108677],{"class":1319}," mujoco-render",[39,108679,101920],{"class":1319},[39,108681,101923],{"class":56},[39,108683,101926],{"class":56},[39,108685,108686,108688,108690],{"class":41,"line":74},[39,108687,31387],{"class":3021},[39,108689,101933],{"class":1319},[39,108691,108692],{"class":1319}," mujoco-render\n",[39,108694,108695,108697,108699,108701,108703],{"class":41,"line":99},[39,108696,24887],{"class":3021},[39,108698,24890],{"class":1319},[39,108700,101875],{"class":1319},[39,108702,108656],{"class":1319},[39,108704,108659],{"class":1319},[19,108706,108707],{},"离屏渲染后端:",[29,108709,108711],{"className":24878,"code":108710,"language":24880,"meta":34,"style":34},"export MUJOCO_GL=egl\n",[36,108712,108713],{"__ignoreMap":34},[39,108714,108715,108717,108720,108722],{"class":41,"line":42},[39,108716,26099],{"class":49},[39,108718,108719],{"class":45}," MUJOCO_GL",[39,108721,50],{"class":49},[39,108723,108724],{"class":45},"egl\n",[19,108726,108727],{},"或:",[29,108729,108731],{"className":24878,"code":108730,"language":24880,"meta":34,"style":34},"export MUJOCO_GL=osmesa\n",[36,108732,108733],{"__ignoreMap":34},[39,108734,108735,108737,108739,108741],{"class":41,"line":42},[39,108736,26099],{"class":49},[39,108738,108719],{"class":45},[39,108740,50],{"class":49},[39,108742,108743],{"class":45},"osmesa\n",[19,108745,108746,108747,108750,108751,29442],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[36,108748,108749],{},"egl"," 失败，再尝试 ",[36,108752,108753],{},"osmesa",[19,108755,108756,108757,108760],{},"如果你在本机桌面环境运行，通常先不要设置 ",[36,108758,108759],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108762,101990],{"id":101989},[19,108764,108765],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,108767,108768],{},"典型 viewer 流程:",[29,108770,108772],{"className":31,"code":108771,"language":33,"meta":34,"style":34},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[36,108773,108774,108787,108794,108798],{"__ignoreMap":34},[39,108775,108776,108779,108782,108784],{"class":41,"line":42},[39,108777,108778],{"class":49},"with",[39,108780,108781],{"class":45}," mujoco.viewer.launch_passive(model, data) ",[39,108783,32438],{"class":49},[39,108785,108786],{"class":45}," viewer:\n",[39,108788,108789,108791],{"class":41,"line":74},[39,108790,3309],{"class":49},[39,108792,108793],{"class":45}," viewer.is_running():\n",[39,108795,108796],{"class":41,"line":99},[39,108797,102461],{"class":45},[39,108799,108800],{"class":41,"line":106},[39,108801,108802],{"class":45},"        viewer.sync()\n",[19,108804,108805],{},"典型 renderer 流程:",[29,108807,108809],{"className":31,"code":108808,"language":33,"meta":34,"style":34},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[36,108810,108811,108837,108841,108846],{"__ignoreMap":34},[39,108812,108813,108815,108817,108820,108822,108824,108826,108828,108830,108832,108835],{"class":41,"line":42},[39,108814,108515],{"class":45},[39,108816,50],{"class":49},[39,108818,108819],{"class":45}," mujoco.Renderer(model, ",[39,108821,26038],{"class":254},[39,108823,50],{"class":49},[39,108825,43397],{"class":56},[39,108827,13491],{"class":45},[39,108829,26034],{"class":254},[39,108831,50],{"class":49},[39,108833,108834],{"class":56},"640",[39,108836,209],{"class":45},[39,108838,108839],{"class":41,"line":74},[39,108840,105450],{"class":45},[39,108842,108843],{"class":41,"line":99},[39,108844,108845],{"class":45},"renderer.update_scene(data)\n",[39,108847,108848,108850,108852],{"class":41,"line":106},[39,108849,108525],{"class":45},[39,108851,50],{"class":49},[39,108853,108530],{"class":45},[1188,108855,108857],{"id":108856},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108859,108860],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[29,108862,108864],{"className":31,"code":108863,"language":33,"meta":34,"style":34},"mujoco.mj_step(model, data)\nviewer.sync()\n",[36,108865,108866,108870],{"__ignoreMap":34},[39,108867,108868],{"class":41,"line":42},[39,108869,105450],{"class":45},[39,108871,108872],{"class":41,"line":74},[39,108873,108874],{"class":45},"viewer.sync()\n",[19,108876,108877,108879,108880,108883],{},[36,108878,102160],{}," 负责算物理，",[36,108881,108882],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[1188,108885,108887],{"id":108886},"为什么要-sleep","为什么要 sleep",[19,108889,108890],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[29,108892,108894],{"className":31,"code":108893,"language":33,"meta":34,"style":34},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[36,108895,108896],{"__ignoreMap":34},[39,108897,108898,108901,108903,108906,108908,108911,108913],{"class":41,"line":42},[39,108899,108900],{"class":45},"sleep_time ",[39,108902,50],{"class":49},[39,108904,108905],{"class":45}," model.opt.timestep ",[39,108907,1732],{"class":49},[39,108909,108910],{"class":45}," (time.time() ",[39,108912,1732],{"class":49},[39,108914,108915],{"class":45}," step_start)\n",[19,108917,108918],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[1188,108920,108922],{"id":108921},"renderer-输出是什么","renderer 输出是什么",[29,108924,108926],{"className":31,"code":108925,"language":33,"meta":34,"style":34},"image = renderer.render()\n",[36,108927,108928],{"__ignoreMap":34},[39,108929,108930,108932,108934],{"class":41,"line":42},[39,108931,108525],{"class":45},[39,108933,50],{"class":49},[39,108935,108530],{"class":45},[19,108937,108938],{},"得到的是 NumPy 数组，形状通常是：",[29,108940,108943],{"className":108941,"code":108942,"language":6244,"meta":34},[6242],"(height, width, 3)\n",[36,108944,108942],{"__ignoreMap":34},[19,108946,108947],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[29,108949,108951],{"className":31,"code":108950,"language":33,"meta":34,"style":34},"Image.fromarray(image).save(\"render_output.png\")\n",[36,108952,108953],{"__ignoreMap":34},[39,108954,108955,108958,108961],{"class":41,"line":42},[39,108956,108957],{"class":45},"Image.fromarray(image).save(",[39,108959,108960],{"class":1319},"\"render_output.png\"",[39,108962,209],{"class":45},[14,108964,102198],{"id":102197},[19,108966,108967],{},"交互式 Viewer:",[29,108969,108971],{"className":31,"code":108970,"language":33,"meta":34,"style":34},"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",[36,108972,108973,108979,108983,108989,108995,108999,109003,109011,109016,109020,109024,109028,109033,109038,109042,109046,109050,109055,109059,109063,109067,109071,109075,109079,109091,109103,109111,109115,109125,109145,109155,109160,109165,109169,109186,109199,109204,109208,109212,109224],{"__ignoreMap":34},[39,108974,108975,108977],{"class":41,"line":42},[39,108976,31447],{"class":49},[39,108978,32884],{"class":45},[39,108980,108981],{"class":41,"line":74},[39,108982,3458],{"emptyLinePlaceholder":1145},[39,108984,108985,108987],{"class":41,"line":99},[39,108986,31447],{"class":49},[39,108988,102246],{"class":45},[39,108990,108991,108993],{"class":41,"line":106},[39,108992,31447],{"class":49},[39,108994,108497],{"class":45},[39,108996,108997],{"class":41,"line":112},[39,108998,3458],{"emptyLinePlaceholder":1145},[39,109000,109001],{"class":41,"line":118},[39,109002,3458],{"emptyLinePlaceholder":1145},[39,109004,109005,109007,109009],{"class":41,"line":413},[39,109006,102259],{"class":56},[39,109008,14620],{"class":49},[39,109010,102264],{"class":1319},[39,109012,109013],{"class":41,"line":419},[39,109014,109015],{"class":1319},"\u003Cmujoco model=\"viewer_demo\">\n",[39,109017,109018],{"class":41,"line":425},[39,109019,102274],{"class":1319},[39,109021,109022],{"class":41,"line":443},[39,109023,3458],{"emptyLinePlaceholder":1145},[39,109025,109026],{"class":41,"line":449},[39,109027,102283],{"class":1319},[39,109029,109030],{"class":41,"line":455},[39,109031,109032],{"class":1319},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[39,109034,109035],{"class":41,"line":461},[39,109036,109037],{"class":1319},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[39,109039,109040],{"class":41,"line":475},[39,109041,3458],{"emptyLinePlaceholder":1145},[39,109043,109044],{"class":41,"line":665},[39,109045,102297],{"class":1319},[39,109047,109048],{"class":41,"line":671},[39,109049,102302],{"class":1319},[39,109051,109052],{"class":41,"line":684},[39,109053,109054],{"class":1319},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[39,109056,109057],{"class":41,"line":2732},[39,109058,102312],{"class":1319},[39,109060,109061],{"class":41,"line":2737},[39,109062,102317],{"class":1319},[39,109064,109065],{"class":41,"line":2751},[39,109066,102322],{"class":1319},[39,109068,109069],{"class":41,"line":2756},[39,109070,96747],{"class":1319},[39,109072,109073],{"class":41,"line":2785},[39,109074,3458],{"emptyLinePlaceholder":1145},[39,109076,109077],{"class":41,"line":2790},[39,109078,3458],{"emptyLinePlaceholder":1145},[39,109080,109081,109083,109085,109087,109089],{"class":41,"line":2807},[39,109082,33002],{"class":49},[39,109084,3031],{"class":3021},[39,109086,102343],{"class":45},[39,109088,96735],{"class":56},[39,109090,4797],{"class":45},[39,109092,109093,109095,109097,109099,109101],{"class":41,"line":2812},[39,109094,102352],{"class":45},[39,109096,50],{"class":49},[39,109098,102357],{"class":45},[39,109100,102259],{"class":56},[39,109102,209],{"class":45},[39,109104,109105,109107,109109],{"class":41,"line":2817},[39,109106,102366],{"class":45},[39,109108,50],{"class":49},[39,109110,102371],{"class":45},[39,109112,109113],{"class":41,"line":2822},[39,109114,3458],{"emptyLinePlaceholder":1145},[39,109116,109117,109119,109121,109123],{"class":41,"line":2836},[39,109118,35233],{"class":49},[39,109120,108781],{"class":45},[39,109122,32438],{"class":49},[39,109124,108786],{"class":45},[39,109126,109127,109130,109133,109135,109138,109140,109143],{"class":41,"line":2841},[39,109128,109129],{"class":49},"        while",[39,109131,109132],{"class":45}," viewer.is_running() ",[39,109134,31517],{"class":49},[39,109136,109137],{"class":45}," data.time ",[39,109139,2108],{"class":49},[39,109141,109142],{"class":56}," 5.0",[39,109144,4797],{"class":45},[39,109146,109147,109150,109152],{"class":41,"line":3635},[39,109148,109149],{"class":45},"            step_start ",[39,109151,50],{"class":49},[39,109153,109154],{"class":45}," time.time()\n",[39,109156,109157],{"class":41,"line":3649},[39,109158,109159],{"class":45},"            mujoco.mj_step(model, data)\n",[39,109161,109162],{"class":41,"line":3657},[39,109163,109164],{"class":45},"            viewer.sync()\n",[39,109166,109167],{"class":41,"line":3662},[39,109168,3458],{"emptyLinePlaceholder":1145},[39,109170,109171,109174,109176,109178,109180,109182,109184],{"class":41,"line":3668},[39,109172,109173],{"class":45},"            sleep_time ",[39,109175,50],{"class":49},[39,109177,108905],{"class":45},[39,109179,1732],{"class":49},[39,109181,108910],{"class":45},[39,109183,1732],{"class":49},[39,109185,108915],{"class":45},[39,109187,109188,109190,109193,109195,109197],{"class":41,"line":3674},[39,109189,5700],{"class":49},[39,109191,109192],{"class":45}," sleep_time ",[39,109194,2158],{"class":49},[39,109196,5151],{"class":56},[39,109198,4797],{"class":45},[39,109200,109201],{"class":41,"line":3679},[39,109202,109203],{"class":45},"                time.sleep(sleep_time)\n",[39,109205,109206],{"class":41,"line":9004},[39,109207,3458],{"emptyLinePlaceholder":1145},[39,109209,109210],{"class":41,"line":9028},[39,109211,3458],{"emptyLinePlaceholder":1145},[39,109213,109214,109216,109218,109220,109222],{"class":41,"line":9033},[39,109215,2596],{"class":49},[39,109217,32275],{"class":56},[39,109219,102504],{"class":49},[39,109221,102507],{"class":1319},[39,109223,4797],{"class":45},[39,109225,109226],{"class":41,"line":9039},[39,109227,102514],{"class":45},[19,109229,104515],{},[29,109231,109233],{"className":24878,"code":109232,"language":24880,"meta":34,"style":34},"touch ch5_viewer.py\n",[36,109234,109235],{"__ignoreMap":34},[39,109236,109237,109239],{"class":41,"line":42},[39,109238,102228],{"class":3021},[39,109240,109241],{"class":1319}," ch5_viewer.py\n",[19,109243,109244],{},"离屏 Renderer 保存图片:",[29,109246,109248],{"className":31,"code":109247,"language":33,"meta":34,"style":34},"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",[36,109249,109250,109262,109266,109272,109282,109286,109290,109298,109303,109307,109311,109315,109319,109324,109328,109332,109336,109340,109344,109348,109352,109356,109360,109364,109368,109380,109392,109400,109425,109429,109445,109449,109453,109468,109477,109481,109495,109500,109505,109509,109521,109533,109537,109541,109553],{"__ignoreMap":34},[39,109251,109252,109254,109257,109259],{"class":41,"line":42},[39,109253,31792],{"class":49},[39,109255,109256],{"class":45}," pathlib ",[39,109258,31447],{"class":49},[39,109260,109261],{"class":45}," Path\n",[39,109263,109264],{"class":41,"line":74},[39,109265,3458],{"emptyLinePlaceholder":1145},[39,109267,109268,109270],{"class":41,"line":99},[39,109269,31447],{"class":49},[39,109271,102246],{"class":45},[39,109273,109274,109276,109278,109280],{"class":41,"line":106},[39,109275,31792],{"class":49},[39,109277,48318],{"class":56},[39,109279,48321],{"class":49},[39,109281,48324],{"class":45},[39,109283,109284],{"class":41,"line":112},[39,109285,3458],{"emptyLinePlaceholder":1145},[39,109287,109288],{"class":41,"line":118},[39,109289,3458],{"emptyLinePlaceholder":1145},[39,109291,109292,109294,109296],{"class":41,"line":413},[39,109293,102259],{"class":56},[39,109295,14620],{"class":49},[39,109297,102264],{"class":1319},[39,109299,109300],{"class":41,"line":419},[39,109301,109302],{"class":1319},"\u003Cmujoco model=\"renderer_demo\">\n",[39,109304,109305],{"class":41,"line":425},[39,109306,102274],{"class":1319},[39,109308,109309],{"class":41,"line":443},[39,109310,3458],{"emptyLinePlaceholder":1145},[39,109312,109313],{"class":41,"line":449},[39,109314,102283],{"class":1319},[39,109316,109317],{"class":41,"line":455},[39,109318,109032],{"class":1319},[39,109320,109321],{"class":41,"line":461},[39,109322,109323],{"class":1319},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[39,109325,109326],{"class":41,"line":475},[39,109327,109037],{"class":1319},[39,109329,109330],{"class":41,"line":665},[39,109331,3458],{"emptyLinePlaceholder":1145},[39,109333,109334],{"class":41,"line":671},[39,109335,102297],{"class":1319},[39,109337,109338],{"class":41,"line":684},[39,109339,102302],{"class":1319},[39,109341,109342],{"class":41,"line":2732},[39,109343,109054],{"class":1319},[39,109345,109346],{"class":41,"line":2737},[39,109347,102312],{"class":1319},[39,109349,109350],{"class":41,"line":2751},[39,109351,102317],{"class":1319},[39,109353,109354],{"class":41,"line":2756},[39,109355,102322],{"class":1319},[39,109357,109358],{"class":41,"line":2785},[39,109359,96747],{"class":1319},[39,109361,109362],{"class":41,"line":2790},[39,109363,3458],{"emptyLinePlaceholder":1145},[39,109365,109366],{"class":41,"line":2807},[39,109367,3458],{"emptyLinePlaceholder":1145},[39,109369,109370,109372,109374,109376,109378],{"class":41,"line":2812},[39,109371,33002],{"class":49},[39,109373,3031],{"class":3021},[39,109375,102343],{"class":45},[39,109377,96735],{"class":56},[39,109379,4797],{"class":45},[39,109381,109382,109384,109386,109388,109390],{"class":41,"line":2817},[39,109383,102352],{"class":45},[39,109385,50],{"class":49},[39,109387,102357],{"class":45},[39,109389,102259],{"class":56},[39,109391,209],{"class":45},[39,109393,109394,109396,109398],{"class":41,"line":2822},[39,109395,102366],{"class":45},[39,109397,50],{"class":49},[39,109399,102371],{"class":45},[39,109401,109402,109405,109407,109409,109411,109413,109415,109417,109419,109421,109423],{"class":41,"line":2836},[39,109403,109404],{"class":45},"    renderer ",[39,109406,50],{"class":49},[39,109408,108819],{"class":45},[39,109410,26038],{"class":254},[39,109412,50],{"class":49},[39,109414,43397],{"class":56},[39,109416,13491],{"class":45},[39,109418,26034],{"class":254},[39,109420,50],{"class":49},[39,109422,108834],{"class":56},[39,109424,209],{"class":45},[39,109426,109427],{"class":41,"line":2841},[39,109428,3458],{"emptyLinePlaceholder":1145},[39,109430,109431,109433,109435,109437,109439,109441,109443],{"class":41,"line":3635},[39,109432,4259],{"class":49},[39,109434,102446],{"class":45},[39,109436,27100],{"class":49},[39,109438,33498],{"class":56},[39,109440,1221],{"class":45},[39,109442,1519],{"class":56},[39,109444,31841],{"class":45},[39,109446,109447],{"class":41,"line":3649},[39,109448,102461],{"class":45},[39,109450,109451],{"class":41,"line":3657},[39,109452,3458],{"emptyLinePlaceholder":1145},[39,109454,109455,109458,109461,109463,109466],{"class":41,"line":3662},[39,109456,109457],{"class":45},"    renderer.update_scene(data, ",[39,109459,109460],{"class":254},"camera",[39,109462,50],{"class":49},[39,109464,109465],{"class":1319},"\"fixed_camera\"",[39,109467,209],{"class":45},[39,109469,109470,109473,109475],{"class":41,"line":3668},[39,109471,109472],{"class":45},"    image ",[39,109474,50],{"class":49},[39,109476,108530],{"class":45},[39,109478,109479],{"class":41,"line":3674},[39,109480,3458],{"emptyLinePlaceholder":1145},[39,109482,109483,109486,109488,109491,109493],{"class":41,"line":3679},[39,109484,109485],{"class":45},"    output_path ",[39,109487,50],{"class":49},[39,109489,109490],{"class":45}," Path(",[39,109492,108960],{"class":1319},[39,109494,209],{"class":45},[39,109496,109497],{"class":41,"line":9004},[39,109498,109499],{"class":45},"    Image.fromarray(image).save(output_path)\n",[39,109501,109502],{"class":41,"line":9028},[39,109503,109504],{"class":45},"    renderer.close()\n",[39,109506,109507],{"class":41,"line":9033},[39,109508,3458],{"emptyLinePlaceholder":1145},[39,109510,109511,109513,109515,109518],{"class":41,"line":9039},[39,109512,32354],{"class":56},[39,109514,1221],{"class":45},[39,109516,109517],{"class":1319},"\"saved:\"",[39,109519,109520],{"class":45},", output_path.resolve())\n",[39,109522,109523,109525,109527,109530],{"class":41,"line":9066},[39,109524,32354],{"class":56},[39,109526,1221],{"class":45},[39,109528,109529],{"class":1319},"\"image shape:\"",[39,109531,109532],{"class":45},", image.shape)\n",[39,109534,109535],{"class":41,"line":9071},[39,109536,3458],{"emptyLinePlaceholder":1145},[39,109538,109539],{"class":41,"line":9077},[39,109540,3458],{"emptyLinePlaceholder":1145},[39,109542,109543,109545,109547,109549,109551],{"class":41,"line":9089},[39,109544,2596],{"class":49},[39,109546,32275],{"class":56},[39,109548,102504],{"class":49},[39,109550,102507],{"class":1319},[39,109552,4797],{"class":45},[39,109554,109555],{"class":41,"line":9101},[39,109556,102514],{"class":45},[19,109558,104515],{},[29,109560,109562],{"className":24878,"code":109561,"language":24880,"meta":34,"style":34},"touch ch5_renderer.py\n",[36,109563,109564],{"__ignoreMap":34},[39,109565,109566,109568],{"class":41,"line":42},[39,109567,102228],{"class":3021},[39,109569,109570],{"class":1319}," ch5_renderer.py\n",[1188,109572,102517],{"id":102517},[19,109574,109575],{},"viewer 上下文：",[29,109577,109579],{"className":31,"code":109578,"language":33,"meta":34,"style":34},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[36,109580,109581],{"__ignoreMap":34},[39,109582,109583,109585,109587,109589],{"class":41,"line":42},[39,109584,108778],{"class":49},[39,109586,108781],{"class":45},[39,109588,32438],{"class":49},[39,109590,108786],{"class":45},[19,109592,109593,109595],{},[36,109594,108778],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,109597,109598],{},"窗口循环：",[29,109600,109602],{"className":31,"code":109601,"language":33,"meta":34,"style":34},"while viewer.is_running() and data.time \u003C 5.0:\n",[36,109603,109604],{"__ignoreMap":34},[39,109605,109606,109609,109611,109613,109615,109617,109619],{"class":41,"line":42},[39,109607,109608],{"class":49},"while",[39,109610,109132],{"class":45},[39,109612,31517],{"class":49},[39,109614,109137],{"class":45},[39,109616,2108],{"class":49},[39,109618,109142],{"class":56},[39,109620,4797],{"class":45},[19,109622,109623],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,109625,109626],{},"固定相机：",[29,109628,109630],{"className":54121,"code":109629,"language":54123,"meta":34,"style":34},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[36,109631,109632],{"__ignoreMap":34},[39,109633,109634,109636,109638,109640,109642,109644,109646,109648,109651,109654,109656,109659],{"class":41,"line":42},[39,109635,2108],{"class":45},[39,109637,109460],{"class":52354},[39,109639,15976],{"class":3021},[39,109641,50],{"class":45},[39,109643,109465],{"class":1319},[39,109645,102051],{"class":3021},[39,109647,50],{"class":45},[39,109649,109650],{"class":1319},"\"1.5 -2.0 1.2\"",[39,109652,109653],{"class":3021}," xyaxes",[39,109655,50],{"class":45},[39,109657,109658],{"class":1319},"\"1 0.75 0 0 0 1\"",[39,109660,102089],{"class":45},[19,109662,109663],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[1188,109665,109667],{"id":109666},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[29,109669,109671],{"className":31,"code":109670,"language":33,"meta":34,"style":34},"import time\n",[36,109672,109673],{"__ignoreMap":34},[39,109674,109675,109677],{"class":41,"line":42},[39,109676,31447],{"class":49},[39,109678,32884],{"class":45},[19,109680,109681],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[29,109683,109685],{"className":31,"code":109684,"language":33,"meta":34,"style":34},"import mujoco\nimport mujoco.viewer\n",[36,109686,109687,109693],{"__ignoreMap":34},[39,109688,109689,109691],{"class":41,"line":42},[39,109690,31447],{"class":49},[39,109692,102246],{"class":45},[39,109694,109695,109697],{"class":41,"line":74},[39,109696,31447],{"class":49},[39,109698,108497],{"class":45},[19,109700,109701],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[29,109703,109704],{"className":31,"code":109578,"language":33,"meta":34,"style":34},[36,109705,109706],{"__ignoreMap":34},[39,109707,109708,109710,109712,109714],{"class":41,"line":42},[39,109709,108778],{"class":49},[39,109711,108781],{"class":45},[39,109713,32438],{"class":49},[39,109715,108786],{"class":45},[19,109717,109718,109719,109722],{},"打开一个 viewer 窗口。",[36,109720,109721],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[29,109724,109725],{"className":31,"code":109601,"language":33,"meta":34,"style":34},[36,109726,109727],{"__ignoreMap":34},[39,109728,109729,109731,109733,109735,109737,109739,109741],{"class":41,"line":42},[39,109730,109608],{"class":49},[39,109732,109132],{"class":45},[39,109734,31517],{"class":49},[39,109736,109137],{"class":45},[39,109738,2108],{"class":49},[39,109740,109142],{"class":56},[39,109742,4797],{"class":45},[19,109744,109745,109746,109749],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[36,109747,109748],{},"viewer.is_running()"," 会变成 false，循环结束。",[29,109751,109753],{"className":31,"code":109752,"language":33,"meta":34,"style":34},"step_start = time.time()\n",[36,109754,109755],{"__ignoreMap":34},[39,109756,109757,109760,109762],{"class":41,"line":42},[39,109758,109759],{"class":45},"step_start ",[39,109761,50],{"class":49},[39,109763,109154],{"class":45},[19,109765,109766],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[29,109768,109769],{"className":31,"code":108863,"language":33,"meta":34,"style":34},[36,109770,109771,109775],{"__ignoreMap":34},[39,109772,109773],{"class":41,"line":42},[39,109774,105450],{"class":45},[39,109776,109777],{"class":41,"line":74},[39,109778,108874],{"class":45},[19,109780,109781,109783,109784,109786,109787,109789,109790,109793],{},[36,109782,102160],{}," 推进物理仿真。",[36,109785,108882],{}," 把最新的 ",[36,109788,34456],{}," 同步到窗口里显示。没有 ",[36,109791,109792],{},"sync()","，窗口可能看不到最新状态。",[29,109795,109796],{"className":31,"code":108893,"language":33,"meta":34,"style":34},[36,109797,109798],{"__ignoreMap":34},[39,109799,109800,109802,109804,109806,109808,109810,109812],{"class":41,"line":42},[39,109801,108900],{"class":45},[39,109803,50],{"class":49},[39,109805,108905],{"class":45},[39,109807,1732],{"class":49},[39,109809,108910],{"class":45},[39,109811,1732],{"class":49},[39,109813,108915],{"class":45},[19,109815,109816],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[29,109818,109820],{"className":31,"code":109819,"language":33,"meta":34,"style":34},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[36,109821,109822,109834],{"__ignoreMap":34},[39,109823,109824,109826,109828,109830,109832],{"class":41,"line":42},[39,109825,2596],{"class":49},[39,109827,109192],{"class":45},[39,109829,2158],{"class":49},[39,109831,5151],{"class":56},[39,109833,4797],{"class":45},[39,109835,109836],{"class":41,"line":74},[39,109837,109838],{"class":45},"    time.sleep(sleep_time)\n",[19,109840,109841],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[1188,109843,109845],{"id":109844},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[29,109847,109849],{"className":31,"code":109848,"language":33,"meta":34,"style":34},"from pathlib import Path\n",[36,109850,109851],{"__ignoreMap":34},[39,109852,109853,109855,109857,109859],{"class":41,"line":42},[39,109854,31792],{"class":49},[39,109856,109256],{"class":45},[39,109858,31447],{"class":49},[39,109860,109261],{"class":45},[19,109862,109863,109864,109867,109868,109871],{},"导入 ",[36,109865,109866],{},"Path","，用来处理文件路径。相比直接写字符串，",[36,109869,109870],{},"Path(\"render_output.png\")"," 更清晰。",[29,109873,109875],{"className":31,"code":109874,"language":33,"meta":34,"style":34},"from PIL import Image\n",[36,109876,109877],{"__ignoreMap":34},[39,109878,109879,109881,109883,109885],{"class":41,"line":42},[39,109880,31792],{"class":49},[39,109882,48318],{"class":56},[39,109884,48321],{"class":49},[39,109886,48324],{"class":45},[19,109888,109889],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[29,109891,109892],{"className":54121,"code":109629,"language":54123,"meta":34,"style":34},[36,109893,109894],{"__ignoreMap":34},[39,109895,109896,109898,109900,109902,109904,109906,109908,109910,109912,109914,109916,109918],{"class":41,"line":42},[39,109897,2108],{"class":45},[39,109899,109460],{"class":52354},[39,109901,15976],{"class":3021},[39,109903,50],{"class":45},[39,109905,109465],{"class":1319},[39,109907,102051],{"class":3021},[39,109909,50],{"class":45},[39,109911,109650],{"class":1319},[39,109913,109653],{"class":3021},[39,109915,50],{"class":45},[39,109917,109658],{"class":1319},[39,109919,102089],{"class":45},[19,109921,109922,109923,109925,109926,109928,109929,109932,109933,109935],{},"定义一个相机。",[36,109924,80864],{}," 是相机名字。",[36,109927,105091],{}," 是相机在世界里的位置。",[36,109930,109931],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[36,109934,105091],{}," 来调视角。",[29,109937,109939],{"className":31,"code":109938,"language":33,"meta":34,"style":34},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[36,109940,109941],{"__ignoreMap":34},[39,109942,109943,109945,109947,109949,109951,109953,109955,109957,109959,109961,109963],{"class":41,"line":42},[39,109944,108515],{"class":45},[39,109946,50],{"class":49},[39,109948,108819],{"class":45},[39,109950,26038],{"class":254},[39,109952,50],{"class":49},[39,109954,43397],{"class":56},[39,109956,13491],{"class":45},[39,109958,26034],{"class":254},[39,109960,50],{"class":49},[39,109962,108834],{"class":56},[39,109964,209],{"class":45},[19,109966,109967,109968,101963,109970,109972],{},"创建离屏渲染器。",[36,109969,26038],{},[36,109971,26034],{}," 决定输出图片大小。",[29,109974,109975],{"className":31,"code":102621,"language":33,"meta":34,"style":34},[36,109976,109977,109993],{"__ignoreMap":34},[39,109978,109979,109981,109983,109985,109987,109989,109991],{"class":41,"line":42},[39,109980,4083],{"class":49},[39,109982,102446],{"class":45},[39,109984,27100],{"class":49},[39,109986,33498],{"class":56},[39,109988,1221],{"class":45},[39,109990,1519],{"class":56},[39,109992,31841],{"class":45},[39,109994,109995],{"class":41,"line":74},[39,109996,102644],{"class":45},[19,109998,109999],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[29,110001,110003],{"className":31,"code":110002,"language":33,"meta":34,"style":34},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[36,110004,110005],{"__ignoreMap":34},[39,110006,110007,110010,110012,110014,110016],{"class":41,"line":42},[39,110008,110009],{"class":45},"renderer.update_scene(data, ",[39,110011,109460],{"class":254},[39,110013,50],{"class":49},[39,110015,109465],{"class":1319},[39,110017,209],{"class":45},[19,110019,110020,110021,110023,110024,110027],{},"告诉 renderer：用当前 ",[36,110022,34456],{}," 的状态更新画面，并使用名为 ",[36,110025,110026],{},"fixed_camera"," 的相机视角。",[29,110029,110030],{"className":31,"code":108925,"language":33,"meta":34,"style":34},[36,110031,110032],{"__ignoreMap":34},[39,110033,110034,110036,110038],{"class":41,"line":42},[39,110035,108525],{"class":45},[39,110037,50],{"class":49},[39,110039,108530],{"class":45},[19,110041,110042,110043,110046],{},"真正渲染出图像。",[36,110044,110045],{},"image"," 是一个 NumPy 数组，不是文件。",[29,110048,110050],{"className":31,"code":110049,"language":33,"meta":34,"style":34},"Image.fromarray(image).save(output_path)\n",[36,110051,110052],{"__ignoreMap":34},[39,110053,110054],{"class":41,"line":42},[39,110055,110049],{"class":45},[19,110057,110058,110059,29442],{},"把数组转换成图片，并保存到 ",[36,110060,110061],{},"render_output.png",[29,110063,110065],{"className":31,"code":110064,"language":33,"meta":34,"style":34},"renderer.close()\n",[36,110066,110067],{"__ignoreMap":34},[39,110068,110069],{"class":41,"line":42},[39,110070,110064],{"class":45},[19,110072,110073],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110075,103261],{"id":103260},[19,110077,110078,110079,110081,110082,29442],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[36,110080,110061],{},"，并输出图像数组形状，例如 ",[36,110083,110084],{},"(480, 640, 3)",[19,110086,110087],{},"如果图片里看不到方块，先检查：",[1171,110089,110090,110093,110096],{},[1174,110091,110092],{},"方块是否掉到相机视野外。",[1174,110094,110095],{},"camera 位置是否合理。",[1174,110097,110098,110099,110102],{},"是否在 ",[36,110100,110101],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110104,103293],{"id":103292},[19,110106,110107],{},"运行 viewer:",[29,110109,110111],{"className":24878,"code":110110,"language":24880,"meta":34,"style":34},"python ch5_viewer.py\n",[36,110112,110113],{"__ignoreMap":34},[39,110114,110115,110117],{"class":41,"line":42},[39,110116,33],{"class":3021},[39,110118,109241],{"class":1319},[19,110120,110121],{},"运行 renderer:",[29,110123,110125],{"className":24878,"code":110124,"language":24880,"meta":34,"style":34},"python ch5_renderer.py\n",[36,110126,110127],{"__ignoreMap":34},[39,110128,110129,110131],{"class":41,"line":42},[39,110130,33],{"class":3021},[39,110132,109570],{"class":1319},[19,110134,110135],{},"如果在服务器上运行:",[29,110137,110139],{"className":24878,"code":110138,"language":24880,"meta":34,"style":34},"MUJOCO_GL=egl python ch5_renderer.py\n",[36,110140,110141],{"__ignoreMap":34},[39,110142,110143,110145,110147,110149,110152],{"class":41,"line":42},[39,110144,108759],{"class":45},[39,110146,50],{"class":49},[39,110148,108749],{"class":1319},[39,110150,110151],{"class":3021}," python",[39,110153,109570],{"class":1319},[19,110155,108727],{},[29,110157,110159],{"className":24878,"code":110158,"language":24880,"meta":34,"style":34},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[36,110160,110161],{"__ignoreMap":34},[39,110162,110163,110165,110167,110169,110171],{"class":41,"line":42},[39,110164,108759],{"class":45},[39,110166,50],{"class":49},[39,110168,108753],{"class":1319},[39,110170,110151],{"class":3021},[39,110172,109570],{"class":1319},[19,110174,110175],{},"再做几个练习：",[1171,110177,110178,110185,110188,110194],{},[1174,110179,110180,110181,110184],{},"把 renderer 分辨率改成 ",[36,110182,110183],{},"height=240, width=320","，观察输出 shape。",[1174,110186,110187],{},"把方块颜色改成蓝色，重新保存图片。",[1174,110189,110190,110191,110193],{},"把相机 ",[36,110192,105091],{}," 改远一点，观察画面中物体是否变小。",[1174,110195,110196,110197,103359,110200,110203],{},"把 viewer 示例中的 ",[36,110198,110199],{},"data.time \u003C 5.0",[36,110201,110202],{},"data.time \u003C 20.0","，观察更长时间。",[14,110205,103398],{"id":103397},[1188,110207,110209],{"id":110208},"viewer-窗口打不开","viewer 窗口打不开",[19,110211,110212],{},"安装:",[29,110214,110216],{"className":24878,"code":110215,"language":24880,"meta":34,"style":34},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[36,110217,110218],{"__ignoreMap":34},[39,110219,110220,110222,110224,110226,110228,110230,110232,110234,110236,110238,110240],{"class":41,"line":42},[39,110221,25633],{"class":3021},[39,110223,27372],{"class":1319},[39,110225,24890],{"class":1319},[39,110227,27457],{"class":56},[39,110229,103451],{"class":1319},[39,110231,101779],{"class":1319},[39,110233,103456],{"class":1319},[39,110235,101792],{"class":1319},[39,110237,101798],{"class":1319},[39,110239,101789],{"class":1319},[39,110241,110242],{"class":1319}," libXinerama\n",[1188,110244,110246],{"id":110245},"glfwerror",[36,110247,110248],{},"GLFWError",[19,110250,110251],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[1188,110253,110255],{"id":110254},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110257,110258,110259,83593,110261,110263],{},"尝试 ",[36,110260,101982],{},[36,110262,101985],{},"。可能存在版本差异。",[1188,110265,110266],{"id":110266},"保存图片是黑的",[19,110268,103520],{},[1171,110270,110271,110274,110277,110287],{},[1174,110272,110273],{},"XML 里是否有 light。",[1174,110275,110276],{},"相机是否对着模型。",[1174,110278,110279,110280,110283,110284,29442],{},"是否先 ",[36,110281,110282],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[36,110285,110286],{},"renderer.render()",[1174,110288,110289],{},"物体是否已经掉出视野。",[1188,110291,110292],{"id":110292},"远程服务器没有显示器",[19,110294,110295],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[29,110297,110298],{"className":24878,"code":110138,"language":24880,"meta":34,"style":34},[36,110299,110300],{"__ignoreMap":34},[39,110301,110302,110304,110306,110308,110310],{"class":41,"line":42},[39,110303,108759],{"class":45},[39,110305,50],{"class":49},[39,110307,108749],{"class":1319},[39,110309,110151],{"class":3021},[39,110311,109570],{"class":1319},[19,110313,110314],{},"如果 EGL 不可用，再尝试：",[29,110316,110317],{"className":24878,"code":110158,"language":24880,"meta":34,"style":34},[36,110318,110319],{"__ignoreMap":34},[39,110320,110321,110323,110325,110327,110329],{"class":41,"line":42},[39,110322,108759],{"class":45},[39,110324,50],{"class":49},[39,110326,108753],{"class":1319},[39,110328,110151],{"class":3021},[39,110330,109570],{"class":1319},[14,110332,103552],{"id":103551},[19,110334,110335],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[1171,110337,110338,110341,110344],{},[1174,110339,110340],{},"先用 viewer 看模型和控制是否正常。",[1174,110342,110343],{},"再用 renderer 保存图片或构造视觉观测。",[1174,110345,110346],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1133,110348,110349],{},"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":34,"searchDepth":74,"depth":74,"links":110351},[110352,110353,110354,110359,110364,110365,110366,110373],{"id":101591,"depth":74,"text":101592},{"id":101714,"depth":74,"text":101715},{"id":101989,"depth":74,"text":101990,"children":110355},[110356,110357,110358],{"id":108856,"depth":99,"text":108857},{"id":108886,"depth":99,"text":108887},{"id":108921,"depth":99,"text":108922},{"id":102197,"depth":74,"text":102198,"children":110360},[110361,110362,110363],{"id":102517,"depth":99,"text":102517},{"id":109666,"depth":99,"text":109667},{"id":109844,"depth":99,"text":109845},{"id":103260,"depth":74,"text":103261},{"id":103292,"depth":74,"text":103293},{"id":103397,"depth":74,"text":103398,"children":110367},[110368,110369,110370,110371,110372],{"id":110208,"depth":99,"text":110209},{"id":110245,"depth":99,"text":110248},{"id":110254,"depth":99,"text":110255},{"id":110266,"depth":99,"text":110266},{"id":110292,"depth":99,"text":110292},{"id":103551,"depth":74,"text":103552},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108464,"description":34},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110380,"title":110381,"body":110382,"description":34,"extension":1143,"meta":112293,"navigation":1145,"path":112294,"seo":112295,"stem":112296,"__hash__":112297},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110383,"toc":112269},[110384,110387,110389,110392,110394,110413,110416,110422,110425,110427,110429,110453,110455,110469,110471,110512,110514,110525,110527,110530,110536,110539,110573,110576,110608,110611,110643,110647,110650,110690,110693,110699,110702,110708,110712,110715,110721,110724,110728,110731,110771,110773,110786,110789,110791,111373,111375,111387,111390,111401,111403,111406,111425,111437,111440,111461,111464,111467,111510,111513,111516,111536,111543,111545,111563,111578,111581,111587,111590,111596,111613,111620,111651,111662,111696,111707,111724,111733,111741,111746,111760,111763,111784,111790,111804,111809,111839,111849,111874,111882,111905,111908,111924,111927,111935,111941,111963,111976,111997,112006,112045,112056,112058,112061,112067,112070,112073,112079,112082,112102,112105,112107,112146,112148,112151,112159,112162,112165,112192,112195,112205,112211,112214,112220,112222,112228,112232,112235,112237,112240,112264,112267],[10,110385,110381],{"id":110386},"_6控制任务cartpole",[14,110388,101592],{"id":101591},[19,110390,110391],{},"本章搭建一个最小 Cartpole 控制任务。",[19,110393,105276],{},[1171,110395,110396,110399,110401,110404,110407,110410],{},[1174,110397,110398],{},"slide joint",[1174,110400,107129],{},[1174,110402,110403],{},"cart force actuator",[1174,110405,110406],{},"状态观测",[1174,110408,110409],{},"简单控制循环",[1174,110411,110412],{},"reward 设计雏形",[19,110414,110415],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[29,110417,110420],{"className":110418,"code":110419,"language":6244,"meta":34},[6242],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[36,110421,110419],{"__ignoreMap":34},[19,110423,110424],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110426,101715],{"id":101714},[19,110428,101718],{},[29,110430,110431],{"className":24878,"code":105333,"language":24880,"meta":34,"style":34},[36,110432,110433],{"__ignoreMap":34},[39,110434,110435,110437,110439,110441,110443,110445,110447,110449,110451],{"class":41,"line":42},[39,110436,25633],{"class":3021},[39,110438,27372],{"class":1319},[39,110440,24890],{"class":1319},[39,110442,27457],{"class":56},[39,110444,105348],{"class":1319},[39,110446,101743],{"class":1319},[39,110448,103446],{"class":1319},[39,110450,101759],{"class":1319},[39,110452,105357],{"class":1319},[19,110454,103764],{},[29,110456,110457],{"className":24878,"code":101864,"language":24880,"meta":34,"style":34},[36,110458,110459],{"__ignoreMap":34},[39,110460,110461,110463,110465,110467],{"class":41,"line":42},[39,110462,24887],{"class":3021},[39,110464,24890],{"class":1319},[39,110466,101875],{"class":1319},[39,110468,101878],{"class":1319},[19,110470,103781],{},[29,110472,110474],{"className":24878,"code":110473,"language":24880,"meta":34,"style":34},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[36,110475,110476,110493,110502],{"__ignoreMap":34},[39,110477,110478,110480,110482,110484,110487,110489,110491],{"class":41,"line":42},[39,110479,31387],{"class":3021},[39,110481,30233],{"class":1319},[39,110483,26172],{"class":56},[39,110485,110486],{"class":1319}," mujoco-cartpole",[39,110488,101920],{"class":1319},[39,110490,101923],{"class":56},[39,110492,101926],{"class":56},[39,110494,110495,110497,110499],{"class":41,"line":74},[39,110496,31387],{"class":3021},[39,110498,101933],{"class":1319},[39,110500,110501],{"class":1319}," mujoco-cartpole\n",[39,110503,110504,110506,110508,110510],{"class":41,"line":99},[39,110505,24887],{"class":3021},[39,110507,24890],{"class":1319},[39,110509,101875],{"class":1319},[39,110511,101878],{"class":1319},[19,110513,101949],{},[1171,110515,110516,110519,110522],{},[1174,110517,110518],{},"本章不依赖 Gymnasium。",[1174,110520,110521],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[1174,110523,110524],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110526,101990],{"id":101989},[19,110528,110529],{},"Cartpole 的模型结构:",[29,110531,110534],{"className":110532,"code":110533,"language":6244,"meta":34},[6242],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[36,110535,110533],{"__ignoreMap":34},[19,110537,110538],{},"小车通过 slide joint 左右移动:",[29,110540,110542],{"className":54121,"code":110541,"language":54123,"meta":34,"style":34},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[36,110543,110544],{"__ignoreMap":34},[39,110545,110546,110548,110550,110552,110554,110557,110559,110561,110564,110566,110568,110571],{"class":41,"line":42},[39,110547,2108],{"class":45},[39,110549,103901],{"class":52354},[39,110551,15976],{"class":3021},[39,110553,50],{"class":45},[39,110555,110556],{"class":1319},"\"cart_x\"",[39,110558,54878],{"class":3021},[39,110560,50],{"class":45},[39,110562,110563],{"class":1319},"\"slide\"",[39,110565,106973],{"class":3021},[39,110567,50],{"class":45},[39,110569,110570],{"class":1319},"\"1 0 0\"",[39,110572,102089],{"class":45},[19,110574,110575],{},"杆子通过 hinge joint 旋转:",[29,110577,110579],{"className":54121,"code":110578,"language":54123,"meta":34,"style":34},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[36,110580,110581],{"__ignoreMap":34},[39,110582,110583,110585,110587,110589,110591,110594,110596,110598,110600,110602,110604,110606],{"class":41,"line":42},[39,110584,2108],{"class":45},[39,110586,103901],{"class":52354},[39,110588,15976],{"class":3021},[39,110590,50],{"class":45},[39,110592,110593],{"class":1319},"\"pole_hinge\"",[39,110595,54878],{"class":3021},[39,110597,50],{"class":45},[39,110599,106964],{"class":1319},[39,110601,106973],{"class":3021},[39,110603,50],{"class":45},[39,110605,106978],{"class":1319},[39,110607,102089],{"class":45},[19,110609,110610],{},"控制力作用在小车 slide joint 上:",[29,110612,110614],{"className":54121,"code":110613,"language":54123,"meta":34,"style":34},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[36,110615,110616],{"__ignoreMap":34},[39,110617,110618,110620,110622,110624,110626,110629,110631,110633,110635,110637,110639,110641],{"class":41,"line":42},[39,110619,2108],{"class":45},[39,110621,107019],{"class":52354},[39,110623,15976],{"class":3021},[39,110625,50],{"class":45},[39,110627,110628],{"class":1319},"\"cart_motor\"",[39,110630,107029],{"class":3021},[39,110632,50],{"class":45},[39,110634,110556],{"class":1319},[39,110636,107036],{"class":3021},[39,110638,50],{"class":45},[39,110640,55370],{"class":1319},[39,110642,102089],{"class":45},[1188,110644,110646],{"id":110645},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,110648,110649],{},"这个简化模型有两个关节：",[1352,110651,110652,110663],{},[1355,110653,110654],{},[1358,110655,110656,110658,110660],{},[1361,110657,103704],{"align":24792},[1361,110659,24793],{"align":24792},[1361,110661,110662],{"align":24792},"对应状态",[1398,110664,110665,110678],{},[1358,110666,110667,110672,110675],{},[1403,110668,110669],{"align":24792},[36,110670,110671],{},"cart_x",[1403,110673,110674],{"align":24792},"slide",[1403,110676,110677],{"align":24792},"小车 x 位置",[1358,110679,110680,110685,110687],{},[1403,110681,110682],{"align":24792},[36,110683,110684],{},"pole_hinge",[1403,110686,106785],{"align":24792},[1403,110688,110689],{"align":24792},"杆子角度",[19,110691,110692],{},"所以：",[29,110694,110697],{"className":110695,"code":110696,"language":6244,"meta":34},[6242],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[36,110698,110696],{"__ignoreMap":34},[19,110700,110701],{},"把它们拼起来就是观测：",[29,110703,110706],{"className":110704,"code":110705,"language":6244,"meta":34},[6242],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[36,110707,110705],{"__ignoreMap":34},[1188,110709,110711],{"id":110710},"action-是什么","action 是什么",[19,110713,110714],{},"本章只有一个 actuator：",[29,110716,110719],{"className":110717,"code":110718,"language":6244,"meta":34},[6242],"data.ctrl[0] = action\n",[36,110720,110718],{"__ignoreMap":34},[19,110722,110723],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[1188,110725,110727],{"id":110726},"reward-是什么","reward 是什么",[19,110729,110730],{},"奖励函数：",[29,110732,110734],{"className":31,"code":110733,"language":33,"meta":34,"style":34},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[36,110735,110736],{"__ignoreMap":34},[39,110737,110738,110740,110743,110745,110747,110749,110752,110754,110757,110759,110761,110763,110766,110768],{"class":41,"line":42},[39,110739,18102],{"class":49},[39,110741,110742],{"class":56}," float",[39,110744,1221],{"class":45},[39,110746,103348],{"class":56},[39,110748,53325],{"class":49},[39,110750,110751],{"class":56}," 0.1",[39,110753,7574],{"class":49},[39,110755,110756],{"class":45}," cart_x ",[39,110758,1657],{"class":49},[39,110760,110756],{"class":45},[39,110762,1732],{"class":49},[39,110764,110765],{"class":45}," pole_angle ",[39,110767,1657],{"class":49},[39,110769,110770],{"class":45}," pole_angle)\n",[19,110772,107171],{},[1171,110774,110775,110780,110783],{},[1174,110776,110777,110778,29442],{},"基础奖励是 ",[36,110779,103348],{},[1174,110781,110782],{},"小车离中心越远，扣分越多。",[1174,110784,110785],{},"杆子角度越大，扣分越多。",[19,110787,110788],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110790,102198],{"id":102197},[29,110792,110794],{"className":31,"code":110793,"language":33,"meta":34,"style":34},"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",[36,110795,110796,110802,110812,110816,110820,110828,110833,110837,110841,110845,110850,110854,110859,110864,110869,110873,110878,110883,110888,110892,110896,110900,110904,110908,110913,110917,110921,110925,110929,110933,110943,110950,110954,110958,110972,110986,110999,111029,111033,111037,111049,111061,111069,111073,111086,111090,111094,111103,111107,111123,111133,111146,111159,111163,111186,111204,111208,111220,111224,111228,111238,111248,111252,111268,111309,111313,111333,111349,111353,111357,111369],{"__ignoreMap":34},[39,110797,110798,110800],{"class":41,"line":42},[39,110799,31447],{"class":49},[39,110801,102246],{"class":45},[39,110803,110804,110806,110808,110810],{"class":41,"line":74},[39,110805,31447],{"class":49},[39,110807,32435],{"class":45},[39,110809,32438],{"class":49},[39,110811,32441],{"class":45},[39,110813,110814],{"class":41,"line":99},[39,110815,3458],{"emptyLinePlaceholder":1145},[39,110817,110818],{"class":41,"line":106},[39,110819,3458],{"emptyLinePlaceholder":1145},[39,110821,110822,110824,110826],{"class":41,"line":112},[39,110823,102259],{"class":56},[39,110825,14620],{"class":49},[39,110827,102264],{"class":1319},[39,110829,110830],{"class":41,"line":118},[39,110831,110832],{"class":1319},"\u003Cmujoco model=\"cartpole\">\n",[39,110834,110835],{"class":41,"line":413},[39,110836,102274],{"class":1319},[39,110838,110839],{"class":41,"line":419},[39,110840,3458],{"emptyLinePlaceholder":1145},[39,110842,110843],{"class":41,"line":425},[39,110844,102283],{"class":1319},[39,110846,110847],{"class":41,"line":443},[39,110848,110849],{"class":1319},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[39,110851,110852],{"class":41,"line":449},[39,110853,3458],{"emptyLinePlaceholder":1145},[39,110855,110856],{"class":41,"line":455},[39,110857,110858],{"class":1319},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[39,110860,110861],{"class":41,"line":461},[39,110862,110863],{"class":1319},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[39,110865,110866],{"class":41,"line":475},[39,110867,110868],{"class":1319},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[39,110870,110871],{"class":41,"line":665},[39,110872,3458],{"emptyLinePlaceholder":1145},[39,110874,110875],{"class":41,"line":671},[39,110876,110877],{"class":1319},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[39,110879,110880],{"class":41,"line":684},[39,110881,110882],{"class":1319},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[39,110884,110885],{"class":41,"line":2732},[39,110886,110887],{"class":1319},"        \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",[39,110889,110890],{"class":41,"line":2737},[39,110891,107383],{"class":1319},[39,110893,110894],{"class":41,"line":2751},[39,110895,102312],{"class":1319},[39,110897,110898],{"class":41,"line":2756},[39,110899,102317],{"class":1319},[39,110901,110902],{"class":41,"line":2785},[39,110903,3458],{"emptyLinePlaceholder":1145},[39,110905,110906],{"class":41,"line":2790},[39,110907,107400],{"class":1319},[39,110909,110910],{"class":41,"line":2807},[39,110911,110912],{"class":1319},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[39,110914,110915],{"class":41,"line":2812},[39,110916,107410],{"class":1319},[39,110918,110919],{"class":41,"line":2817},[39,110920,102322],{"class":1319},[39,110922,110923],{"class":41,"line":2822},[39,110924,96747],{"class":1319},[39,110926,110927],{"class":41,"line":2836},[39,110928,3458],{"emptyLinePlaceholder":1145},[39,110930,110931],{"class":41,"line":2841},[39,110932,3458],{"emptyLinePlaceholder":1145},[39,110934,110935,110937,110940],{"class":41,"line":3635},[39,110936,33002],{"class":49},[39,110938,110939],{"class":3021}," get_observation",[39,110941,110942],{"class":45},"(data: mujoco.MjData) -> np.ndarray:\n",[39,110944,110945,110947],{"class":41,"line":3649},[39,110946,5148],{"class":49},[39,110948,110949],{"class":45}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[39,110951,110952],{"class":41,"line":3657},[39,110953,3458],{"emptyLinePlaceholder":1145},[39,110955,110956],{"class":41,"line":3662},[39,110957,3458],{"emptyLinePlaceholder":1145},[39,110959,110960,110962,110965,110968,110970],{"class":41,"line":3668},[39,110961,33002],{"class":49},[39,110963,110964],{"class":3021}," compute_reward",[39,110966,110967],{"class":45},"(obs: np.ndarray) -> ",[39,110969,1259],{"class":56},[39,110971,4797],{"class":45},[39,110973,110974,110977,110979,110982,110984],{"class":41,"line":3674},[39,110975,110976],{"class":45},"    cart_x ",[39,110978,50],{"class":49},[39,110980,110981],{"class":45}," obs[",[39,110983,260],{"class":56},[39,110985,34301],{"class":45},[39,110987,110988,110991,110993,110995,110997],{"class":41,"line":3679},[39,110989,110990],{"class":45},"    pole_angle ",[39,110992,50],{"class":49},[39,110994,110981],{"class":45},[39,110996,57],{"class":56},[39,110998,34301],{"class":45},[39,111000,111001,111003,111005,111007,111009,111011,111013,111015,111017,111019,111021,111023,111025,111027],{"class":41,"line":9004},[39,111002,5148],{"class":49},[39,111004,110742],{"class":56},[39,111006,1221],{"class":45},[39,111008,103348],{"class":56},[39,111010,53325],{"class":49},[39,111012,110751],{"class":56},[39,111014,7574],{"class":49},[39,111016,110756],{"class":45},[39,111018,1657],{"class":49},[39,111020,110756],{"class":45},[39,111022,1732],{"class":49},[39,111024,110765],{"class":45},[39,111026,1657],{"class":49},[39,111028,110770],{"class":45},[39,111030,111031],{"class":41,"line":9028},[39,111032,3458],{"emptyLinePlaceholder":1145},[39,111034,111035],{"class":41,"line":9033},[39,111036,3458],{"emptyLinePlaceholder":1145},[39,111038,111039,111041,111043,111045,111047],{"class":41,"line":9039},[39,111040,33002],{"class":49},[39,111042,3031],{"class":3021},[39,111044,102343],{"class":45},[39,111046,96735],{"class":56},[39,111048,4797],{"class":45},[39,111050,111051,111053,111055,111057,111059],{"class":41,"line":9066},[39,111052,102352],{"class":45},[39,111054,50],{"class":49},[39,111056,102357],{"class":45},[39,111058,102259],{"class":56},[39,111060,209],{"class":45},[39,111062,111063,111065,111067],{"class":41,"line":9071},[39,111064,102366],{"class":45},[39,111066,50],{"class":49},[39,111068,102371],{"class":45},[39,111070,111071],{"class":41,"line":9077},[39,111072,3458],{"emptyLinePlaceholder":1145},[39,111074,111075,111077,111079,111081,111083],{"class":41,"line":9089},[39,111076,106014],{"class":45},[39,111078,57],{"class":56},[39,111080,5501],{"class":45},[39,111082,50],{"class":49},[39,111084,111085],{"class":56}," 0.1\n",[39,111087,111088],{"class":41,"line":9101},[39,111089,106027],{"class":45},[39,111091,111092],{"class":41,"line":9113},[39,111093,3458],{"emptyLinePlaceholder":1145},[39,111095,111096,111099,111101],{"class":41,"line":10772},[39,111097,111098],{"class":45},"    total_reward ",[39,111100,50],{"class":49},[39,111102,105706],{"class":56},[39,111104,111105],{"class":41,"line":10797},[39,111106,3458],{"emptyLinePlaceholder":1145},[39,111108,111109,111111,111113,111115,111117,111119,111121],{"class":41,"line":10820},[39,111110,4259],{"class":49},[39,111112,32671],{"class":45},[39,111114,27100],{"class":49},[39,111116,33498],{"class":56},[39,111118,1221],{"class":45},[39,111120,7466],{"class":56},[39,111122,31841],{"class":45},[39,111124,111125,111128,111130],{"class":41,"line":10844},[39,111126,111127],{"class":45},"        obs ",[39,111129,50],{"class":49},[39,111131,111132],{"class":45}," get_observation(data)\n",[39,111134,111135,111138,111140,111142,111144],{"class":41,"line":10849},[39,111136,111137],{"class":45},"        pole_angle ",[39,111139,50],{"class":49},[39,111141,110981],{"class":45},[39,111143,57],{"class":56},[39,111145,34301],{"class":45},[39,111147,111148,111151,111153,111155,111157],{"class":41,"line":10854},[39,111149,111150],{"class":45},"        pole_angular_velocity ",[39,111152,50],{"class":49},[39,111154,110981],{"class":45},[39,111156,68],{"class":56},[39,111158,34301],{"class":45},[39,111160,111161],{"class":41,"line":10859},[39,111162,3458],{"emptyLinePlaceholder":1145},[39,111164,111165,111168,111170,111173,111175,111177,111179,111181,111183],{"class":41,"line":10868},[39,111166,111167],{"class":45},"        action ",[39,111169,50],{"class":49},[39,111171,111172],{"class":56}," 2.0",[39,111174,7574],{"class":49},[39,111176,110765],{"class":45},[39,111178,1682],{"class":49},[39,111180,62921],{"class":56},[39,111182,7574],{"class":49},[39,111184,111185],{"class":45}," pole_angular_velocity\n",[39,111187,111188,111190,111192,111194,111196,111198,111200,111202],{"class":41,"line":10873},[39,111189,111167],{"class":45},[39,111191,50],{"class":49},[39,111193,108392],{"class":45},[39,111195,1732],{"class":49},[39,111197,103348],{"class":56},[39,111199,13491],{"class":45},[39,111201,103348],{"class":56},[39,111203,209],{"class":45},[39,111205,111206],{"class":41,"line":10879},[39,111207,3458],{"emptyLinePlaceholder":1145},[39,111209,111210,111212,111214,111216,111218],{"class":41,"line":10900},[39,111211,107562],{"class":45},[39,111213,260],{"class":56},[39,111215,5501],{"class":45},[39,111217,50],{"class":49},[39,111219,108415],{"class":45},[39,111221,111222],{"class":41,"line":10906},[39,111223,102461],{"class":45},[39,111225,111226],{"class":41,"line":10920},[39,111227,3458],{"emptyLinePlaceholder":1145},[39,111229,111230,111233,111235],{"class":41,"line":10926},[39,111231,111232],{"class":45},"        reward ",[39,111234,50],{"class":49},[39,111236,111237],{"class":45}," compute_reward(get_observation(data))\n",[39,111239,111240,111243,111245],{"class":41,"line":10953},[39,111241,111242],{"class":45},"        total_reward ",[39,111244,10533],{"class":49},[39,111246,111247],{"class":45}," reward\n",[39,111249,111250],{"class":41,"line":10962},[39,111251,3458],{"emptyLinePlaceholder":1145},[39,111253,111254,111256,111258,111260,111262,111264,111266],{"class":41,"line":10968},[39,111255,3555],{"class":49},[39,111257,32671],{"class":45},[39,111259,1534],{"class":49},[39,111261,6810],{"class":56},[39,111263,102504],{"class":49},[39,111265,5151],{"class":56},[39,111267,4797],{"class":45},[39,111269,111270,111272,111274,111277,111280,111283,111286,111288,111291,111294,111296,111298,111300,111302,111305,111307],{"class":41,"line":10976},[39,111271,35705],{"class":56},[39,111273,1221],{"class":45},[39,111275,111276],{"class":1319},"\"step:\"",[39,111278,111279],{"class":45},", step, ",[39,111281,111282],{"class":1319},"\"obs:\"",[39,111284,111285],{"class":45},", np.round(obs, ",[39,111287,68],{"class":56},[39,111289,111290],{"class":45},"), ",[39,111292,111293],{"class":1319},"\"action:\"",[39,111295,13491],{"class":45},[39,111297,33073],{"class":56},[39,111299,1221],{"class":45},[39,111301,1259],{"class":56},[39,111303,111304],{"class":45},"(action), ",[39,111306,68],{"class":56},[39,111308,31552],{"class":45},[39,111310,111311],{"class":41,"line":10981},[39,111312,3458],{"emptyLinePlaceholder":1145},[39,111314,111315,111317,111319,111322,111324,111326,111329,111331],{"class":41,"line":17660},[39,111316,32354],{"class":56},[39,111318,1221],{"class":45},[39,111320,111321],{"class":1319},"\"total_reward:\"",[39,111323,13491],{"class":45},[39,111325,33073],{"class":56},[39,111327,111328],{"class":45},"(total_reward, ",[39,111330,68],{"class":56},[39,111332,31552],{"class":45},[39,111334,111335,111337,111339,111342,111345,111347],{"class":41,"line":17666},[39,111336,32354],{"class":56},[39,111338,1221],{"class":45},[39,111340,111341],{"class":1319},"\"final obs:\"",[39,111343,111344],{"class":45},", np.round(get_observation(data), ",[39,111346,68],{"class":56},[39,111348,31552],{"class":45},[39,111350,111351],{"class":41,"line":17689},[39,111352,3458],{"emptyLinePlaceholder":1145},[39,111354,111355],{"class":41,"line":17695},[39,111356,3458],{"emptyLinePlaceholder":1145},[39,111358,111359,111361,111363,111365,111367],{"class":41,"line":17718},[39,111360,2596],{"class":49},[39,111362,32275],{"class":56},[39,111364,102504],{"class":49},[39,111366,102507],{"class":1319},[39,111368,4797],{"class":45},[39,111370,111371],{"class":41,"line":17732},[39,111372,102514],{"class":45},[19,111374,104515],{},[29,111376,111378],{"className":24878,"code":111377,"language":24880,"meta":34,"style":34},"touch ch6_cartpole.py\n",[36,111379,111380],{"__ignoreMap":34},[39,111381,111382,111384],{"class":41,"line":42},[39,111383,102228],{"class":3021},[39,111385,111386],{"class":1319}," ch6_cartpole.py\n",[19,111388,111389],{},"运行：",[29,111391,111393],{"className":24878,"code":111392,"language":24880,"meta":34,"style":34},"python ch6_cartpole.py\n",[36,111394,111395],{"__ignoreMap":34},[39,111396,111397,111399],{"class":41,"line":42},[39,111398,33],{"class":3021},[39,111400,111386],{"class":1319},[1188,111402,102517],{"id":102517},[19,111404,111405],{},"构造观测：",[29,111407,111409],{"className":31,"code":111408,"language":33,"meta":34,"style":34},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[36,111410,111411,111419],{"__ignoreMap":34},[39,111412,111413,111415,111417],{"class":41,"line":42},[39,111414,33002],{"class":49},[39,111416,110939],{"class":3021},[39,111418,110942],{"class":45},[39,111420,111421,111423],{"class":41,"line":74},[39,111422,5148],{"class":49},[39,111424,110949],{"class":45},[19,111426,111427,111430,111431,111433,111434,111436],{},[36,111428,111429],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[36,111432,104975],{}," 2 维，",[36,111435,105305],{}," 2 维，所以 obs 是 4 维。",[19,111438,111439],{},"设置初始角度：",[29,111441,111443],{"className":31,"code":111442,"language":33,"meta":34,"style":34},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[36,111444,111445,111457],{"__ignoreMap":34},[39,111446,111447,111449,111451,111453,111455],{"class":41,"line":42},[39,111448,105644],{"class":45},[39,111450,57],{"class":56},[39,111452,5501],{"class":45},[39,111454,50],{"class":49},[39,111456,111085],{"class":56},[39,111458,111459],{"class":41,"line":74},[39,111460,105488],{"class":45},[19,111462,111463],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111465,111466],{},"简单反馈控制：",[29,111468,111470],{"className":31,"code":111469,"language":33,"meta":34,"style":34},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[36,111471,111472,111492],{"__ignoreMap":34},[39,111473,111474,111476,111478,111480,111482,111484,111486,111488,111490],{"class":41,"line":42},[39,111475,108387],{"class":45},[39,111477,50],{"class":49},[39,111479,111172],{"class":56},[39,111481,7574],{"class":49},[39,111483,110765],{"class":45},[39,111485,1682],{"class":49},[39,111487,62921],{"class":56},[39,111489,7574],{"class":49},[39,111491,111185],{"class":45},[39,111493,111494,111496,111498,111500,111502,111504,111506,111508],{"class":41,"line":74},[39,111495,108387],{"class":45},[39,111497,50],{"class":49},[39,111499,108392],{"class":45},[39,111501,1732],{"class":49},[39,111503,103348],{"class":56},[39,111505,13491],{"class":45},[39,111507,103348],{"class":56},[39,111509,209],{"class":45},[19,111511,111512],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,111514,111515],{},"限制动作：",[29,111517,111519],{"className":31,"code":111518,"language":33,"meta":34,"style":34},"np.clip(action, -1.0, 1.0)\n",[36,111520,111521],{"__ignoreMap":34},[39,111522,111523,111526,111528,111530,111532,111534],{"class":41,"line":42},[39,111524,111525],{"class":45},"np.clip(action, ",[39,111527,1732],{"class":49},[39,111529,103348],{"class":56},[39,111531,13491],{"class":45},[39,111533,103348],{"class":56},[39,111535,209],{"class":45},[19,111537,111538,111539,111542],{},"因为 XML 里 ",[36,111540,111541],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[1188,111544,102653],{"id":102653},[29,111546,111547],{"className":31,"code":111408,"language":33,"meta":34,"style":34},[36,111548,111549,111557],{"__ignoreMap":34},[39,111550,111551,111553,111555],{"class":41,"line":42},[39,111552,33002],{"class":49},[39,111554,110939],{"class":3021},[39,111556,110942],{"class":45},[39,111558,111559,111561],{"class":41,"line":74},[39,111560,5148],{"class":49},[39,111562,110949],{"class":45},[19,111564,111565,111566,111569,111570,111573,111574,111577],{},"这段定义了一个函数，用来获取当前观测。",[36,111567,111568],{},"data.qpos.copy()"," 是位置数组副本，",[36,111571,111572],{},"data.qvel.copy()"," 是速度数组副本。",[36,111575,111576],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111579,111580],{},"在本章模型里：",[29,111582,111585],{"className":111583,"code":111584,"language":6244,"meta":34},[6242],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[36,111586,111584],{"__ignoreMap":34},[19,111588,111589],{},"所以返回的 obs 是：",[29,111591,111594],{"className":111592,"code":111593,"language":6244,"meta":34},[6242],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[36,111595,111593],{"__ignoreMap":34},[29,111597,111599],{"className":31,"code":111598,"language":33,"meta":34,"style":34},"def compute_reward(obs: np.ndarray) -> float:\n",[36,111600,111601],{"__ignoreMap":34},[39,111602,111603,111605,111607,111609,111611],{"class":41,"line":42},[39,111604,33002],{"class":49},[39,111606,110964],{"class":3021},[39,111608,110967],{"class":45},[39,111610,1259],{"class":56},[39,111612,4797],{"class":45},[19,111614,111615,111616,111619],{},"这行定义奖励函数。输入是观测 ",[36,111617,111618],{},"obs","，输出是一个浮点数奖励。",[29,111621,111623],{"className":31,"code":111622,"language":33,"meta":34,"style":34},"cart_x = obs[0]\npole_angle = obs[1]\n",[36,111624,111625,111638],{"__ignoreMap":34},[39,111626,111627,111630,111632,111634,111636],{"class":41,"line":42},[39,111628,111629],{"class":45},"cart_x ",[39,111631,50],{"class":49},[39,111633,110981],{"class":45},[39,111635,260],{"class":56},[39,111637,34301],{"class":45},[39,111639,111640,111643,111645,111647,111649],{"class":41,"line":74},[39,111641,111642],{"class":45},"pole_angle ",[39,111644,50],{"class":49},[39,111646,110981],{"class":45},[39,111648,57],{"class":56},[39,111650,34301],{"class":45},[19,111652,111653,111654,111657,111658,111661],{},"数组索引从 0 开始。",[36,111655,111656],{},"obs[0]"," 是第一个元素，也就是小车位置。",[36,111659,111660],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[29,111663,111664],{"className":31,"code":110733,"language":33,"meta":34,"style":34},[36,111665,111666],{"__ignoreMap":34},[39,111667,111668,111670,111672,111674,111676,111678,111680,111682,111684,111686,111688,111690,111692,111694],{"class":41,"line":42},[39,111669,18102],{"class":49},[39,111671,110742],{"class":56},[39,111673,1221],{"class":45},[39,111675,103348],{"class":56},[39,111677,53325],{"class":49},[39,111679,110751],{"class":56},[39,111681,7574],{"class":49},[39,111683,110756],{"class":45},[39,111685,1657],{"class":49},[39,111687,110756],{"class":45},[39,111689,1732],{"class":49},[39,111691,110765],{"class":45},[39,111693,1657],{"class":49},[39,111695,110770],{"class":45},[19,111697,111698,111699,111702,111703,111706],{},"这行计算奖励。",[36,111700,111701],{},"cart_x * cart_x"," 是小车位置的平方，",[36,111704,111705],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[29,111708,111710],{"className":31,"code":111709,"language":33,"meta":34,"style":34},"data.qpos[1] = 0.1\n",[36,111711,111712],{"__ignoreMap":34},[39,111713,111714,111716,111718,111720,111722],{"class":41,"line":42},[39,111715,105644],{"class":45},[39,111717,57],{"class":56},[39,111719,5501],{"class":45},[39,111721,50],{"class":49},[39,111723,111085],{"class":56},[19,111725,111726,111727,111729,111730,111732],{},"手动设置杆子的初始角度。因为 ",[36,111728,106401],{}," 是小车位置，",[36,111731,106404],{}," 是杆子角度，所以这里改的是杆子。",[29,111734,111735],{"className":31,"code":105488,"language":33,"meta":34,"style":34},[36,111736,111737],{"__ignoreMap":34},[39,111738,111739],{"class":41,"line":42},[39,111740,105488],{"class":45},[19,111742,106447,111743,111745],{},[36,111744,104975],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[29,111747,111749],{"className":31,"code":111748,"language":33,"meta":34,"style":34},"total_reward = 0.0\n",[36,111750,111751],{"__ignoreMap":34},[39,111752,111753,111756,111758],{"class":41,"line":42},[39,111754,111755],{"class":45},"total_reward ",[39,111757,50],{"class":49},[39,111759,105706],{"class":56},[19,111761,111762],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[29,111764,111766],{"className":31,"code":111765,"language":33,"meta":34,"style":34},"for step in range(1000):\n",[36,111767,111768],{"__ignoreMap":34},[39,111769,111770,111772,111774,111776,111778,111780,111782],{"class":41,"line":42},[39,111771,4083],{"class":49},[39,111773,32671],{"class":45},[39,111775,27100],{"class":49},[39,111777,33498],{"class":56},[39,111779,1221],{"class":45},[39,111781,7466],{"class":56},[39,111783,31841],{"class":45},[19,111785,111786,111787,111789],{},"循环 1000 步。",[36,111788,108079],{}," 是当前步数，从 0 到 999。",[29,111791,111793],{"className":31,"code":111792,"language":33,"meta":34,"style":34},"obs = get_observation(data)\n",[36,111794,111795],{"__ignoreMap":34},[39,111796,111797,111800,111802],{"class":41,"line":42},[39,111798,111799],{"class":45},"obs ",[39,111801,50],{"class":49},[39,111803,111132],{"class":45},[19,111805,111806,111807,29442],{},"读取当前状态，保存到 ",[36,111808,111618],{},[29,111810,111812],{"className":31,"code":111811,"language":33,"meta":34,"style":34},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[36,111813,111814,111826],{"__ignoreMap":34},[39,111815,111816,111818,111820,111822,111824],{"class":41,"line":42},[39,111817,111642],{"class":45},[39,111819,50],{"class":49},[39,111821,110981],{"class":45},[39,111823,57],{"class":56},[39,111825,34301],{"class":45},[39,111827,111828,111831,111833,111835,111837],{"class":41,"line":74},[39,111829,111830],{"class":45},"pole_angular_velocity ",[39,111832,50],{"class":49},[39,111834,110981],{"class":45},[39,111836,68],{"class":56},[39,111838,34301],{"class":45},[19,111840,111841,111842,111845,111846,29442],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[36,111843,111844],{},"obs[3]","？因为 obs 的顺序是 ",[36,111847,111848],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[29,111850,111852],{"className":31,"code":111851,"language":33,"meta":34,"style":34},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[36,111853,111854],{"__ignoreMap":34},[39,111855,111856,111858,111860,111862,111864,111866,111868,111870,111872],{"class":41,"line":42},[39,111857,108387],{"class":45},[39,111859,50],{"class":49},[39,111861,111172],{"class":56},[39,111863,7574],{"class":49},[39,111865,110765],{"class":45},[39,111867,1682],{"class":49},[39,111869,62921],{"class":56},[39,111871,7574],{"class":49},[39,111873,111185],{"class":45},[19,111875,111876,111877,101963,111879,111881],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[36,111878,106205],{},[36,111880,36384],{}," 是人为设置的系数，不是固定公式。",[29,111883,111885],{"className":31,"code":111884,"language":33,"meta":34,"style":34},"action = np.clip(action, -1.0, 1.0)\n",[36,111886,111887],{"__ignoreMap":34},[39,111888,111889,111891,111893,111895,111897,111899,111901,111903],{"class":41,"line":42},[39,111890,108387],{"class":45},[39,111892,50],{"class":49},[39,111894,108392],{"class":45},[39,111896,1732],{"class":49},[39,111898,103348],{"class":56},[39,111900,13491],{"class":45},[39,111902,103348],{"class":56},[39,111904,209],{"class":45},[19,111906,111907],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[29,111909,111910],{"className":31,"code":110718,"language":33,"meta":34,"style":34},[36,111911,111912],{"__ignoreMap":34},[39,111913,111914,111916,111918,111920,111922],{"class":41,"line":42},[39,111915,106816],{"class":45},[39,111917,260],{"class":56},[39,111919,5501],{"class":45},[39,111921,50],{"class":49},[39,111923,108415],{"class":45},[19,111925,111926],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[29,111928,111929],{"className":31,"code":105450,"language":33,"meta":34,"style":34},[36,111930,111931],{"__ignoreMap":34},[39,111932,111933],{"class":41,"line":42},[39,111934,105450],{"class":45},[19,111936,111937,111938,111940],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[36,111939,107071],{}," 计算小车和杆子的下一刻状态。",[29,111942,111944],{"className":31,"code":111943,"language":33,"meta":34,"style":34},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[36,111945,111946,111955],{"__ignoreMap":34},[39,111947,111948,111951,111953],{"class":41,"line":42},[39,111949,111950],{"class":45},"reward ",[39,111952,50],{"class":49},[39,111954,111237],{"class":45},[39,111956,111957,111959,111961],{"class":41,"line":74},[39,111958,111755],{"class":45},[39,111960,10533],{"class":49},[39,111962,111247],{"class":45},[19,111964,111965,111966,111968,111969,111972,111973,29442],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[36,111967,10533],{}," 是简写，",[36,111970,111971],{},"total_reward += reward"," 等价于 ",[36,111974,111975],{},"total_reward = total_reward + reward",[29,111977,111979],{"className":31,"code":111978,"language":33,"meta":34,"style":34},"if step % 100 == 0:\n",[36,111980,111981],{"__ignoreMap":34},[39,111982,111983,111985,111987,111989,111991,111993,111995],{"class":41,"line":42},[39,111984,2596],{"class":49},[39,111986,32671],{"class":45},[39,111988,1534],{"class":49},[39,111990,6810],{"class":56},[39,111992,102504],{"class":49},[39,111994,5151],{"class":56},[39,111996,4797],{"class":45},[19,111998,111999,112001,112002,112005],{},[36,112000,1534],{}," 是取余数。",[36,112003,112004],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[29,112007,112009],{"className":31,"code":112008,"language":33,"meta":34,"style":34},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[36,112010,112011],{"__ignoreMap":34},[39,112012,112013,112015,112017,112019,112021,112023,112025,112027,112029,112031,112033,112035,112037,112039,112041,112043],{"class":41,"line":42},[39,112014,31470],{"class":56},[39,112016,1221],{"class":45},[39,112018,111276],{"class":1319},[39,112020,111279],{"class":45},[39,112022,111282],{"class":1319},[39,112024,111285],{"class":45},[39,112026,68],{"class":56},[39,112028,111290],{"class":45},[39,112030,111293],{"class":1319},[39,112032,13491],{"class":45},[39,112034,33073],{"class":56},[39,112036,1221],{"class":45},[39,112038,1259],{"class":56},[39,112040,111304],{"class":45},[39,112042,68],{"class":56},[39,112044,31552],{"class":45},[19,112046,112047,112048,112051,112052,112055],{},"打印当前步数、观测和动作。",[36,112049,112050],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[36,112053,112054],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112057,103261],{"id":103260},[19,112059,112060],{},"观测向量:",[29,112062,112065],{"className":112063,"code":112064,"language":6244,"meta":34},[6242],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[36,112066,112064],{"__ignoreMap":34},[19,112068,112069],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112071,112072],{},"每隔 100 步会打印一次：",[29,112074,112077],{"className":112075,"code":112076,"language":6244,"meta":34},[6242],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[36,112078,112076],{"__ignoreMap":34},[19,112080,112081],{},"重点观察：",[1171,112083,112084,112090,112095],{},[1174,112085,112086,112089],{},[36,112087,112088],{},"pole_angle"," 是否越来越大。",[1174,112091,112092,112094],{},[36,112093,110671],{}," 是否跑得太远。",[1174,112096,112097,112098,83593,112100,29442],{},"action 是否经常被 clip 到 ",[36,112099,104860],{},[36,112101,57],{},[19,112103,112104],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112106,103293],{"id":103292},[1171,112108,112109,112115,112118,112124,112134,112140,112143],{},[1174,112110,112111,112112,29442],{},"把初始角度改为 ",[36,112113,112114],{},"data.qpos[1] = 0.3",[1174,112116,112117],{},"重新运行，观察控制是否变差。",[1174,112119,112120,112121,112123],{},"把 actuator ",[36,112122,108012],{}," 改小。",[1174,112125,112126,112127,112130,112131,29442],{},"打印 ",[36,112128,112129],{},"model.nq, model.nv, model.nu","，应为 ",[36,112132,112133],{},"2 2 1",[1174,112135,112136,112137,112139],{},"把 reward 里的 ",[36,112138,111705],{}," 系数改大，观察总奖励变化。",[1174,112141,112142],{},"把控制器改成反号，观察杆子是否更容易倒。",[1174,112144,112145],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112147,103398],{"id":103397},[1188,112149,112150],{"id":112150},"杆子方向和预期不一致",[19,112152,103341,112153,112155,112156,112158],{},[36,112154,107184],{}," 和 capsule 的 ",[36,112157,104121],{},"，必要时用 viewer 可视化确认。",[1188,112160,112161],{"id":112161},"控制器越控越倒",[19,112163,112164],{},"说明反馈符号可能反了，尝试:",[29,112166,112168],{"className":31,"code":112167,"language":33,"meta":34,"style":34},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[36,112169,112170],{"__ignoreMap":34},[39,112171,112172,112174,112176,112178,112180,112182,112184,112186,112188,112190],{"class":41,"line":42},[39,112173,108387],{"class":45},[39,112175,50],{"class":49},[39,112177,53325],{"class":49},[39,112179,106205],{"class":56},[39,112181,7574],{"class":49},[39,112183,110765],{"class":45},[39,112185,1732],{"class":49},[39,112187,62921],{"class":56},[39,112189,7574],{"class":49},[39,112191,111185],{"class":45},[1188,112193,112194],{"id":112194},"小车飞走",[19,112196,112197,112198,112200,112201,112204],{},"降低 ",[36,112199,108012],{}," 或缩小 ",[36,112202,112203],{},"action"," 的 clip 范围。",[1188,112206,112208,112210],{"id":112207},"obs3-为什么是杆子角速度",[36,112209,111844],{}," 为什么是杆子角速度",[19,112212,112213],{},"因为这个模型里：",[29,112215,112218],{"className":112216,"code":112217,"language":6244,"meta":34},[6242],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[36,112219,112217],{"__ignoreMap":34},[19,112221,110692],{},[29,112223,112226],{"className":112224,"code":112225,"language":6244,"meta":34},[6242],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[36,112227,112225],{"__ignoreMap":34},[1188,112229,112231],{"id":112230},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112233,112234],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112236,103552],{"id":103551},[19,112238,112239],{},"一个控制任务通常包含：",[1171,112241,112242,112245,112253,112258,112261],{},[1174,112243,112244],{},"模型：Cartpole 的 body、joint、actuator。",[1174,112246,112247,112248,1425,112250,112252],{},"观测：从 ",[36,112249,104975],{},[36,112251,105305],{}," 里取状态。",[1174,112254,112255,112256,29442],{},"动作：写入 ",[36,112257,102021],{},[1174,112259,112260],{},"奖励：根据任务目标打分。",[1174,112262,112263],{},"循环：obs -> action -> step -> reward。",[19,112265,112266],{},"这就是后面 Gymnasium 环境的基本骨架。",[1133,112268,105231],{},{"title":34,"searchDepth":74,"depth":74,"links":112270},[112271,112272,112273,112278,112282,112283,112284,112292],{"id":101591,"depth":74,"text":101592},{"id":101714,"depth":74,"text":101715},{"id":101989,"depth":74,"text":101990,"children":112274},[112275,112276,112277],{"id":110645,"depth":99,"text":110646},{"id":110710,"depth":99,"text":110711},{"id":110726,"depth":99,"text":110727},{"id":102197,"depth":74,"text":102198,"children":112279},[112280,112281],{"id":102517,"depth":99,"text":102517},{"id":102653,"depth":99,"text":102653},{"id":103260,"depth":74,"text":103261},{"id":103292,"depth":74,"text":103293},{"id":103397,"depth":74,"text":103398,"children":112285},[112286,112287,112288,112289,112291],{"id":112150,"depth":99,"text":112150},{"id":112161,"depth":99,"text":112161},{"id":112194,"depth":99,"text":112194},{"id":112207,"depth":99,"text":112290},"obs[3] 为什么是杆子角速度",{"id":112230,"depth":99,"text":112231},{"id":103551,"depth":74,"text":103552},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110381,"description":34},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112299,"title":112300,"body":112301,"description":34,"extension":1143,"meta":114315,"navigation":1145,"path":114316,"seo":114317,"stem":114318,"__hash__":114319},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112302,"toc":114291},[112303,112306,112308,112311,112313,112330,112333,112336,112342,112345,112347,112349,112373,112375,112389,112391,112432,112434,112452,112454,112457,112463,112466,112494,112498,112504,112529,112532,112563,112570,112573,112576,112582,112585,112591,112594,112600,112604,112607,112632,112635,112637,113397,113399,113411,113413,113424,113426,113429,113446,113449,113451,113462,113465,113467,113513,113516,113529,113532,113614,113617,113619,113635,113645,113658,113661,113700,113710,113721,113731,113744,113747,113776,113779,113789,113792,113798,113815,113826,113828,113834,113851,113862,113883,113886,113898,113901,113922,113925,113933,113941,113958,113961,114030,114037,114045,114048,114061,114068,114070,114073,114079,114082,114085,114091,114097,114099,114139,114141,114147,114156,114159,114161,114181,114184,114187,114193,114197,114199,114226,114229,114232,114259,114265,114268,114271,114273,114276,114279,114285,114288],[10,112304,112300],{"id":112305},"_7控制任务reacher-机械臂到达目标",[14,112307,101592],{"id":101591},[19,112309,112310],{},"本章搭建一个二维两关节 reacher 任务。",[19,112312,105276],{},[1171,112314,112315,112318,112321,112324,112327],{},[1174,112316,112317],{},"两个 hinge joint",[1174,112319,112320],{},"两个 motor actuator",[1174,112322,112323],{},"site 作为末端点和目标点",[1174,112325,112326],{},"根据末端和目标距离设计 reward",[1174,112328,112329],{},"构造机械臂任务的基本形式",[19,112331,112332],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,112334,112335],{},"Reacher 任务可以理解为：",[29,112337,112340],{"className":112338,"code":112339,"language":6244,"meta":34},[6242],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[36,112341,112339],{"__ignoreMap":34},[19,112343,112344],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112346,101715],{"id":101714},[19,112348,101718],{},[29,112350,112351],{"className":24878,"code":105333,"language":24880,"meta":34,"style":34},[36,112352,112353],{"__ignoreMap":34},[39,112354,112355,112357,112359,112361,112363,112365,112367,112369,112371],{"class":41,"line":42},[39,112356,25633],{"class":3021},[39,112358,27372],{"class":1319},[39,112360,24890],{"class":1319},[39,112362,27457],{"class":56},[39,112364,105348],{"class":1319},[39,112366,101743],{"class":1319},[39,112368,103446],{"class":1319},[39,112370,101759],{"class":1319},[39,112372,105357],{"class":1319},[19,112374,103764],{},[29,112376,112377],{"className":24878,"code":101864,"language":24880,"meta":34,"style":34},[36,112378,112379],{"__ignoreMap":34},[39,112380,112381,112383,112385,112387],{"class":41,"line":42},[39,112382,24887],{"class":3021},[39,112384,24890],{"class":1319},[39,112386,101875],{"class":1319},[39,112388,101878],{"class":1319},[19,112390,103781],{},[29,112392,112394],{"className":24878,"code":112393,"language":24880,"meta":34,"style":34},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[36,112395,112396,112413,112422],{"__ignoreMap":34},[39,112397,112398,112400,112402,112404,112407,112409,112411],{"class":41,"line":42},[39,112399,31387],{"class":3021},[39,112401,30233],{"class":1319},[39,112403,26172],{"class":56},[39,112405,112406],{"class":1319}," mujoco-reacher",[39,112408,101920],{"class":1319},[39,112410,101923],{"class":56},[39,112412,101926],{"class":56},[39,112414,112415,112417,112419],{"class":41,"line":74},[39,112416,31387],{"class":3021},[39,112418,101933],{"class":1319},[39,112420,112421],{"class":1319}," mujoco-reacher\n",[39,112423,112424,112426,112428,112430],{"class":41,"line":99},[39,112425,24887],{"class":3021},[39,112427,24890],{"class":1319},[39,112429,101875],{"class":1319},[39,112431,101878],{"class":1319},[19,112433,101949],{},[1171,112435,112436,112439,112442],{},[1174,112437,112438],{},"本章使用低维状态，不使用图像输入。",[1174,112440,112441],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[1174,112443,112444,112445,1425,112447,1425,112449,112451],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[36,112446,104975],{},[36,112448,105305],{},[36,112450,104625],{}," 的方法一致。",[14,112453,101990],{"id":101989},[19,112455,112456],{},"Reacher 任务核心:",[29,112458,112461],{"className":112459,"code":112460,"language":6244,"meta":34},[6242],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[36,112462,112460],{"__ignoreMap":34},[19,112464,112465],{},"读取 site 世界坐标:",[29,112467,112469],{"className":31,"code":112468,"language":33,"meta":34,"style":34},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[36,112470,112471,112484],{"__ignoreMap":34},[39,112472,112473,112475,112477,112479,112482],{"class":41,"line":42},[39,112474,104579],{"class":45},[39,112476,50],{"class":49},[39,112478,104350],{"class":45},[39,112480,112481],{"class":1319},"\"tip\"",[39,112483,209],{"class":45},[39,112485,112486,112489,112491],{"class":41,"line":74},[39,112487,112488],{"class":45},"tip_pos ",[39,112490,50],{"class":49},[39,112492,112493],{"class":45}," data.site_xpos[site_id]\n",[1188,112495,112497],{"id":112496},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112499,112500,112501,112503],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[36,112502,104975],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[29,112505,112507],{"className":31,"code":112506,"language":33,"meta":34,"style":34},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[36,112508,112509,112519],{"__ignoreMap":34},[39,112510,112511,112514,112516],{"class":41,"line":42},[39,112512,112513],{"class":45},"tip ",[39,112515,50],{"class":49},[39,112517,112518],{"class":45}," data.site_xpos[tip_site_id]\n",[39,112520,112521,112524,112526],{"class":41,"line":74},[39,112522,112523],{"class":45},"target ",[39,112525,50],{"class":49},[39,112527,112528],{"class":45}," data.site_xpos[target_site_id]\n",[19,112530,112531],{},"这样 reward 就很容易写：",[29,112533,112535],{"className":31,"code":112534,"language":33,"meta":34,"style":34},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[36,112536,112537,112552],{"__ignoreMap":34},[39,112538,112539,112542,112544,112547,112549],{"class":41,"line":42},[39,112540,112541],{"class":45},"dist ",[39,112543,50],{"class":49},[39,112545,112546],{"class":45}," np.linalg.norm(tip ",[39,112548,1732],{"class":49},[39,112550,112551],{"class":45}," target)\n",[39,112553,112554,112556,112558,112560],{"class":41,"line":74},[39,112555,111950],{"class":45},[39,112557,50],{"class":49},[39,112559,53325],{"class":49},[39,112561,112562],{"class":45},"dist\n",[19,112564,112565,112566,112569],{},"距离越小，",[36,112567,112568],{},"-dist"," 越接近 0，奖励越高。",[1188,112571,112572],{"id":112572},"两关节机械臂的状态",[19,112574,112575],{},"这个模型有两个 hinge joint：",[29,112577,112580],{"className":112578,"code":112579,"language":6244,"meta":34},[6242],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[36,112581,112579],{"__ignoreMap":34},[19,112583,112584],{},"再加上末端和目标位置：",[29,112586,112589],{"className":112587,"code":112588,"language":6244,"meta":34},[6242],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[36,112590,112588],{"__ignoreMap":34},[19,112592,112593],{},"总维度：",[29,112595,112598],{"className":112596,"code":112597,"language":6244,"meta":34},[6242],"2 + 2 + 3 + 3 = 10\n",[36,112599,112597],{"__ignoreMap":34},[1188,112601,112603],{"id":112602},"为什么-gravity-是-0","为什么 gravity 是 0",[19,112605,112606],{},"本章把重力设为：",[29,112608,112610],{"className":54121,"code":112609,"language":54123,"meta":34,"style":34},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[36,112611,112612],{"__ignoreMap":34},[39,112613,112614,112616,112618,112620,112622,112624,112626,112628,112630],{"class":41,"line":42},[39,112615,2108],{"class":45},[39,112617,70220],{"class":52354},[39,112619,102139],{"class":3021},[39,112621,50],{"class":45},[39,112623,102144],{"class":1319},[39,112625,102147],{"class":3021},[39,112627,50],{"class":45},[39,112629,104716],{"class":1319},[39,112631,102089],{"class":45},[19,112633,112634],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,112636,102198],{"id":102197},[29,112638,112640],{"className":31,"code":112639,"language":33,"meta":34,"style":34},"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",[36,112641,112642,112648,112658,112662,112666,112674,112679,112684,112688,112692,112697,112702,112706,112711,112716,112721,112725,112730,112735,112740,112745,112749,112753,112757,112761,112765,112770,112775,112779,112783,112787,112791,112795,112810,112819,112831,112854,112861,112865,112869,112879,112893,112907,112914,112918,112922,112936,112948,112960,112973,112988,113005,113009,113013,113025,113037,113045,113053,113057,113073,113078,113091,113104,113119,113123,113158,113190,113194,113198,113207,113211,113227,113237,113248,113264,113280,113296,113312,113316,113334,113354,113373,113377,113381,113393],{"__ignoreMap":34},[39,112643,112644,112646],{"class":41,"line":42},[39,112645,31447],{"class":49},[39,112647,102246],{"class":45},[39,112649,112650,112652,112654,112656],{"class":41,"line":74},[39,112651,31447],{"class":49},[39,112653,32435],{"class":45},[39,112655,32438],{"class":49},[39,112657,32441],{"class":45},[39,112659,112660],{"class":41,"line":99},[39,112661,3458],{"emptyLinePlaceholder":1145},[39,112663,112664],{"class":41,"line":106},[39,112665,3458],{"emptyLinePlaceholder":1145},[39,112667,112668,112670,112672],{"class":41,"line":112},[39,112669,102259],{"class":56},[39,112671,14620],{"class":49},[39,112673,102264],{"class":1319},[39,112675,112676],{"class":41,"line":118},[39,112677,112678],{"class":1319},"\u003Cmujoco model=\"two_link_reacher\">\n",[39,112680,112681],{"class":41,"line":413},[39,112682,112683],{"class":1319},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[39,112685,112686],{"class":41,"line":419},[39,112687,3458],{"emptyLinePlaceholder":1145},[39,112689,112690],{"class":41,"line":425},[39,112691,102283],{"class":1319},[39,112693,112694],{"class":41,"line":443},[39,112695,112696],{"class":1319},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[39,112698,112699],{"class":41,"line":449},[39,112700,112701],{"class":1319},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[39,112703,112704],{"class":41,"line":455},[39,112705,3458],{"emptyLinePlaceholder":1145},[39,112707,112708],{"class":41,"line":461},[39,112709,112710],{"class":1319},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[39,112712,112713],{"class":41,"line":475},[39,112714,112715],{"class":1319},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[39,112717,112718],{"class":41,"line":665},[39,112719,112720],{"class":1319},"      \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",[39,112722,112723],{"class":41,"line":671},[39,112724,3458],{"emptyLinePlaceholder":1145},[39,112726,112727],{"class":41,"line":684},[39,112728,112729],{"class":1319},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[39,112731,112732],{"class":41,"line":2732},[39,112733,112734],{"class":1319},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[39,112736,112737],{"class":41,"line":2737},[39,112738,112739],{"class":1319},"        \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",[39,112741,112742],{"class":41,"line":2751},[39,112743,112744],{"class":1319},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[39,112746,112747],{"class":41,"line":2756},[39,112748,107383],{"class":1319},[39,112750,112751],{"class":41,"line":2785},[39,112752,102312],{"class":1319},[39,112754,112755],{"class":41,"line":2790},[39,112756,102317],{"class":1319},[39,112758,112759],{"class":41,"line":2807},[39,112760,3458],{"emptyLinePlaceholder":1145},[39,112762,112763],{"class":41,"line":2812},[39,112764,107400],{"class":1319},[39,112766,112767],{"class":41,"line":2817},[39,112768,112769],{"class":1319},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[39,112771,112772],{"class":41,"line":2822},[39,112773,112774],{"class":1319},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[39,112776,112777],{"class":41,"line":2836},[39,112778,107410],{"class":1319},[39,112780,112781],{"class":41,"line":2841},[39,112782,102322],{"class":1319},[39,112784,112785],{"class":41,"line":3635},[39,112786,96747],{"class":1319},[39,112788,112789],{"class":41,"line":3649},[39,112790,3458],{"emptyLinePlaceholder":1145},[39,112792,112793],{"class":41,"line":3657},[39,112794,3458],{"emptyLinePlaceholder":1145},[39,112796,112797,112799,112802,112805,112807],{"class":41,"line":3662},[39,112798,33002],{"class":49},[39,112800,112801],{"class":3021}," site_position",[39,112803,112804],{"class":45},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[39,112806,2368],{"class":56},[39,112808,112809],{"class":45},") -> np.ndarray:\n",[39,112811,112812,112814,112816],{"class":41,"line":3668},[39,112813,104345],{"class":45},[39,112815,50],{"class":49},[39,112817,112818],{"class":45}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[39,112820,112821,112823,112825,112827,112829],{"class":41,"line":3674},[39,112822,4159],{"class":49},[39,112824,104394],{"class":45},[39,112826,2108],{"class":49},[39,112828,5151],{"class":56},[39,112830,4797],{"class":45},[39,112832,112833,112835,112837,112839,112841,112844,112846,112848,112850,112852],{"class":41,"line":3679},[39,112834,104377],{"class":49},[39,112836,104380],{"class":56},[39,112838,1221],{"class":45},[39,112840,1270],{"class":49},[39,112842,112843],{"class":1319},"\"site not found: ",[39,112845,2094],{"class":56},[39,112847,80864],{"class":45},[39,112849,2144],{"class":56},[39,112851,1462],{"class":1319},[39,112853,209],{"class":45},[39,112855,112856,112858],{"class":41,"line":9004},[39,112857,5148],{"class":49},[39,112859,112860],{"class":45}," data.site_xpos[site_id].copy()\n",[39,112862,112863],{"class":41,"line":9028},[39,112864,3458],{"emptyLinePlaceholder":1145},[39,112866,112867],{"class":41,"line":9033},[39,112868,3458],{"emptyLinePlaceholder":1145},[39,112870,112871,112873,112876],{"class":41,"line":9039},[39,112872,33002],{"class":49},[39,112874,112875],{"class":3021}," get_obs",[39,112877,112878],{"class":45},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[39,112880,112881,112884,112886,112889,112891],{"class":41,"line":9066},[39,112882,112883],{"class":45},"    tip ",[39,112885,50],{"class":49},[39,112887,112888],{"class":45}," site_position(model, data, ",[39,112890,112481],{"class":1319},[39,112892,209],{"class":45},[39,112894,112895,112898,112900,112902,112905],{"class":41,"line":9071},[39,112896,112897],{"class":45},"    target ",[39,112899,50],{"class":49},[39,112901,112888],{"class":45},[39,112903,112904],{"class":1319},"\"target\"",[39,112906,209],{"class":45},[39,112908,112909,112911],{"class":41,"line":9077},[39,112910,5148],{"class":49},[39,112912,112913],{"class":45}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[39,112915,112916],{"class":41,"line":9089},[39,112917,3458],{"emptyLinePlaceholder":1145},[39,112919,112920],{"class":41,"line":9101},[39,112921,3458],{"emptyLinePlaceholder":1145},[39,112923,112924,112926,112929,112932,112934],{"class":41,"line":9113},[39,112925,33002],{"class":49},[39,112927,112928],{"class":3021}," reward",[39,112930,112931],{"class":45},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[39,112933,1259],{"class":56},[39,112935,4797],{"class":45},[39,112937,112938,112940,112942,112944,112946],{"class":41,"line":10772},[39,112939,112883],{"class":45},[39,112941,50],{"class":49},[39,112943,112888],{"class":45},[39,112945,112481],{"class":1319},[39,112947,209],{"class":45},[39,112949,112950,112952,112954,112956,112958],{"class":41,"line":10797},[39,112951,112897],{"class":45},[39,112953,50],{"class":49},[39,112955,112888],{"class":45},[39,112957,112904],{"class":1319},[39,112959,209],{"class":45},[39,112961,112962,112965,112967,112969,112971],{"class":41,"line":10820},[39,112963,112964],{"class":45},"    dist ",[39,112966,50],{"class":49},[39,112968,112546],{"class":45},[39,112970,1732],{"class":49},[39,112972,112551],{"class":45},[39,112974,112975,112978,112980,112983,112985],{"class":41,"line":10844},[39,112976,112977],{"class":45},"    control_cost ",[39,112979,50],{"class":49},[39,112981,112982],{"class":56}," 0.01",[39,112984,7574],{"class":49},[39,112986,112987],{"class":45}," np.sum(np.square(data.ctrl))\n",[39,112989,112990,112992,112994,112996,112998,113000,113002],{"class":41,"line":10849},[39,112991,5148],{"class":49},[39,112993,110742],{"class":56},[39,112995,1221],{"class":45},[39,112997,1732],{"class":49},[39,112999,112541],{"class":45},[39,113001,1732],{"class":49},[39,113003,113004],{"class":45}," control_cost)\n",[39,113006,113007],{"class":41,"line":10854},[39,113008,3458],{"emptyLinePlaceholder":1145},[39,113010,113011],{"class":41,"line":10859},[39,113012,3458],{"emptyLinePlaceholder":1145},[39,113014,113015,113017,113019,113021,113023],{"class":41,"line":10868},[39,113016,33002],{"class":49},[39,113018,3031],{"class":3021},[39,113020,102343],{"class":45},[39,113022,96735],{"class":56},[39,113024,4797],{"class":45},[39,113026,113027,113029,113031,113033,113035],{"class":41,"line":10873},[39,113028,102352],{"class":45},[39,113030,50],{"class":49},[39,113032,102357],{"class":45},[39,113034,102259],{"class":56},[39,113036,209],{"class":45},[39,113038,113039,113041,113043],{"class":41,"line":10879},[39,113040,102366],{"class":45},[39,113042,50],{"class":49},[39,113044,102371],{"class":45},[39,113046,113047,113049,113051],{"class":41,"line":10900},[39,113048,111098],{"class":45},[39,113050,50],{"class":49},[39,113052,105706],{"class":56},[39,113054,113055],{"class":41,"line":10906},[39,113056,3458],{"emptyLinePlaceholder":1145},[39,113058,113059,113061,113063,113065,113067,113069,113071],{"class":41,"line":10920},[39,113060,4259],{"class":49},[39,113062,32671],{"class":45},[39,113064,27100],{"class":49},[39,113066,33498],{"class":56},[39,113068,1221],{"class":45},[39,113070,66128],{"class":56},[39,113072,31841],{"class":45},[39,113074,113075],{"class":41,"line":10926},[39,113076,113077],{"class":45},"        mujoco.mj_forward(model, data)\n",[39,113079,113080,113083,113085,113087,113089],{"class":41,"line":10953},[39,113081,113082],{"class":45},"        tip ",[39,113084,50],{"class":49},[39,113086,112888],{"class":45},[39,113088,112481],{"class":1319},[39,113090,209],{"class":45},[39,113092,113093,113096,113098,113100,113102],{"class":41,"line":10962},[39,113094,113095],{"class":45},"        target ",[39,113097,50],{"class":49},[39,113099,112888],{"class":45},[39,113101,112904],{"class":1319},[39,113103,209],{"class":45},[39,113105,113106,113109,113111,113114,113116],{"class":41,"line":10968},[39,113107,113108],{"class":45},"        error ",[39,113110,50],{"class":49},[39,113112,113113],{"class":45}," target ",[39,113115,1732],{"class":49},[39,113117,113118],{"class":45}," tip\n",[39,113120,113121],{"class":41,"line":10976},[39,113122,3458],{"emptyLinePlaceholder":1145},[39,113124,113125,113127,113129,113131,113133,113136,113138,113140,113143,113145,113148,113150,113152,113154,113156],{"class":41,"line":10981},[39,113126,107562],{"class":45},[39,113128,260],{"class":56},[39,113130,5501],{"class":45},[39,113132,50],{"class":49},[39,113134,113135],{"class":45}," np.clip(",[39,113137,106205],{"class":56},[39,113139,7574],{"class":49},[39,113141,113142],{"class":45}," error[",[39,113144,63],{"class":56},[39,113146,113147],{"class":45},"], ",[39,113149,1732],{"class":49},[39,113151,103348],{"class":56},[39,113153,13491],{"class":45},[39,113155,103348],{"class":56},[39,113157,209],{"class":45},[39,113159,113160,113162,113164,113166,113168,113170,113172,113174,113176,113178,113180,113182,113184,113186,113188],{"class":41,"line":17660},[39,113161,107562],{"class":45},[39,113163,57],{"class":56},[39,113165,5501],{"class":45},[39,113167,50],{"class":49},[39,113169,113135],{"class":45},[39,113171,106205],{"class":56},[39,113173,7574],{"class":49},[39,113175,113142],{"class":45},[39,113177,260],{"class":56},[39,113179,113147],{"class":45},[39,113181,1732],{"class":49},[39,113183,103348],{"class":56},[39,113185,13491],{"class":45},[39,113187,103348],{"class":56},[39,113189,209],{"class":45},[39,113191,113192],{"class":41,"line":17666},[39,113193,3458],{"emptyLinePlaceholder":1145},[39,113195,113196],{"class":41,"line":17689},[39,113197,102461],{"class":45},[39,113199,113200,113202,113204],{"class":41,"line":17695},[39,113201,111242],{"class":45},[39,113203,10533],{"class":49},[39,113205,113206],{"class":45}," reward(model, data)\n",[39,113208,113209],{"class":41,"line":17718},[39,113210,3458],{"emptyLinePlaceholder":1145},[39,113212,113213,113215,113217,113219,113221,113223,113225],{"class":41,"line":17732},[39,113214,3555],{"class":49},[39,113216,32671],{"class":45},[39,113218,1534],{"class":49},[39,113220,6810],{"class":56},[39,113222,102504],{"class":49},[39,113224,5151],{"class":56},[39,113226,4797],{"class":45},[39,113228,113229,113232,113234],{"class":41,"line":17752},[39,113230,113231],{"class":45},"            obs ",[39,113233,50],{"class":49},[39,113235,113236],{"class":45}," get_obs(model, data)\n",[39,113238,113239,113241,113243,113245],{"class":41,"line":17758},[39,113240,35705],{"class":56},[39,113242,1221],{"class":45},[39,113244,111276],{"class":1319},[39,113246,113247],{"class":45},", step)\n",[39,113249,113250,113252,113254,113257,113260,113262],{"class":41,"line":17769},[39,113251,35705],{"class":56},[39,113253,1221],{"class":45},[39,113255,113256],{"class":1319},"\"  tip:\"",[39,113258,113259],{"class":45},", np.round(tip, ",[39,113261,68],{"class":56},[39,113263,31552],{"class":45},[39,113265,113266,113268,113270,113273,113276,113278],{"class":41,"line":17792},[39,113267,35705],{"class":56},[39,113269,1221],{"class":45},[39,113271,113272],{"class":1319},"\"  target:\"",[39,113274,113275],{"class":45},", np.round(target, ",[39,113277,68],{"class":56},[39,113279,31552],{"class":45},[39,113281,113282,113284,113286,113289,113292,113294],{"class":41,"line":17814},[39,113283,35705],{"class":56},[39,113285,1221],{"class":45},[39,113287,113288],{"class":1319},"\"  ctrl:\"",[39,113290,113291],{"class":45},", np.round(data.ctrl.copy(), ",[39,113293,68],{"class":56},[39,113295,31552],{"class":45},[39,113297,113298,113300,113302,113305,113308,113310],{"class":41,"line":17819},[39,113299,35705],{"class":56},[39,113301,1221],{"class":45},[39,113303,113304],{"class":1319},"\"  obs_dim:\"",[39,113306,113307],{"class":45},", obs.shape[",[39,113309,260],{"class":56},[39,113311,71],{"class":45},[39,113313,113314],{"class":41,"line":17825},[39,113315,3458],{"emptyLinePlaceholder":1145},[39,113317,113318,113320,113322,113324,113326,113328,113330,113332],{"class":41,"line":17839},[39,113319,32354],{"class":56},[39,113321,1221],{"class":45},[39,113323,111321],{"class":1319},[39,113325,13491],{"class":45},[39,113327,33073],{"class":56},[39,113329,111328],{"class":45},[39,113331,68],{"class":56},[39,113333,31552],{"class":45},[39,113335,113336,113338,113340,113343,113346,113348,113350,113352],{"class":41,"line":17852},[39,113337,32354],{"class":56},[39,113339,1221],{"class":45},[39,113341,113342],{"class":1319},"\"final tip:\"",[39,113344,113345],{"class":45},", np.round(site_position(model, data, ",[39,113347,112481],{"class":1319},[39,113349,111290],{"class":45},[39,113351,68],{"class":56},[39,113353,31552],{"class":45},[39,113355,113356,113358,113360,113363,113365,113367,113369,113371],{"class":41,"line":17857},[39,113357,32354],{"class":56},[39,113359,1221],{"class":45},[39,113361,113362],{"class":1319},"\"target:\"",[39,113364,113345],{"class":45},[39,113366,112904],{"class":1319},[39,113368,111290],{"class":45},[39,113370,68],{"class":56},[39,113372,31552],{"class":45},[39,113374,113375],{"class":41,"line":17871},[39,113376,3458],{"emptyLinePlaceholder":1145},[39,113378,113379],{"class":41,"line":17876},[39,113380,3458],{"emptyLinePlaceholder":1145},[39,113382,113383,113385,113387,113389,113391],{"class":41,"line":17882},[39,113384,2596],{"class":49},[39,113386,32275],{"class":56},[39,113388,102504],{"class":49},[39,113390,102507],{"class":1319},[39,113392,4797],{"class":45},[39,113394,113395],{"class":41,"line":17887},[39,113396,102514],{"class":45},[19,113398,104515],{},[29,113400,113402],{"className":24878,"code":113401,"language":24880,"meta":34,"style":34},"touch ch7_reacher.py\n",[36,113403,113404],{"__ignoreMap":34},[39,113405,113406,113408],{"class":41,"line":42},[39,113407,102228],{"class":3021},[39,113409,113410],{"class":1319}," ch7_reacher.py\n",[19,113412,111389],{},[29,113414,113416],{"className":24878,"code":113415,"language":24880,"meta":34,"style":34},"python ch7_reacher.py\n",[36,113417,113418],{"__ignoreMap":34},[39,113419,113420,113422],{"class":41,"line":42},[39,113421,33],{"class":3021},[39,113423,113410],{"class":1319},[1188,113425,102517],{"id":102517},[19,113427,113428],{},"读取 site 坐标：",[29,113430,113432],{"className":31,"code":113431,"language":33,"meta":34,"style":34},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[36,113433,113434],{"__ignoreMap":34},[39,113435,113436,113438,113440,113442,113444],{"class":41,"line":42},[39,113437,33002],{"class":49},[39,113439,112801],{"class":3021},[39,113441,112804],{"class":45},[39,113443,2368],{"class":56},[39,113445,112809],{"class":45},[19,113447,113448],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113450,111405],{},[29,113452,113454],{"className":31,"code":113453,"language":33,"meta":34,"style":34},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[36,113455,113456],{"__ignoreMap":34},[39,113457,113458,113460],{"class":41,"line":42},[39,113459,18102],{"class":49},[39,113461,112913],{"class":45},[19,113463,113464],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113466,110730],{},[29,113468,113470],{"className":31,"code":113469,"language":33,"meta":34,"style":34},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[36,113471,113472,113484,113497],{"__ignoreMap":34},[39,113473,113474,113476,113478,113480,113482],{"class":41,"line":42},[39,113475,112541],{"class":45},[39,113477,50],{"class":49},[39,113479,112546],{"class":45},[39,113481,1732],{"class":49},[39,113483,112551],{"class":45},[39,113485,113486,113489,113491,113493,113495],{"class":41,"line":74},[39,113487,113488],{"class":45},"control_cost ",[39,113490,50],{"class":49},[39,113492,112982],{"class":56},[39,113494,7574],{"class":49},[39,113496,112987],{"class":45},[39,113498,113499,113501,113503,113505,113507,113509,113511],{"class":41,"line":99},[39,113500,18102],{"class":49},[39,113502,110742],{"class":56},[39,113504,1221],{"class":45},[39,113506,1732],{"class":49},[39,113508,112541],{"class":45},[39,113510,1732],{"class":49},[39,113512,113004],{"class":45},[19,113514,113515],{},"奖励由两部分组成：",[1171,113517,113518,113523],{},[1174,113519,113520,113522],{},[36,113521,112568],{},"：末端离目标越远，奖励越低。",[1174,113524,113525,113528],{},[36,113526,113527],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,113530,113531],{},"简单控制器：",[29,113533,113535],{"className":31,"code":113534,"language":33,"meta":34,"style":34},"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",[36,113536,113537,113550,113582],{"__ignoreMap":34},[39,113538,113539,113542,113544,113546,113548],{"class":41,"line":42},[39,113540,113541],{"class":45},"error ",[39,113543,50],{"class":49},[39,113545,113113],{"class":45},[39,113547,1732],{"class":49},[39,113549,113118],{"class":45},[39,113551,113552,113554,113556,113558,113560,113562,113564,113566,113568,113570,113572,113574,113576,113578,113580],{"class":41,"line":74},[39,113553,106816],{"class":45},[39,113555,260],{"class":56},[39,113557,5501],{"class":45},[39,113559,50],{"class":49},[39,113561,113135],{"class":45},[39,113563,106205],{"class":56},[39,113565,7574],{"class":49},[39,113567,113142],{"class":45},[39,113569,63],{"class":56},[39,113571,113147],{"class":45},[39,113573,1732],{"class":49},[39,113575,103348],{"class":56},[39,113577,13491],{"class":45},[39,113579,103348],{"class":56},[39,113581,209],{"class":45},[39,113583,113584,113586,113588,113590,113592,113594,113596,113598,113600,113602,113604,113606,113608,113610,113612],{"class":41,"line":99},[39,113585,106816],{"class":45},[39,113587,57],{"class":56},[39,113589,5501],{"class":45},[39,113591,50],{"class":49},[39,113593,113135],{"class":45},[39,113595,106205],{"class":56},[39,113597,7574],{"class":49},[39,113599,113142],{"class":45},[39,113601,260],{"class":56},[39,113603,113147],{"class":45},[39,113605,1732],{"class":49},[39,113607,103348],{"class":56},[39,113609,13491],{"class":45},[39,113611,103348],{"class":56},[39,113613,209],{"class":45},[19,113615,113616],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[1188,113618,102653],{"id":102653},[29,113620,113621],{"className":31,"code":113431,"language":33,"meta":34,"style":34},[36,113622,113623],{"__ignoreMap":34},[39,113624,113625,113627,113629,113631,113633],{"class":41,"line":42},[39,113626,33002],{"class":49},[39,113628,112801],{"class":3021},[39,113630,112804],{"class":45},[39,113632,2368],{"class":56},[39,113634,112809],{"class":45},[19,113636,113637,113638,113640,113641,83593,113643,29442],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[36,113639,80864],{}," 是 site 的名字，比如 ",[36,113642,112481],{},[36,113644,112904],{},[29,113646,113648],{"className":31,"code":113647,"language":33,"meta":34,"style":34},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[36,113649,113650],{"__ignoreMap":34},[39,113651,113652,113654,113656],{"class":41,"line":42},[39,113653,104579],{"class":45},[39,113655,50],{"class":49},[39,113657,112818],{"class":45},[19,113659,113660],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[29,113662,113664],{"className":31,"code":113663,"language":33,"meta":34,"style":34},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[36,113665,113666,113678],{"__ignoreMap":34},[39,113667,113668,113670,113672,113674,113676],{"class":41,"line":42},[39,113669,2596],{"class":49},[39,113671,104394],{"class":45},[39,113673,2108],{"class":49},[39,113675,5151],{"class":56},[39,113677,4797],{"class":45},[39,113679,113680,113682,113684,113686,113688,113690,113692,113694,113696,113698],{"class":41,"line":74},[39,113681,104840],{"class":49},[39,113683,104380],{"class":56},[39,113685,1221],{"class":45},[39,113687,1270],{"class":49},[39,113689,112843],{"class":1319},[39,113691,2094],{"class":56},[39,113693,80864],{"class":45},[39,113695,2144],{"class":56},[39,113697,1462],{"class":1319},[39,113699,209],{"class":45},[19,113701,113702,113703,113706,113707,113709],{},"如果 site 没找到，就主动报错。",[36,113704,113705],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[36,113708,80864],{}," 的值放进字符串里。",[29,113711,113713],{"className":31,"code":113712,"language":33,"meta":34,"style":34},"return data.site_xpos[site_id].copy()\n",[36,113714,113715],{"__ignoreMap":34},[39,113716,113717,113719],{"class":41,"line":42},[39,113718,18102],{"class":49},[39,113720,112860],{"class":45},[19,113722,113723,113724,113726,113727,113730],{},"返回这个 site 的世界坐标。",[36,113725,104625],{}," 里的每一行都是一个 site 的 ",[36,113728,113729],{},"(x, y, z)"," 坐标。",[29,113732,113734],{"className":31,"code":113733,"language":33,"meta":34,"style":34},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[36,113735,113736],{"__ignoreMap":34},[39,113737,113738,113740,113742],{"class":41,"line":42},[39,113739,33002],{"class":49},[39,113741,112875],{"class":3021},[39,113743,112878],{"class":45},[19,113745,113746],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[29,113748,113750],{"className":31,"code":113749,"language":33,"meta":34,"style":34},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[36,113751,113752,113764],{"__ignoreMap":34},[39,113753,113754,113756,113758,113760,113762],{"class":41,"line":42},[39,113755,112513],{"class":45},[39,113757,50],{"class":49},[39,113759,112888],{"class":45},[39,113761,112481],{"class":1319},[39,113763,209],{"class":45},[39,113765,113766,113768,113770,113772,113774],{"class":41,"line":74},[39,113767,112523],{"class":45},[39,113769,50],{"class":49},[39,113771,112888],{"class":45},[39,113773,112904],{"class":1319},[39,113775,209],{"class":45},[19,113777,113778],{},"分别读取末端点和目标点的世界坐标。",[29,113780,113781],{"className":31,"code":113453,"language":33,"meta":34,"style":34},[36,113782,113783],{"__ignoreMap":34},[39,113784,113785,113787],{"class":41,"line":42},[39,113786,18102],{"class":49},[39,113788,112913],{"class":45},[19,113790,113791],{},"把四部分拼成一个观测数组：",[29,113793,113796],{"className":113794,"code":113795,"language":6244,"meta":34},[6242],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[36,113797,113795],{"__ignoreMap":34},[29,113799,113801],{"className":31,"code":113800,"language":33,"meta":34,"style":34},"dist = np.linalg.norm(tip - target)\n",[36,113802,113803],{"__ignoreMap":34},[39,113804,113805,113807,113809,113811,113813],{"class":41,"line":42},[39,113806,112541],{"class":45},[39,113808,50],{"class":49},[39,113810,112546],{"class":45},[39,113812,1732],{"class":49},[39,113814,112551],{"class":45},[19,113816,113817,113818,113821,113822,113825],{},"计算 tip 到 target 的距离。",[36,113819,113820],{},"tip - target"," 得到一个三维向量，",[36,113823,113824],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113827,15689],{},[29,113829,113832],{"className":113830,"code":113831,"language":6244,"meta":34},[6242],"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",[36,113833,113831],{"__ignoreMap":34},[29,113835,113837],{"className":31,"code":113836,"language":33,"meta":34,"style":34},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[36,113838,113839],{"__ignoreMap":34},[39,113840,113841,113843,113845,113847,113849],{"class":41,"line":42},[39,113842,113488],{"class":45},[39,113844,50],{"class":49},[39,113846,112982],{"class":56},[39,113848,7574],{"class":49},[39,113850,112987],{"class":45},[19,113852,113853,113854,113857,113858,113861],{},"计算动作惩罚。",[36,113855,113856],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[36,113859,113860],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[29,113863,113865],{"className":31,"code":113864,"language":33,"meta":34,"style":34},"return float(-dist - control_cost)\n",[36,113866,113867],{"__ignoreMap":34},[39,113868,113869,113871,113873,113875,113877,113879,113881],{"class":41,"line":42},[39,113870,18102],{"class":49},[39,113872,110742],{"class":56},[39,113874,1221],{"class":45},[39,113876,1732],{"class":49},[39,113878,112541],{"class":45},[39,113880,1732],{"class":49},[39,113882,113004],{"class":45},[19,113884,113885],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[29,113887,113888],{"className":31,"code":111748,"language":33,"meta":34,"style":34},[36,113889,113890],{"__ignoreMap":34},[39,113891,113892,113894,113896],{"class":41,"line":42},[39,113893,111755],{"class":45},[39,113895,50],{"class":49},[39,113897,105706],{"class":56},[19,113899,113900],{},"累计奖励变量，记录整个运行过程的总分。",[29,113902,113904],{"className":31,"code":113903,"language":33,"meta":34,"style":34},"for step in range(500):\n",[36,113905,113906],{"__ignoreMap":34},[39,113907,113908,113910,113912,113914,113916,113918,113920],{"class":41,"line":42},[39,113909,4083],{"class":49},[39,113911,32671],{"class":45},[39,113913,27100],{"class":49},[39,113915,33498],{"class":56},[39,113917,1221],{"class":45},[39,113919,66128],{"class":56},[39,113921,31841],{"class":45},[19,113923,113924],{},"运行 500 个控制步。",[29,113926,113927],{"className":31,"code":105488,"language":33,"meta":34,"style":34},[36,113928,113929],{"__ignoreMap":34},[39,113930,113931],{"class":41,"line":42},[39,113932,105488],{"class":45},[19,113934,113935,113936,101963,113938,113940],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[36,113937,104176],{},[36,113939,104179],{}," 是当前状态下的坐标。",[29,113942,113944],{"className":31,"code":113943,"language":33,"meta":34,"style":34},"error = target - tip\n",[36,113945,113946],{"__ignoreMap":34},[39,113947,113948,113950,113952,113954,113956],{"class":41,"line":42},[39,113949,113541],{"class":45},[39,113951,50],{"class":49},[39,113953,113113],{"class":45},[39,113955,1732],{"class":49},[39,113957,113118],{"class":45},[19,113959,113960],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[29,113962,113964],{"className":31,"code":113963,"language":33,"meta":34,"style":34},"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",[36,113965,113966,113998],{"__ignoreMap":34},[39,113967,113968,113970,113972,113974,113976,113978,113980,113982,113984,113986,113988,113990,113992,113994,113996],{"class":41,"line":42},[39,113969,106816],{"class":45},[39,113971,260],{"class":56},[39,113973,5501],{"class":45},[39,113975,50],{"class":49},[39,113977,113135],{"class":45},[39,113979,106205],{"class":56},[39,113981,7574],{"class":49},[39,113983,113142],{"class":45},[39,113985,63],{"class":56},[39,113987,113147],{"class":45},[39,113989,1732],{"class":49},[39,113991,103348],{"class":56},[39,113993,13491],{"class":45},[39,113995,103348],{"class":56},[39,113997,209],{"class":45},[39,113999,114000,114002,114004,114006,114008,114010,114012,114014,114016,114018,114020,114022,114024,114026,114028],{"class":41,"line":74},[39,114001,106816],{"class":45},[39,114003,57],{"class":56},[39,114005,5501],{"class":45},[39,114007,50],{"class":49},[39,114009,113135],{"class":45},[39,114011,106205],{"class":56},[39,114013,7574],{"class":49},[39,114015,113142],{"class":45},[39,114017,260],{"class":56},[39,114019,113147],{"class":45},[39,114021,1732],{"class":49},[39,114023,103348],{"class":56},[39,114025,13491],{"class":45},[39,114027,103348],{"class":56},[39,114029,209],{"class":45},[19,114031,114032,114033,114036],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[36,114034,114035],{},"error -> ctrl -> step"," 的流程。",[29,114038,114039],{"className":31,"code":105450,"language":33,"meta":34,"style":34},[36,114040,114041],{"__ignoreMap":34},[39,114042,114043],{"class":41,"line":42},[39,114044,105450],{"class":45},[19,114046,114047],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[29,114049,114051],{"className":31,"code":114050,"language":33,"meta":34,"style":34},"obs = get_obs(model, data)\n",[36,114052,114053],{"__ignoreMap":34},[39,114054,114055,114057,114059],{"class":41,"line":42},[39,114056,111799],{"class":45},[39,114058,50],{"class":49},[39,114060,113236],{"class":45},[19,114062,114063,114064,114067],{},"读取最新观测。后面打印 ",[36,114065,114066],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114069,103261],{"id":103260},[19,114071,114072],{},"观测维度为:",[29,114074,114077],{"className":114075,"code":114076,"language":6244,"meta":34},[6242],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[36,114078,114076],{"__ignoreMap":34},[19,114080,114081],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114083,114084],{},"程序每 100 步打印：",[29,114086,114089],{"className":114087,"code":114088,"language":6244,"meta":34},[6242],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[36,114090,114088],{"__ignoreMap":34},[19,114092,114093,114094,114096],{},"如果控制有效，你应该看到最终 ",[36,114095,104176],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114098,103293],{"id":103292},[1171,114100,114101,114104,114107,114113,114119,114126,114136],{},[1174,114102,114103],{},"修改目标点位置。",[1174,114105,114106],{},"重新运行，观察最终 tip 是否变化。",[1174,114108,114109,114110,114112],{},"把 gravity 改成 ",[36,114111,103534],{},"，观察控制是否变差。",[1174,114114,112126,114115,112130,114117,29442],{},[36,114116,103103],{},[36,114118,63],{},[1174,114120,103356,114121,103359,114123,114125],{},[36,114122,111541],{},[36,114124,108252],{},"，观察机械臂是否更难移动。",[1174,114127,103356,114128,83584,114130,103359,114132,114135],{},[36,114129,104179],{},[36,114131,105091],{},[36,114133,114134],{},"0.2 0 0.6","，观察 reward 和 final tip。",[1174,114137,114138],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114140,103398],{"id":103397},[1188,114142,114144],{"id":114143},"site-not-found",[36,114145,114146],{},"site not found",[19,114148,114149,114150,101963,114153,29442],{},"检查 XML 中是否有 ",[36,114151,114152],{},"site name=\"tip\"",[36,114154,114155],{},"site name=\"target\"",[1188,114157,114158],{"id":114158},"机械臂完全不动",[19,114160,103468],{},[1171,114162,114163,114168,114171,114176],{},[1174,114164,114165,114167],{},[36,114166,103103],{}," 是否为 2",[1174,114169,114170],{},"actuator 是否引用正确 joint",[1174,114172,114173,114175],{},[36,114174,102021],{}," 是否被赋值",[1174,114177,114178,114179],{},"是否执行了 ",[36,114180,101630],{},[1188,114182,114183],{"id":114183},"控制效果不好",[19,114185,114186],{},"正常。本章重点不是控制器最优，而是任务结构:",[29,114188,114191],{"className":114189,"code":114190,"language":6244,"meta":34},[6242],"obs → action → mj_step → reward → next_obs\n",[36,114192,114190],{"__ignoreMap":34},[1188,114194,114196],{"id":114195},"tip-坐标不变化","tip 坐标不变化",[19,114198,103520],{},[1171,114200,114201,114206,114214,114223],{},[1174,114202,114203,114204,29442],{},"是否每步调用了 ",[36,114205,101630],{},[1174,114207,114208,114209,101963,114211,29442],{},"是否写入了 ",[36,114210,107071],{},[36,114212,114213],{},"data.ctrl[1]",[1174,114215,114216,114217,1425,114220,29442],{},"actuator 是否正确引用 ",[36,114218,114219],{},"joint1",[36,114221,114222],{},"joint2",[1174,114224,114225],{},"控制输入是否太小。",[1188,114227,114228],{"id":114228},"目标点不会动",[19,114230,114231],{},"本章的 target 是固定 site：",[29,114233,114235],{"className":54121,"code":114234,"language":54123,"meta":34,"style":34},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[36,114236,114237],{"__ignoreMap":34},[39,114238,114239,114241,114243,114245,114247,114249,114251,114253,114256],{"class":41,"line":42},[39,114240,2108],{"class":45},[39,114242,104155],{"class":52354},[39,114244,15976],{"class":3021},[39,114246,50],{"class":45},[39,114248,112904],{"class":1319},[39,114250,102051],{"class":3021},[39,114252,50],{"class":45},[39,114254,114255],{"class":1319},"\"0.5 0 0.4\"",[39,114257,114258],{"class":45}," ...\u002F>\n",[19,114260,114261,114262,114264],{},"它直接挂在 ",[36,114263,102786],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[1188,114266,114267],{"id":114267},"机械臂不像真实机械臂",[19,114269,114270],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114272,103552],{"id":103551},[19,114274,114275],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114277,114278],{},"核心公式：",[29,114280,114283],{"className":114281,"code":114282,"language":6244,"meta":34},[6242],"distance = ||tip - target||\nreward = -distance - action_cost\n",[36,114284,114282],{"__ignoreMap":34},[19,114286,114287],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1133,114289,114290],{},"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":34,"searchDepth":74,"depth":74,"links":114292},[114293,114294,114295,114300,114304,114305,114306,114314],{"id":101591,"depth":74,"text":101592},{"id":101714,"depth":74,"text":101715},{"id":101989,"depth":74,"text":101990,"children":114296},[114297,114298,114299],{"id":112496,"depth":99,"text":112497},{"id":112572,"depth":99,"text":112572},{"id":112602,"depth":99,"text":112603},{"id":102197,"depth":74,"text":102198,"children":114301},[114302,114303],{"id":102517,"depth":99,"text":102517},{"id":102653,"depth":99,"text":102653},{"id":103260,"depth":74,"text":103261},{"id":103292,"depth":74,"text":103293},{"id":103397,"depth":74,"text":103398,"children":114307},[114308,114309,114310,114311,114312,114313],{"id":114143,"depth":99,"text":114146},{"id":114158,"depth":99,"text":114158},{"id":114183,"depth":99,"text":114183},{"id":114195,"depth":99,"text":114196},{"id":114228,"depth":99,"text":114228},{"id":114267,"depth":99,"text":114267},{"id":103551,"depth":74,"text":103552},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112300,"description":34},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114321,"title":114322,"body":114323,"description":34,"extension":1143,"meta":117785,"navigation":1145,"path":117786,"seo":117787,"stem":117788,"__hash__":117789},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114324,"toc":117756},[114325,114328,114330,114333,114336,114361,114364,114370,114373,114379,114381,114383,114407,114409,114427,114429,114472,114474,114501,114503,114506,114558,114561,114567,114576,114579,114617,114620,114659,114662,114670,114677,114680,114686,114688,114742,114749,114794,114797,114801,114817,114827,114829,116090,116092,116104,116106,116117,116119,116122,116143,116146,116149,116182,116188,116191,116224,116227,116230,116271,116276,116290,116293,116306,116311,116334,116336,116351,116361,116376,116383,116403,116418,116436,116439,116456,116464,116480,116486,116518,116531,116563,116573,116608,116622,116668,116682,116724,116735,116748,116754,116787,116790,116817,116827,116867,116877,116894,116901,116919,116922,116963,116976,116991,116994,117017,117020,117032,117035,117054,117059,117080,117083,117098,117101,117135,117147,117162,117165,117190,117193,117212,117215,117247,117250,117274,117280,117310,117317,117330,117333,117335,117337,117343,117346,117349,117361,117364,117366,117420,117422,117426,117432,117441,117444,117451,117453,117476,117479,117483,117485,117503,117509,117511,117544,117547,117553,117557,117560,117580,117585,117589,117596,117616,117621,117625,117628,117648,117651,117737,117741,117744,117750,117753],[10,114326,114322],{"id":114327},"_8gymnasium-风格强化学习接口基础",[14,114329,101592],{"id":101591},[19,114331,114332],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,114334,114335],{},"你将实现:",[29,114337,114339],{"className":31,"code":114338,"language":33,"meta":34,"style":34},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[36,114340,114341,114351],{"__ignoreMap":34},[39,114342,114343,114346,114348],{"class":41,"line":42},[39,114344,114345],{"class":45},"obs, info ",[39,114347,50],{"class":49},[39,114349,114350],{"class":45}," env.reset()\n",[39,114352,114353,114356,114358],{"class":41,"line":74},[39,114354,114355],{"class":45},"obs, reward, terminated, truncated, info ",[39,114357,50],{"class":49},[39,114359,114360],{"class":45}," env.step(action)\n",[19,114362,114363],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,114365,114366,114367,114369],{},"前面章节的代码都是“脚本式”的：在 ",[36,114368,103240],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,114371,114372],{},"可以先记住 Gymnasium 环境的核心交互：",[29,114374,114377],{"className":114375,"code":114376,"language":6244,"meta":34},[6242],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[36,114378,114376],{"__ignoreMap":34},[14,114380,101715],{"id":101714},[19,114382,101718],{},[29,114384,114385],{"className":24878,"code":105333,"language":24880,"meta":34,"style":34},[36,114386,114387],{"__ignoreMap":34},[39,114388,114389,114391,114393,114395,114397,114399,114401,114403,114405],{"class":41,"line":42},[39,114390,25633],{"class":3021},[39,114392,27372],{"class":1319},[39,114394,24890],{"class":1319},[39,114396,27457],{"class":56},[39,114398,105348],{"class":1319},[39,114400,101743],{"class":1319},[39,114402,103446],{"class":1319},[39,114404,101759],{"class":1319},[39,114406,105357],{"class":1319},[19,114408,103764],{},[29,114410,114412],{"className":24878,"code":114411,"language":24880,"meta":34,"style":34},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[36,114413,114414],{"__ignoreMap":34},[39,114415,114416,114418,114420,114422,114424],{"class":41,"line":42},[39,114417,24887],{"class":3021},[39,114419,24890],{"class":1319},[39,114421,101875],{"class":1319},[39,114423,108656],{"class":1319},[39,114425,114426],{"class":1319}," gymnasium\n",[19,114428,103781],{},[29,114430,114432],{"className":24878,"code":114431,"language":24880,"meta":34,"style":34},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[36,114433,114434,114451,114460],{"__ignoreMap":34},[39,114435,114436,114438,114440,114442,114445,114447,114449],{"class":41,"line":42},[39,114437,31387],{"class":3021},[39,114439,30233],{"class":1319},[39,114441,26172],{"class":56},[39,114443,114444],{"class":1319}," mujoco-gym-api",[39,114446,101920],{"class":1319},[39,114448,101923],{"class":56},[39,114450,101926],{"class":56},[39,114452,114453,114455,114457],{"class":41,"line":74},[39,114454,31387],{"class":3021},[39,114456,101933],{"class":1319},[39,114458,114459],{"class":1319}," mujoco-gym-api\n",[39,114461,114462,114464,114466,114468,114470],{"class":41,"line":99},[39,114463,24887],{"class":3021},[39,114465,24890],{"class":1319},[39,114467,101875],{"class":1319},[39,114469,108656],{"class":1319},[39,114471,114426],{"class":1319},[19,114473,101949],{},[1171,114475,114476,114486,114489,114495],{},[1174,114477,114478,114479,114482,114483,29442],{},"本章使用 ",[36,114480,114481],{},"gymnasium","，不是旧版 ",[36,114484,114485],{},"gym",[1174,114487,114488],{},"Gymnasium API 与旧 Gym API 有差异。",[1174,114490,114491,114492,29442],{},"旧 Gym 常见返回值是 4 个: ",[36,114493,114494],{},"obs, reward, done, info",[1174,114496,114497,114498,29442],{},"Gymnasium 返回值是 5 个: ",[36,114499,114500],{},"obs, reward, terminated, truncated, info",[14,114502,101990],{"id":101989},[19,114504,114505],{},"强化学习环境接口包含:",[1352,114507,114508,114517],{},[1355,114509,114510],{},[1358,114511,114512,114515],{},[1361,114513,114514],{"align":24792},"方法",[1361,114516,103641],{"align":24792},[1398,114518,114519,114529,114539,114549],{},[1358,114520,114521,114526],{},[1403,114522,114523],{"align":24792},[36,114524,114525],{},"reset()",[1403,114527,114528],{"align":24792},"重置环境",[1358,114530,114531,114536],{},[1403,114532,114533],{"align":24792},[36,114534,114535],{},"step(action)",[1403,114537,114538],{"align":24792},"执行动作",[1358,114540,114541,114546],{},[1403,114542,114543],{"align":24792},[36,114544,114545],{},"observation_space",[1403,114547,114548],{"align":24792},"观测空间",[1358,114550,114551,114556],{},[1403,114552,114553],{"align":24792},[36,114554,114555],{},"action_space",[1403,114557,24710],{"align":24792},[19,114559,114560],{},"一个最小环境需要完成:",[29,114562,114565],{"className":114563,"code":114564,"language":6244,"meta":34},[6242],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[36,114566,114564],{"__ignoreMap":34},[1188,114568,114570,101963,114573,105583],{"id":114569},"terminated-和-truncated-的区别",[36,114571,114572],{},"terminated",[36,114574,114575],{},"truncated",[19,114577,114578],{},"Gymnasium 把“结束”拆成两个概念：",[1352,114580,114581,114591],{},[1355,114582,114583],{},[1358,114584,114585,114587,114589],{},[1361,114586,105519],{"align":24792},[1361,114588,101645],{"align":24792},[1361,114590,22243],{"align":24792},[1398,114592,114593,114605],{},[1358,114594,114595,114599,114602],{},[1403,114596,114597],{"align":24792},[36,114598,114572],{},[1403,114600,114601],{"align":24792},"任务自然结束",[1403,114603,114604],{"align":24792},"机械臂到达目标、机器人摔倒",[1358,114606,114607,114611,114614],{},[1403,114608,114609],{"align":24792},[36,114610,114575],{},[1403,114612,114613],{"align":24792},"因外部限制截断",[1403,114615,114616],{"align":24792},"达到最大步数、时间限制",[19,114618,114619],{},"本章中：",[29,114621,114623],{"className":31,"code":114622,"language":33,"meta":34,"style":34},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[36,114624,114625,114640],{"__ignoreMap":34},[39,114626,114627,114630,114632,114635,114637],{"class":41,"line":42},[39,114628,114629],{"class":45},"terminated ",[39,114631,50],{"class":49},[39,114633,114634],{"class":45}," dist ",[39,114636,2108],{"class":49},[39,114638,114639],{"class":56}," 0.05\n",[39,114641,114642,114645,114647,114649,114652,114654,114656],{"class":41,"line":74},[39,114643,114644],{"class":45},"truncated ",[39,114646,50],{"class":49},[39,114648,39928],{"class":56},[39,114650,114651],{"class":45},".steps ",[39,114653,2768],{"class":49},[39,114655,39928],{"class":56},[39,114657,114658],{"class":45},".max_steps\n",[19,114660,114661],{},"也就是：",[1171,114663,114664,114667],{},[1174,114665,114666],{},"末端距离目标小于 0.05，任务成功结束。",[1174,114668,114669],{},"步数超过上限，episode 被截断。",[1188,114671,114673,101963,114675],{"id":114672},"observation_space-和-action_space",[36,114674,114545],{},[36,114676,114555],{},[19,114678,114679],{},"这两个对象告诉算法：",[29,114681,114684],{"className":114682,"code":114683,"language":6244,"meta":34},[6242],"观测长什么样\n动作允许多大\n",[36,114685,114683],{"__ignoreMap":34},[19,114687,15689],{},[29,114689,114691],{"className":31,"code":114690,"language":33,"meta":34,"style":34},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[36,114692,114693],{"__ignoreMap":34},[39,114694,114695,114697,114700,114702,114705,114708,114711,114713,114715,114718,114720,114722,114724,114726,114728,114730,114732,114735,114737,114739],{"class":41,"line":42},[39,114696,31878],{"class":56},[39,114698,114699],{"class":45},".action_space ",[39,114701,50],{"class":49},[39,114703,114704],{"class":45}," spaces.Box(",[39,114706,114707],{"class":254},"low",[39,114709,114710],{"class":49},"=-",[39,114712,103348],{"class":56},[39,114714,13491],{"class":45},[39,114716,114717],{"class":254},"high",[39,114719,50],{"class":49},[39,114721,103348],{"class":56},[39,114723,13491],{"class":45},[39,114725,97012],{"class":254},[39,114727,50],{"class":49},[39,114729,1221],{"class":45},[39,114731,63],{"class":56},[39,114733,114734],{"class":45},",), ",[39,114736,94550],{"class":254},[39,114738,50],{"class":49},[39,114740,114741],{"class":45},"np.float32)\n",[19,114743,114744,114745,114748],{},"表示动作是 2 维数组，每个值都在 ",[36,114746,114747],{},"[-1, 1]"," 范围内。",[29,114750,114752],{"className":31,"code":114751,"language":33,"meta":34,"style":34},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[36,114753,114754],{"__ignoreMap":34},[39,114755,114756,114758,114761,114763,114765,114767,114769,114772,114774,114776,114778,114780,114782,114784,114786,114788,114790,114792],{"class":41,"line":42},[39,114757,31878],{"class":56},[39,114759,114760],{"class":45},".observation_space ",[39,114762,50],{"class":49},[39,114764,114704],{"class":45},[39,114766,114707],{"class":254},[39,114768,114710],{"class":49},[39,114770,114771],{"class":45},"np.inf, ",[39,114773,114717],{"class":254},[39,114775,50],{"class":49},[39,114777,114771],{"class":45},[39,114779,97012],{"class":254},[39,114781,50],{"class":49},[39,114783,1221],{"class":45},[39,114785,146],{"class":56},[39,114787,114734],{"class":45},[39,114789,94550],{"class":254},[39,114791,50],{"class":49},[39,114793,114741],{"class":45},[19,114795,114796],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[1188,114798,114800],{"id":114799},"frame_skip-是什么","frame_skip 是什么",[29,114802,114804],{"className":31,"code":114803,"language":33,"meta":34,"style":34},"self.frame_skip = 5\n",[36,114805,114806],{"__ignoreMap":34},[39,114807,114808,114810,114813,114815],{"class":41,"line":42},[39,114809,31878],{"class":56},[39,114811,114812],{"class":45},".frame_skip ",[39,114814,50],{"class":49},[39,114816,55481],{"class":56},[19,114818,114819,114820,114823,114824,114826],{},"表示外部调用一次 ",[36,114821,114822],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[36,114825,102160],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114828,102198],{"id":102197},[29,114830,114832],{"className":31,"code":114831,"language":33,"meta":34,"style":34},"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",[36,114833,114834,114846,114852,114862,114873,114877,114881,114889,114894,114898,114902,114906,114910,114914,114918,114922,114927,114931,114935,114939,114944,114948,114952,114956,114960,114964,114968,114972,114976,114980,114984,114988,114992,114996,115014,115029,115033,115046,115056,115071,115088,115092,115113,115132,115157,115171,115175,115185,115197,115207,115211,115253,115291,115295,115305,115321,115336,115355,115362,115366,115379,115394,115409,115422,115441,115457,115461,115502,115517,115532,115536,115575,115586,115599,115603,115613,115622,115626,115636,115651,115669,115673,115684,115701,115714,115718,115728,115732,115743,115754,115758,115772,115786,115802,115806,115819,115836,115851,115858,115862,115866,115878,115888,115906,115918,115930,115934,115942,115958,115967,115976,115984,116026,116039,116044,116048,116066,116070,116074,116086],{"__ignoreMap":34},[39,114835,114836,114838,114841,114843],{"class":41,"line":42},[39,114837,31447],{"class":49},[39,114839,114840],{"class":45}," gymnasium ",[39,114842,32438],{"class":49},[39,114844,114845],{"class":45}," gym\n",[39,114847,114848,114850],{"class":41,"line":74},[39,114849,31447],{"class":49},[39,114851,102246],{"class":45},[39,114853,114854,114856,114858,114860],{"class":41,"line":99},[39,114855,31447],{"class":49},[39,114857,32435],{"class":45},[39,114859,32438],{"class":49},[39,114861,32441],{"class":45},[39,114863,114864,114866,114868,114870],{"class":41,"line":106},[39,114865,31792],{"class":49},[39,114867,114840],{"class":45},[39,114869,31447],{"class":49},[39,114871,114872],{"class":45}," spaces\n",[39,114874,114875],{"class":41,"line":112},[39,114876,3458],{"emptyLinePlaceholder":1145},[39,114878,114879],{"class":41,"line":118},[39,114880,3458],{"emptyLinePlaceholder":1145},[39,114882,114883,114885,114887],{"class":41,"line":413},[39,114884,102259],{"class":56},[39,114886,14620],{"class":49},[39,114888,102264],{"class":1319},[39,114890,114891],{"class":41,"line":419},[39,114892,114893],{"class":1319},"\u003Cmujoco model=\"gym_reacher\">\n",[39,114895,114896],{"class":41,"line":425},[39,114897,112683],{"class":1319},[39,114899,114900],{"class":41,"line":443},[39,114901,3458],{"emptyLinePlaceholder":1145},[39,114903,114904],{"class":41,"line":449},[39,114905,102283],{"class":1319},[39,114907,114908],{"class":41,"line":455},[39,114909,112701],{"class":1319},[39,114911,114912],{"class":41,"line":461},[39,114913,3458],{"emptyLinePlaceholder":1145},[39,114915,114916],{"class":41,"line":475},[39,114917,112710],{"class":1319},[39,114919,114920],{"class":41,"line":665},[39,114921,112715],{"class":1319},[39,114923,114924],{"class":41,"line":671},[39,114925,114926],{"class":1319},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[39,114928,114929],{"class":41,"line":684},[39,114930,3458],{"emptyLinePlaceholder":1145},[39,114932,114933],{"class":41,"line":2732},[39,114934,112729],{"class":1319},[39,114936,114937],{"class":41,"line":2737},[39,114938,112734],{"class":1319},[39,114940,114941],{"class":41,"line":2751},[39,114942,114943],{"class":1319},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[39,114945,114946],{"class":41,"line":2756},[39,114947,112744],{"class":1319},[39,114949,114950],{"class":41,"line":2785},[39,114951,107383],{"class":1319},[39,114953,114954],{"class":41,"line":2790},[39,114955,102312],{"class":1319},[39,114957,114958],{"class":41,"line":2807},[39,114959,102317],{"class":1319},[39,114961,114962],{"class":41,"line":2812},[39,114963,3458],{"emptyLinePlaceholder":1145},[39,114965,114966],{"class":41,"line":2817},[39,114967,107400],{"class":1319},[39,114969,114970],{"class":41,"line":2822},[39,114971,112769],{"class":1319},[39,114973,114974],{"class":41,"line":2836},[39,114975,112774],{"class":1319},[39,114977,114978],{"class":41,"line":2841},[39,114979,107410],{"class":1319},[39,114981,114982],{"class":41,"line":3635},[39,114983,102322],{"class":1319},[39,114985,114986],{"class":41,"line":3649},[39,114987,96747],{"class":1319},[39,114989,114990],{"class":41,"line":3657},[39,114991,3458],{"emptyLinePlaceholder":1145},[39,114993,114994],{"class":41,"line":3662},[39,114995,3458],{"emptyLinePlaceholder":1145},[39,114997,114998,115000,115003,115005,115007,115009,115012],{"class":41,"line":3668},[39,114999,15750],{"class":49},[39,115001,115002],{"class":3021}," ReacherEnv",[39,115004,1221],{"class":45},[39,115006,114485],{"class":3021},[39,115008,1758],{"class":45},[39,115010,115011],{"class":3021},"Env",[39,115013,31841],{"class":45},[39,115015,115016,115019,115021,115023,115026],{"class":41,"line":3674},[39,115017,115018],{"class":45},"    metadata ",[39,115020,50],{"class":49},[39,115022,5506],{"class":45},[39,115024,115025],{"class":1319},"\"render_modes\"",[39,115027,115028],{"class":45},": []}\n",[39,115030,115031],{"class":41,"line":3679},[39,115032,3458],{"emptyLinePlaceholder":1145},[39,115034,115035,115037,115039,115042,115044],{"class":41,"line":9004},[39,115036,31856],{"class":49},[39,115038,31859],{"class":56},[39,115040,115041],{"class":45},"(self) -> ",[39,115043,96735],{"class":56},[39,115045,4797],{"class":45},[39,115047,115048,115050,115052,115054],{"class":41,"line":9028},[39,115049,31872],{"class":56},[39,115051,18317],{"class":45},[39,115053,31884],{"class":56},[39,115055,3034],{"class":45},[39,115057,115058,115060,115063,115065,115067,115069],{"class":41,"line":9033},[39,115059,31900],{"class":56},[39,115061,115062],{"class":45},".model ",[39,115064,50],{"class":49},[39,115066,102357],{"class":45},[39,115068,102259],{"class":56},[39,115070,209],{"class":45},[39,115072,115073,115075,115078,115080,115083,115085],{"class":41,"line":9039},[39,115074,31900],{"class":56},[39,115076,115077],{"class":45},".data ",[39,115079,50],{"class":49},[39,115081,115082],{"class":45}," mujoco.MjData(",[39,115084,31878],{"class":56},[39,115086,115087],{"class":45},".model)\n",[39,115089,115090],{"class":41,"line":9066},[39,115091,3458],{"emptyLinePlaceholder":1145},[39,115093,115094,115096,115099,115101,115104,115106,115109,115111],{"class":41,"line":9071},[39,115095,31900],{"class":56},[39,115097,115098],{"class":45},".tip_site_id ",[39,115100,50],{"class":49},[39,115102,115103],{"class":45}," mujoco.mj_name2id(",[39,115105,31878],{"class":56},[39,115107,115108],{"class":45},".model, mujoco.mjtObj.mjOBJ_SITE, ",[39,115110,112481],{"class":1319},[39,115112,209],{"class":45},[39,115114,115115,115117,115120,115122,115124,115126,115128,115130],{"class":41,"line":9077},[39,115116,31900],{"class":56},[39,115118,115119],{"class":45},".target_site_id ",[39,115121,50],{"class":49},[39,115123,115103],{"class":45},[39,115125,31878],{"class":56},[39,115127,115108],{"class":45},[39,115129,112904],{"class":1319},[39,115131,209],{"class":45},[39,115133,115134,115136,115138,115140,115142,115144,115147,115149,115151,115153,115155],{"class":41,"line":9089},[39,115135,3555],{"class":49},[39,115137,39928],{"class":56},[39,115139,115098],{"class":45},[39,115141,2108],{"class":49},[39,115143,5151],{"class":56},[39,115145,115146],{"class":49}," or",[39,115148,39928],{"class":56},[39,115150,115119],{"class":45},[39,115152,2108],{"class":49},[39,115154,5151],{"class":56},[39,115156,4797],{"class":45},[39,115158,115159,115162,115164,115166,115169],{"class":41,"line":9101},[39,115160,115161],{"class":49},"            raise",[39,115163,104380],{"class":56},[39,115165,1221],{"class":45},[39,115167,115168],{"class":1319},"\"required sites not found\"",[39,115170,209],{"class":45},[39,115172,115173],{"class":41,"line":9113},[39,115174,3458],{"emptyLinePlaceholder":1145},[39,115176,115177,115179,115181,115183],{"class":41,"line":10772},[39,115178,31900],{"class":56},[39,115180,114812],{"class":45},[39,115182,50],{"class":49},[39,115184,55481],{"class":56},[39,115186,115187,115189,115192,115194],{"class":41,"line":10797},[39,115188,31900],{"class":56},[39,115190,115191],{"class":45},".max_steps ",[39,115193,50],{"class":49},[39,115195,115196],{"class":56}," 200\n",[39,115198,115199,115201,115203,115205],{"class":41,"line":10820},[39,115200,31900],{"class":56},[39,115202,114651],{"class":45},[39,115204,50],{"class":49},[39,115206,48388],{"class":56},[39,115208,115209],{"class":41,"line":10844},[39,115210,3458],{"emptyLinePlaceholder":1145},[39,115212,115213,115215,115217,115219,115221,115223,115225,115227,115229,115231,115233,115235,115237,115239,115241,115243,115245,115247,115249,115251],{"class":41,"line":10849},[39,115214,31900],{"class":56},[39,115216,114699],{"class":45},[39,115218,50],{"class":49},[39,115220,114704],{"class":45},[39,115222,114707],{"class":254},[39,115224,114710],{"class":49},[39,115226,103348],{"class":56},[39,115228,13491],{"class":45},[39,115230,114717],{"class":254},[39,115232,50],{"class":49},[39,115234,103348],{"class":56},[39,115236,13491],{"class":45},[39,115238,97012],{"class":254},[39,115240,50],{"class":49},[39,115242,1221],{"class":45},[39,115244,63],{"class":56},[39,115246,114734],{"class":45},[39,115248,94550],{"class":254},[39,115250,50],{"class":49},[39,115252,114741],{"class":45},[39,115254,115255,115257,115259,115261,115263,115265,115267,115269,115271,115273,115275,115277,115279,115281,115283,115285,115287,115289],{"class":41,"line":10854},[39,115256,31900],{"class":56},[39,115258,114760],{"class":45},[39,115260,50],{"class":49},[39,115262,114704],{"class":45},[39,115264,114707],{"class":254},[39,115266,114710],{"class":49},[39,115268,114771],{"class":45},[39,115270,114717],{"class":254},[39,115272,50],{"class":49},[39,115274,114771],{"class":45},[39,115276,97012],{"class":254},[39,115278,50],{"class":49},[39,115280,1221],{"class":45},[39,115282,146],{"class":56},[39,115284,114734],{"class":45},[39,115286,94550],{"class":254},[39,115288,50],{"class":49},[39,115290,114741],{"class":45},[39,115292,115293],{"class":41,"line":10859},[39,115294,3458],{"emptyLinePlaceholder":1145},[39,115296,115297,115299,115302],{"class":41,"line":10868},[39,115298,31856],{"class":49},[39,115300,115301],{"class":3021}," _get_obs",[39,115303,115304],{"class":45},"(self) -> np.ndarray:\n",[39,115306,115307,115309,115311,115313,115316,115318],{"class":41,"line":10873},[39,115308,113082],{"class":45},[39,115310,50],{"class":49},[39,115312,39928],{"class":56},[39,115314,115315],{"class":45},".data.site_xpos[",[39,115317,31878],{"class":56},[39,115319,115320],{"class":45},".tip_site_id].copy()\n",[39,115322,115323,115325,115327,115329,115331,115333],{"class":41,"line":10879},[39,115324,113095],{"class":45},[39,115326,50],{"class":49},[39,115328,39928],{"class":56},[39,115330,115315],{"class":45},[39,115332,31878],{"class":56},[39,115334,115335],{"class":45},".target_site_id].copy()\n",[39,115337,115338,115340,115342,115345,115347,115350,115352],{"class":41,"line":10900},[39,115339,111127],{"class":45},[39,115341,50],{"class":49},[39,115343,115344],{"class":45}," np.concatenate([",[39,115346,31878],{"class":56},[39,115348,115349],{"class":45},".data.qpos.copy(), ",[39,115351,31878],{"class":56},[39,115353,115354],{"class":45},".data.qvel.copy(), tip, target])\n",[39,115356,115357,115359],{"class":41,"line":10906},[39,115358,15808],{"class":49},[39,115360,115361],{"class":45}," obs.astype(np.float32)\n",[39,115363,115364],{"class":41,"line":10920},[39,115365,3458],{"emptyLinePlaceholder":1145},[39,115367,115368,115370,115373,115375,115377],{"class":41,"line":10926},[39,115369,31856],{"class":49},[39,115371,115372],{"class":3021}," _get_reward",[39,115374,115041],{"class":45},[39,115376,1259],{"class":56},[39,115378,4797],{"class":45},[39,115380,115381,115383,115385,115387,115389,115391],{"class":41,"line":10953},[39,115382,113082],{"class":45},[39,115384,50],{"class":49},[39,115386,39928],{"class":56},[39,115388,115315],{"class":45},[39,115390,31878],{"class":56},[39,115392,115393],{"class":45},".tip_site_id]\n",[39,115395,115396,115398,115400,115402,115404,115406],{"class":41,"line":10962},[39,115397,113095],{"class":45},[39,115399,50],{"class":49},[39,115401,39928],{"class":56},[39,115403,115315],{"class":45},[39,115405,31878],{"class":56},[39,115407,115408],{"class":45},".target_site_id]\n",[39,115410,115411,115414,115416,115418,115420],{"class":41,"line":10968},[39,115412,115413],{"class":45},"        dist ",[39,115415,50],{"class":49},[39,115417,112546],{"class":45},[39,115419,1732],{"class":49},[39,115421,112551],{"class":45},[39,115423,115424,115427,115429,115431,115433,115436,115438],{"class":41,"line":10976},[39,115425,115426],{"class":45},"        control_cost ",[39,115428,50],{"class":49},[39,115430,112982],{"class":56},[39,115432,7574],{"class":49},[39,115434,115435],{"class":45}," np.sum(np.square(",[39,115437,31878],{"class":56},[39,115439,115440],{"class":45},".data.ctrl))\n",[39,115442,115443,115445,115447,115449,115451,115453,115455],{"class":41,"line":10981},[39,115444,15808],{"class":49},[39,115446,110742],{"class":56},[39,115448,1221],{"class":45},[39,115450,1732],{"class":49},[39,115452,112541],{"class":45},[39,115454,1732],{"class":49},[39,115456,113004],{"class":45},[39,115458,115459],{"class":41,"line":17660},[39,115460,3458],{"emptyLinePlaceholder":1145},[39,115462,115463,115465,115468,115471,115473,115476,115478,115480,115482,115484,115486,115489,115492,115494,115496,115498,115500],{"class":41,"line":17666},[39,115464,31856],{"class":49},[39,115466,115467],{"class":3021}," reset",[39,115469,115470],{"class":45},"(self, ",[39,115472,1657],{"class":49},[39,115474,115475],{"class":45},", seed: ",[39,115477,1224],{"class":56},[39,115479,26166],{"class":49},[39,115481,39988],{"class":56},[39,115483,14620],{"class":49},[39,115485,39988],{"class":56},[39,115487,115488],{"class":45},", options: ",[39,115490,115491],{"class":56},"dict",[39,115493,26166],{"class":49},[39,115495,39988],{"class":56},[39,115497,14620],{"class":49},[39,115499,39988],{"class":56},[39,115501,31841],{"class":45},[39,115503,115504,115506,115509,115512,115514],{"class":41,"line":17689},[39,115505,31872],{"class":56},[39,115507,115508],{"class":45},"().reset(",[39,115510,115511],{"class":254},"seed",[39,115513,50],{"class":49},[39,115515,115516],{"class":45},"seed)\n",[39,115518,115519,115522,115524,115527,115529],{"class":41,"line":17695},[39,115520,115521],{"class":45},"        mujoco.mj_resetData(",[39,115523,31878],{"class":56},[39,115525,115526],{"class":45},".model, ",[39,115528,31878],{"class":56},[39,115530,115531],{"class":45},".data)\n",[39,115533,115534],{"class":41,"line":17718},[39,115535,3458],{"emptyLinePlaceholder":1145},[39,115537,115538,115540,115543,115545,115547,115550,115552,115554,115556,115558,115560,115562,115564,115566,115568,115570,115572],{"class":41,"line":17732},[39,115539,31900],{"class":56},[39,115541,115542],{"class":45},".data.qpos[:] ",[39,115544,50],{"class":49},[39,115546,39928],{"class":56},[39,115548,115549],{"class":45},".np_random.uniform(",[39,115551,114707],{"class":254},[39,115553,114710],{"class":49},[39,115555,87264],{"class":56},[39,115557,13491],{"class":45},[39,115559,114717],{"class":254},[39,115561,50],{"class":49},[39,115563,87264],{"class":56},[39,115565,13491],{"class":45},[39,115567,32551],{"class":254},[39,115569,50],{"class":49},[39,115571,31878],{"class":56},[39,115573,115574],{"class":45},".model.nq)\n",[39,115576,115577,115579,115582,115584],{"class":41,"line":17752},[39,115578,31900],{"class":56},[39,115580,115581],{"class":45},".data.qvel[:] ",[39,115583,50],{"class":49},[39,115585,105706],{"class":56},[39,115587,115588,115591,115593,115595,115597],{"class":41,"line":17758},[39,115589,115590],{"class":45},"        mujoco.mj_forward(",[39,115592,31878],{"class":56},[39,115594,115526],{"class":45},[39,115596,31878],{"class":56},[39,115598,115531],{"class":45},[39,115600,115601],{"class":41,"line":17769},[39,115602,3458],{"emptyLinePlaceholder":1145},[39,115604,115605,115607,115609,115611],{"class":41,"line":17792},[39,115606,31900],{"class":56},[39,115608,114651],{"class":45},[39,115610,50],{"class":49},[39,115612,48388],{"class":56},[39,115614,115615,115617,115619],{"class":41,"line":17814},[39,115616,15808],{"class":49},[39,115618,39928],{"class":56},[39,115620,115621],{"class":45},"._get_obs(), {}\n",[39,115623,115624],{"class":41,"line":17819},[39,115625,3458],{"emptyLinePlaceholder":1145},[39,115627,115628,115630,115633],{"class":41,"line":17825},[39,115629,31856],{"class":49},[39,115631,115632],{"class":3021}," step",[39,115634,115635],{"class":45},"(self, action):\n",[39,115637,115638,115640,115642,115645,115647,115649],{"class":41,"line":17839},[39,115639,111167],{"class":45},[39,115641,50],{"class":49},[39,115643,115644],{"class":45}," np.asarray(action, ",[39,115646,94550],{"class":254},[39,115648,50],{"class":49},[39,115650,114741],{"class":45},[39,115652,115653,115655,115657,115659,115661,115664,115666],{"class":41,"line":17852},[39,115654,111167],{"class":45},[39,115656,50],{"class":49},[39,115658,108392],{"class":45},[39,115660,31878],{"class":56},[39,115662,115663],{"class":45},".action_space.low, ",[39,115665,31878],{"class":56},[39,115667,115668],{"class":45},".action_space.high)\n",[39,115670,115671],{"class":41,"line":17857},[39,115672,3458],{"emptyLinePlaceholder":1145},[39,115674,115675,115677,115680,115682],{"class":41,"line":17871},[39,115676,31900],{"class":56},[39,115678,115679],{"class":45},".data.ctrl[:] ",[39,115681,50],{"class":49},[39,115683,108415],{"class":45},[39,115685,115686,115688,115690,115692,115694,115696,115698],{"class":41,"line":17876},[39,115687,4461],{"class":49},[39,115689,102446],{"class":45},[39,115691,27100],{"class":49},[39,115693,33498],{"class":56},[39,115695,1221],{"class":45},[39,115697,31878],{"class":56},[39,115699,115700],{"class":45},".frame_skip):\n",[39,115702,115703,115706,115708,115710,115712],{"class":41,"line":17882},[39,115704,115705],{"class":45},"            mujoco.mj_step(",[39,115707,31878],{"class":56},[39,115709,115526],{"class":45},[39,115711,31878],{"class":56},[39,115713,115531],{"class":45},[39,115715,115716],{"class":41,"line":17887},[39,115717,3458],{"emptyLinePlaceholder":1145},[39,115719,115720,115722,115724,115726],{"class":41,"line":17901},[39,115721,31900],{"class":56},[39,115723,114651],{"class":45},[39,115725,10533],{"class":49},[39,115727,56753],{"class":56},[39,115729,115730],{"class":41,"line":17906},[39,115731,3458],{"emptyLinePlaceholder":1145},[39,115733,115734,115736,115738,115740],{"class":41,"line":17911},[39,115735,111127],{"class":45},[39,115737,50],{"class":49},[39,115739,39928],{"class":56},[39,115741,115742],{"class":45},"._get_obs()\n",[39,115744,115745,115747,115749,115751],{"class":41,"line":17925},[39,115746,111232],{"class":45},[39,115748,50],{"class":49},[39,115750,39928],{"class":56},[39,115752,115753],{"class":45},"._get_reward()\n",[39,115755,115756],{"class":41,"line":17937},[39,115757,3458],{"emptyLinePlaceholder":1145},[39,115759,115760,115762,115764,115766,115768,115770],{"class":41,"line":17942},[39,115761,113082],{"class":45},[39,115763,50],{"class":49},[39,115765,39928],{"class":56},[39,115767,115315],{"class":45},[39,115769,31878],{"class":56},[39,115771,115393],{"class":45},[39,115773,115774,115776,115778,115780,115782,115784],{"class":41,"line":17955},[39,115775,113095],{"class":45},[39,115777,50],{"class":49},[39,115779,39928],{"class":56},[39,115781,115315],{"class":45},[39,115783,31878],{"class":56},[39,115785,115408],{"class":45},[39,115787,115788,115790,115792,115794,115797,115799],{"class":41,"line":17960},[39,115789,115413],{"class":45},[39,115791,50],{"class":49},[39,115793,110742],{"class":56},[39,115795,115796],{"class":45},"(np.linalg.norm(tip ",[39,115798,1732],{"class":49},[39,115800,115801],{"class":45}," target))\n",[39,115803,115804],{"class":41,"line":17965},[39,115805,3458],{"emptyLinePlaceholder":1145},[39,115807,115808,115811,115813,115815,115817],{"class":41,"line":17970},[39,115809,115810],{"class":45},"        terminated ",[39,115812,50],{"class":49},[39,115814,114634],{"class":45},[39,115816,2108],{"class":49},[39,115818,114639],{"class":56},[39,115820,115821,115824,115826,115828,115830,115832,115834],{"class":41,"line":17983},[39,115822,115823],{"class":45},"        truncated ",[39,115825,50],{"class":49},[39,115827,39928],{"class":56},[39,115829,114651],{"class":45},[39,115831,2768],{"class":49},[39,115833,39928],{"class":56},[39,115835,114658],{"class":45},[39,115837,115838,115841,115843,115845,115848],{"class":41,"line":17988},[39,115839,115840],{"class":45},"        info ",[39,115842,50],{"class":49},[39,115844,5506],{"class":45},[39,115846,115847],{"class":1319},"\"distance\"",[39,115849,115850],{"class":45},": dist}\n",[39,115852,115853,115855],{"class":41,"line":33688},[39,115854,15808],{"class":49},[39,115856,115857],{"class":45}," obs, reward, terminated, truncated, info\n",[39,115859,115860],{"class":41,"line":33694},[39,115861,3458],{"emptyLinePlaceholder":1145},[39,115863,115864],{"class":41,"line":33700},[39,115865,3458],{"emptyLinePlaceholder":1145},[39,115867,115868,115870,115872,115874,115876],{"class":41,"line":33706},[39,115869,33002],{"class":49},[39,115871,3031],{"class":3021},[39,115873,102343],{"class":45},[39,115875,96735],{"class":56},[39,115877,4797],{"class":45},[39,115879,115880,115883,115885],{"class":41,"line":33712},[39,115881,115882],{"class":45},"    env ",[39,115884,50],{"class":49},[39,115886,115887],{"class":45}," ReacherEnv()\n",[39,115889,115890,115893,115895,115898,115900,115902,115904],{"class":41,"line":33723},[39,115891,115892],{"class":45},"    obs, info ",[39,115894,50],{"class":49},[39,115896,115897],{"class":45}," env.reset(",[39,115899,115511],{"class":254},[39,115901,50],{"class":49},[39,115903,260],{"class":56},[39,115905,209],{"class":45},[39,115907,115908,115910,115912,115915],{"class":41,"line":33729},[39,115909,32354],{"class":56},[39,115911,1221],{"class":45},[39,115913,115914],{"class":1319},"\"initial obs shape:\"",[39,115916,115917],{"class":45},", obs.shape)\n",[39,115919,115920,115922,115924,115927],{"class":41,"line":33749},[39,115921,32354],{"class":56},[39,115923,1221],{"class":45},[39,115925,115926],{"class":1319},"\"initial info:\"",[39,115928,115929],{"class":45},", info)\n",[39,115931,115932],{"class":41,"line":33755},[39,115933,3458],{"emptyLinePlaceholder":1145},[39,115935,115936,115938,115940],{"class":41,"line":33766},[39,115937,111098],{"class":45},[39,115939,50],{"class":49},[39,115941,105706],{"class":56},[39,115943,115944,115946,115948,115950,115952,115954,115956],{"class":41,"line":33772},[39,115945,4259],{"class":49},[39,115947,32671],{"class":45},[39,115949,27100],{"class":49},[39,115951,33498],{"class":56},[39,115953,1221],{"class":45},[39,115955,1898],{"class":56},[39,115957,31841],{"class":45},[39,115959,115960,115962,115964],{"class":41,"line":33778},[39,115961,111167],{"class":45},[39,115963,50],{"class":49},[39,115965,115966],{"class":45}," env.action_space.sample()\n",[39,115968,115969,115972,115974],{"class":41,"line":33784},[39,115970,115971],{"class":45},"        obs, reward, terminated, truncated, info ",[39,115973,50],{"class":49},[39,115975,114360],{"class":45},[39,115977,115978,115980,115982],{"class":41,"line":33790},[39,115979,111242],{"class":45},[39,115981,10533],{"class":49},[39,115983,111247],{"class":45},[39,115985,115986,115988,115990,115992,115994,115997,115999,116001,116004,116006,116008,116011,116013,116015,116018,116020,116022,116024],{"class":41,"line":33796},[39,115987,33506],{"class":56},[39,115989,1221],{"class":45},[39,115991,111276],{"class":1319},[39,115993,111279],{"class":45},[39,115995,115996],{"class":1319},"\"reward:\"",[39,115998,13491],{"class":45},[39,116000,33073],{"class":56},[39,116002,116003],{"class":45},"(reward, ",[39,116005,68],{"class":56},[39,116007,111290],{"class":45},[39,116009,116010],{"class":1319},"\"distance:\"",[39,116012,13491],{"class":45},[39,116014,33073],{"class":56},[39,116016,116017],{"class":45},"(info[",[39,116019,115847],{"class":1319},[39,116021,113147],{"class":45},[39,116023,68],{"class":56},[39,116025,31552],{"class":45},[39,116027,116028,116030,116033,116036],{"class":41,"line":33802},[39,116029,3555],{"class":49},[39,116031,116032],{"class":45}," terminated ",[39,116034,116035],{"class":49},"or",[39,116037,116038],{"class":45}," truncated:\n",[39,116040,116041],{"class":41,"line":33808},[39,116042,116043],{"class":49},"            break\n",[39,116045,116046],{"class":41,"line":33828},[39,116047,3458],{"emptyLinePlaceholder":1145},[39,116049,116050,116052,116054,116056,116058,116060,116062,116064],{"class":41,"line":33834},[39,116051,32354],{"class":56},[39,116053,1221],{"class":45},[39,116055,111321],{"class":1319},[39,116057,13491],{"class":45},[39,116059,33073],{"class":56},[39,116061,111328],{"class":45},[39,116063,68],{"class":56},[39,116065,31552],{"class":45},[39,116067,116068],{"class":41,"line":33850},[39,116069,3458],{"emptyLinePlaceholder":1145},[39,116071,116072],{"class":41,"line":33856},[39,116073,3458],{"emptyLinePlaceholder":1145},[39,116075,116076,116078,116080,116082,116084],{"class":41,"line":33870},[39,116077,2596],{"class":49},[39,116079,32275],{"class":56},[39,116081,102504],{"class":49},[39,116083,102507],{"class":1319},[39,116085,4797],{"class":45},[39,116087,116088],{"class":41,"line":33876},[39,116089,102514],{"class":45},[19,116091,104515],{},[29,116093,116095],{"className":24878,"code":116094,"language":24880,"meta":34,"style":34},"touch ch8_gym_env.py\n",[36,116096,116097],{"__ignoreMap":34},[39,116098,116099,116101],{"class":41,"line":42},[39,116100,102228],{"class":3021},[39,116102,116103],{"class":1319}," ch8_gym_env.py\n",[19,116105,111389],{},[29,116107,116109],{"className":24878,"code":116108,"language":24880,"meta":34,"style":34},"python ch8_gym_env.py\n",[36,116110,116111],{"__ignoreMap":34},[39,116112,116113,116115],{"class":41,"line":42},[39,116114,33],{"class":3021},[39,116116,116103],{"class":1319},[1188,116118,102517],{"id":102517},[19,116120,116121],{},"继承 Gymnasium 环境：",[29,116123,116125],{"className":31,"code":116124,"language":33,"meta":34,"style":34},"class ReacherEnv(gym.Env):\n",[36,116126,116127],{"__ignoreMap":34},[39,116128,116129,116131,116133,116135,116137,116139,116141],{"class":41,"line":42},[39,116130,15750],{"class":49},[39,116132,115002],{"class":3021},[39,116134,1221],{"class":45},[39,116136,114485],{"class":3021},[39,116138,1758],{"class":45},[39,116140,115011],{"class":3021},[39,116142,31841],{"class":45},[19,116144,116145],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116147,116148],{},"初始化模型：",[29,116150,116152],{"className":31,"code":116151,"language":33,"meta":34,"style":34},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[36,116153,116154,116168],{"__ignoreMap":34},[39,116155,116156,116158,116160,116162,116164,116166],{"class":41,"line":42},[39,116157,31878],{"class":56},[39,116159,115062],{"class":45},[39,116161,50],{"class":49},[39,116163,102357],{"class":45},[39,116165,102259],{"class":56},[39,116167,209],{"class":45},[39,116169,116170,116172,116174,116176,116178,116180],{"class":41,"line":74},[39,116171,31878],{"class":56},[39,116173,115077],{"class":45},[39,116175,50],{"class":49},[39,116177,115082],{"class":45},[39,116179,31878],{"class":56},[39,116181,115087],{"class":45},[19,116183,116184,116185,116187],{},"这和前面章节一样，只是现在放到了类的 ",[36,116186,31884],{}," 里。",[19,116189,116190],{},"缓存 site ID：",[29,116192,116194],{"className":31,"code":116193,"language":33,"meta":34,"style":34},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[36,116195,116196,116210],{"__ignoreMap":34},[39,116197,116198,116200,116202,116204,116206,116208],{"class":41,"line":42},[39,116199,31878],{"class":56},[39,116201,115098],{"class":45},[39,116203,50],{"class":49},[39,116205,115103],{"class":45},[39,116207,90608],{"class":56},[39,116209,209],{"class":45},[39,116211,116212,116214,116216,116218,116220,116222],{"class":41,"line":74},[39,116213,31878],{"class":56},[39,116215,115119],{"class":45},[39,116217,50],{"class":49},[39,116219,115103],{"class":45},[39,116221,90608],{"class":56},[39,116223,209],{"class":45},[19,116225,116226],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116228,116229],{},"reset：",[29,116231,116233],{"className":31,"code":116232,"language":33,"meta":34,"style":34},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[36,116234,116235],{"__ignoreMap":34},[39,116236,116237,116239,116241,116243,116245,116247,116249,116251,116253,116255,116257,116259,116261,116263,116265,116267,116269],{"class":41,"line":42},[39,116238,33002],{"class":49},[39,116240,115467],{"class":3021},[39,116242,115470],{"class":45},[39,116244,1657],{"class":49},[39,116246,115475],{"class":45},[39,116248,1224],{"class":56},[39,116250,26166],{"class":49},[39,116252,39988],{"class":56},[39,116254,14620],{"class":49},[39,116256,39988],{"class":56},[39,116258,115488],{"class":45},[39,116260,115491],{"class":56},[39,116262,26166],{"class":49},[39,116264,39988],{"class":56},[39,116266,14620],{"class":49},[39,116268,39988],{"class":56},[39,116270,31841],{"class":45},[19,116272,116273,116275],{},[36,116274,71110],{}," 做四件事：",[1171,116277,116278,116281,116284,116287],{},[1174,116279,116280],{},"设置随机种子。",[1174,116282,116283],{},"重置 MuJoCo data。",[1174,116285,116286],{},"随机初始化关节角。",[1174,116288,116289],{},"返回初始观测和 info。",[19,116291,116292],{},"step：",[29,116294,116296],{"className":31,"code":116295,"language":33,"meta":34,"style":34},"def step(self, action):\n",[36,116297,116298],{"__ignoreMap":34},[39,116299,116300,116302,116304],{"class":41,"line":42},[39,116301,33002],{"class":49},[39,116303,115632],{"class":3021},[39,116305,115635],{"class":45},[19,116307,116308,116310],{},[36,116309,108079],{}," 做六件事：",[1171,116312,116313,116316,116322,116325,116328,116331],{},[1174,116314,116315],{},"检查并裁剪 action。",[1174,116317,116318,116319,29442],{},"写入 ",[36,116320,116321],{},"self.data.ctrl",[1174,116323,116324],{},"连续推进若干个 MuJoCo 物理步。",[1174,116326,116327],{},"计算新观测。",[1174,116329,116330],{},"计算奖励和结束条件。",[1174,116332,116333],{},"返回 Gymnasium 标准五元组。",[1188,116335,102653],{"id":102653},[29,116337,116339],{"className":31,"code":116338,"language":33,"meta":34,"style":34},"import gymnasium as gym\n",[36,116340,116341],{"__ignoreMap":34},[39,116342,116343,116345,116347,116349],{"class":41,"line":42},[39,116344,31447],{"class":49},[39,116346,114840],{"class":45},[39,116348,32438],{"class":49},[39,116350,114845],{"class":45},[19,116352,116353,116354,116356,116357,116360],{},"导入 Gymnasium，并起别名 ",[36,116355,114485],{},"。后面写 ",[36,116358,116359],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[29,116362,116364],{"className":31,"code":116363,"language":33,"meta":34,"style":34},"from gymnasium import spaces\n",[36,116365,116366],{"__ignoreMap":34},[39,116367,116368,116370,116372,116374],{"class":41,"line":42},[39,116369,31792],{"class":49},[39,116371,114840],{"class":45},[39,116373,31447],{"class":49},[39,116375,114872],{"class":45},[19,116377,116378,116379,116382],{},"导入空间定义工具。",[36,116380,116381],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[29,116384,116385],{"className":31,"code":116124,"language":33,"meta":34,"style":34},[36,116386,116387],{"__ignoreMap":34},[39,116388,116389,116391,116393,116395,116397,116399,116401],{"class":41,"line":42},[39,116390,15750],{"class":49},[39,116392,115002],{"class":3021},[39,116394,1221],{"class":45},[39,116396,114485],{"class":3021},[39,116398,1758],{"class":45},[39,116400,115011],{"class":3021},[39,116402,31841],{"class":45},[19,116404,116405,116406,116409,116410,116412,116413,101963,116415,116417],{},"定义一个类，名字叫 ",[36,116407,116408],{},"ReacherEnv","。括号里的 ",[36,116411,116359],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[36,116414,71110],{},[36,116416,108079],{}," 这两个核心方法。",[29,116419,116421],{"className":31,"code":116420,"language":33,"meta":34,"style":34},"metadata = {\"render_modes\": []}\n",[36,116422,116423],{"__ignoreMap":34},[39,116424,116425,116428,116430,116432,116434],{"class":41,"line":42},[39,116426,116427],{"class":45},"metadata ",[39,116429,50],{"class":49},[39,116431,5506],{"class":45},[39,116433,115025],{"class":1319},[39,116435,115028],{"class":45},[19,116437,116438],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[29,116440,116442],{"className":31,"code":116441,"language":33,"meta":34,"style":34},"def __init__(self) -> None:\n",[36,116443,116444],{"__ignoreMap":34},[39,116445,116446,116448,116450,116452,116454],{"class":41,"line":42},[39,116447,33002],{"class":49},[39,116449,31859],{"class":56},[39,116451,115041],{"class":45},[39,116453,96735],{"class":56},[39,116455,4797],{"class":45},[19,116457,116458,116460,116461,29442],{},[36,116459,31884],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[36,116462,116463],{},"env = ReacherEnv()",[29,116465,116467],{"className":31,"code":116466,"language":33,"meta":34,"style":34},"super().__init__()\n",[36,116468,116469],{"__ignoreMap":34},[39,116470,116471,116474,116476,116478],{"class":41,"line":42},[39,116472,116473],{"class":56},"super",[39,116475,18317],{"class":45},[39,116477,31884],{"class":56},[39,116479,3034],{"class":45},[19,116481,116482,116483,116485],{},"调用父类 ",[36,116484,116359],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[29,116487,116488],{"className":31,"code":116151,"language":33,"meta":34,"style":34},[36,116489,116490,116504],{"__ignoreMap":34},[39,116491,116492,116494,116496,116498,116500,116502],{"class":41,"line":42},[39,116493,31878],{"class":56},[39,116495,115062],{"class":45},[39,116497,50],{"class":49},[39,116499,102357],{"class":45},[39,116501,102259],{"class":56},[39,116503,209],{"class":45},[39,116505,116506,116508,116510,116512,116514,116516],{"class":41,"line":74},[39,116507,31878],{"class":56},[39,116509,115077],{"class":45},[39,116511,50],{"class":49},[39,116513,115082],{"class":45},[39,116515,31878],{"class":56},[39,116517,115087],{"class":45},[19,116519,116520,116521,116523,116524,101963,116527,116530],{},"把 MuJoCo 模型和状态保存到 ",[36,116522,31878],{}," 上。",[36,116525,116526],{},"self.model",[36,116528,116529],{},"self.data"," 表示这个环境对象自己的模型和状态。",[29,116532,116533],{"className":31,"code":116193,"language":33,"meta":34,"style":34},[36,116534,116535,116549],{"__ignoreMap":34},[39,116536,116537,116539,116541,116543,116545,116547],{"class":41,"line":42},[39,116538,31878],{"class":56},[39,116540,115098],{"class":45},[39,116542,50],{"class":49},[39,116544,115103],{"class":45},[39,116546,90608],{"class":56},[39,116548,209],{"class":45},[39,116550,116551,116553,116555,116557,116559,116561],{"class":41,"line":74},[39,116552,31878],{"class":56},[39,116554,115119],{"class":45},[39,116556,50],{"class":49},[39,116558,115103],{"class":45},[39,116560,90608],{"class":56},[39,116562,209],{"class":45},[19,116564,116565,116566,101963,116569,116572],{},"提前查好 tip 和 target 的 site ID。这样 ",[36,116567,116568],{},"_get_obs",[36,116570,116571],{},"_get_reward"," 里就不用每次按名字查找。",[29,116574,116576],{"className":31,"code":116575,"language":33,"meta":34,"style":34},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[36,116577,116578,116588,116598],{"__ignoreMap":34},[39,116579,116580,116582,116584,116586],{"class":41,"line":42},[39,116581,31878],{"class":56},[39,116583,114812],{"class":45},[39,116585,50],{"class":49},[39,116587,55481],{"class":56},[39,116589,116590,116592,116594,116596],{"class":41,"line":74},[39,116591,31878],{"class":56},[39,116593,115191],{"class":45},[39,116595,50],{"class":49},[39,116597,115196],{"class":56},[39,116599,116600,116602,116604,116606],{"class":41,"line":99},[39,116601,31878],{"class":56},[39,116603,114651],{"class":45},[39,116605,50],{"class":49},[39,116607,48388],{"class":56},[19,116609,116610,116613,116614,116617,116618,116621],{},[36,116611,116612],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[36,116615,116616],{},"max_steps"," 是一个 episode 最多运行多少步。",[36,116619,116620],{},"steps"," 记录当前 episode 已经走了多少步。",[29,116623,116624],{"className":31,"code":114690,"language":33,"meta":34,"style":34},[36,116625,116626],{"__ignoreMap":34},[39,116627,116628,116630,116632,116634,116636,116638,116640,116642,116644,116646,116648,116650,116652,116654,116656,116658,116660,116662,116664,116666],{"class":41,"line":42},[39,116629,31878],{"class":56},[39,116631,114699],{"class":45},[39,116633,50],{"class":49},[39,116635,114704],{"class":45},[39,116637,114707],{"class":254},[39,116639,114710],{"class":49},[39,116641,103348],{"class":56},[39,116643,13491],{"class":45},[39,116645,114717],{"class":254},[39,116647,50],{"class":49},[39,116649,103348],{"class":56},[39,116651,13491],{"class":45},[39,116653,97012],{"class":254},[39,116655,50],{"class":49},[39,116657,1221],{"class":45},[39,116659,63],{"class":56},[39,116661,114734],{"class":45},[39,116663,94550],{"class":254},[39,116665,50],{"class":49},[39,116667,114741],{"class":45},[19,116669,116670,116671,116674,116675,101963,116678,116681],{},"定义动作空间。",[36,116672,116673],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[36,116676,116677],{},"low=-1.0",[36,116679,116680],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[29,116683,116684],{"className":31,"code":114751,"language":33,"meta":34,"style":34},[36,116685,116686],{"__ignoreMap":34},[39,116687,116688,116690,116692,116694,116696,116698,116700,116702,116704,116706,116708,116710,116712,116714,116716,116718,116720,116722],{"class":41,"line":42},[39,116689,31878],{"class":56},[39,116691,114760],{"class":45},[39,116693,50],{"class":49},[39,116695,114704],{"class":45},[39,116697,114707],{"class":254},[39,116699,114710],{"class":49},[39,116701,114771],{"class":45},[39,116703,114717],{"class":254},[39,116705,50],{"class":49},[39,116707,114771],{"class":45},[39,116709,97012],{"class":254},[39,116711,50],{"class":49},[39,116713,1221],{"class":45},[39,116715,146],{"class":56},[39,116717,114734],{"class":45},[39,116719,94550],{"class":254},[39,116721,50],{"class":49},[39,116723,114741],{"class":45},[19,116725,116726,116727,116730,116731,116734],{},"定义观测空间。",[36,116728,116729],{},"shape=(10,)"," 表示观测是 10 个数。",[36,116732,116733],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[29,116736,116738],{"className":31,"code":116737,"language":33,"meta":34,"style":34},"def _get_obs(self) -> np.ndarray:\n",[36,116739,116740],{"__ignoreMap":34},[39,116741,116742,116744,116746],{"class":41,"line":42},[39,116743,33002],{"class":49},[39,116745,115301],{"class":3021},[39,116747,115304],{"class":45},[19,116749,116750,116751,116753],{},"定义内部函数，用来生成观测。函数名前面的 ",[36,116752,2190],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[29,116755,116757],{"className":31,"code":116756,"language":33,"meta":34,"style":34},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[36,116758,116759,116773],{"__ignoreMap":34},[39,116760,116761,116763,116765,116767,116769,116771],{"class":41,"line":42},[39,116762,112513],{"class":45},[39,116764,50],{"class":49},[39,116766,39928],{"class":56},[39,116768,115315],{"class":45},[39,116770,31878],{"class":56},[39,116772,115320],{"class":45},[39,116774,116775,116777,116779,116781,116783,116785],{"class":41,"line":74},[39,116776,112523],{"class":45},[39,116778,50],{"class":49},[39,116780,39928],{"class":56},[39,116782,115315],{"class":45},[39,116784,31878],{"class":56},[39,116786,115335],{"class":45},[19,116788,116789],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[29,116791,116793],{"className":31,"code":116792,"language":33,"meta":34,"style":34},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[36,116794,116795,116811],{"__ignoreMap":34},[39,116796,116797,116799,116801,116803,116805,116807,116809],{"class":41,"line":42},[39,116798,111799],{"class":45},[39,116800,50],{"class":49},[39,116802,115344],{"class":45},[39,116804,31878],{"class":56},[39,116806,115349],{"class":45},[39,116808,31878],{"class":56},[39,116810,115354],{"class":45},[39,116812,116813,116815],{"class":41,"line":74},[39,116814,18102],{"class":49},[39,116816,115361],{"class":45},[19,116818,116819,116820,116823,116824,116826],{},"拼接观测，并转换成 ",[36,116821,116822],{},"float32","。很多强化学习库默认使用 ",[36,116825,116822],{},"，所以这里主动转换。",[29,116828,116829],{"className":31,"code":116232,"language":33,"meta":34,"style":34},[36,116830,116831],{"__ignoreMap":34},[39,116832,116833,116835,116837,116839,116841,116843,116845,116847,116849,116851,116853,116855,116857,116859,116861,116863,116865],{"class":41,"line":42},[39,116834,33002],{"class":49},[39,116836,115467],{"class":3021},[39,116838,115470],{"class":45},[39,116840,1657],{"class":49},[39,116842,115475],{"class":45},[39,116844,1224],{"class":56},[39,116846,26166],{"class":49},[39,116848,39988],{"class":56},[39,116850,14620],{"class":49},[39,116852,39988],{"class":56},[39,116854,115488],{"class":45},[39,116856,115491],{"class":56},[39,116858,26166],{"class":49},[39,116860,39988],{"class":56},[39,116862,14620],{"class":49},[39,116864,39988],{"class":56},[39,116866,31841],{"class":45},[19,116868,116869,116870,116872,116873,116876],{},"定义 reset。",[36,116871,115511],{}," 用来控制随机数，保证实验可以复现。",[36,116874,116875],{},"options"," 用来接收额外配置，本章暂时不用。",[29,116878,116880],{"className":31,"code":116879,"language":33,"meta":34,"style":34},"super().reset(seed=seed)\n",[36,116881,116882],{"__ignoreMap":34},[39,116883,116884,116886,116888,116890,116892],{"class":41,"line":42},[39,116885,116473],{"class":56},[39,116887,115508],{"class":45},[39,116889,115511],{"class":254},[39,116891,50],{"class":49},[39,116893,115516],{"class":45},[19,116895,116896,116897,116900],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[36,116898,116899],{},"self.np_random"," 生成可复现的随机数。",[29,116902,116904],{"className":31,"code":116903,"language":33,"meta":34,"style":34},"mujoco.mj_resetData(self.model, self.data)\n",[36,116905,116906],{"__ignoreMap":34},[39,116907,116908,116911,116913,116915,116917],{"class":41,"line":42},[39,116909,116910],{"class":45},"mujoco.mj_resetData(",[39,116912,31878],{"class":56},[39,116914,115526],{"class":45},[39,116916,31878],{"class":56},[39,116918,115531],{"class":45},[19,116920,116921],{},"把 MuJoCo 状态重置到默认状态。",[29,116923,116925],{"className":31,"code":116924,"language":33,"meta":34,"style":34},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[36,116926,116927],{"__ignoreMap":34},[39,116928,116929,116931,116933,116935,116937,116939,116941,116943,116945,116947,116949,116951,116953,116955,116957,116959,116961],{"class":41,"line":42},[39,116930,31878],{"class":56},[39,116932,115542],{"class":45},[39,116934,50],{"class":49},[39,116936,39928],{"class":56},[39,116938,115549],{"class":45},[39,116940,114707],{"class":254},[39,116942,114710],{"class":49},[39,116944,87264],{"class":56},[39,116946,13491],{"class":45},[39,116948,114717],{"class":254},[39,116950,50],{"class":49},[39,116952,87264],{"class":56},[39,116954,13491],{"class":45},[39,116956,32551],{"class":254},[39,116958,50],{"class":49},[39,116960,31878],{"class":56},[39,116962,115574],{"class":45},[19,116964,116286,116965,116968,116969,116972,116973,116975],{},[36,116966,116967],{},"[:]"," 表示修改整个数组。",[36,116970,116971],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[36,116974,103095],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[29,116977,116979],{"className":31,"code":116978,"language":33,"meta":34,"style":34},"self.data.qvel[:] = 0.0\n",[36,116980,116981],{"__ignoreMap":34},[39,116982,116983,116985,116987,116989],{"class":41,"line":42},[39,116984,31878],{"class":56},[39,116986,115581],{"class":45},[39,116988,50],{"class":49},[39,116990,105706],{"class":56},[19,116992,116993],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[29,116995,116997],{"className":31,"code":116996,"language":33,"meta":34,"style":34},"self.steps = 0\nreturn self._get_obs(), {}\n",[36,116998,116999,117009],{"__ignoreMap":34},[39,117000,117001,117003,117005,117007],{"class":41,"line":42},[39,117002,31878],{"class":56},[39,117004,114651],{"class":45},[39,117006,50],{"class":49},[39,117008,48388],{"class":56},[39,117010,117011,117013,117015],{"class":41,"line":74},[39,117012,18102],{"class":49},[39,117014,39928],{"class":56},[39,117016,115621],{"class":45},[19,117018,117019],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[29,117021,117022],{"className":31,"code":116295,"language":33,"meta":34,"style":34},[36,117023,117024],{"__ignoreMap":34},[39,117025,117026,117028,117030],{"class":41,"line":42},[39,117027,33002],{"class":49},[39,117029,115632],{"class":3021},[39,117031,115635],{"class":45},[19,117033,117034],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[29,117036,117038],{"className":31,"code":117037,"language":33,"meta":34,"style":34},"action = np.asarray(action, dtype=np.float32)\n",[36,117039,117040],{"__ignoreMap":34},[39,117041,117042,117044,117046,117048,117050,117052],{"class":41,"line":42},[39,117043,108387],{"class":45},[39,117045,50],{"class":49},[39,117047,115644],{"class":45},[39,117049,94550],{"class":254},[39,117051,50],{"class":49},[39,117053,114741],{"class":45},[19,117055,117056,117057,29442],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[36,117058,116822],{},[29,117060,117062],{"className":31,"code":117061,"language":33,"meta":34,"style":34},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[36,117063,117064],{"__ignoreMap":34},[39,117065,117066,117068,117070,117072,117074,117076,117078],{"class":41,"line":42},[39,117067,108387],{"class":45},[39,117069,50],{"class":49},[39,117071,108392],{"class":45},[39,117073,31878],{"class":56},[39,117075,115663],{"class":45},[39,117077,31878],{"class":56},[39,117079,115668],{"class":45},[19,117081,117082],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[29,117084,117086],{"className":31,"code":117085,"language":33,"meta":34,"style":34},"self.data.ctrl[:] = action\n",[36,117087,117088],{"__ignoreMap":34},[39,117089,117090,117092,117094,117096],{"class":41,"line":42},[39,117091,31878],{"class":56},[39,117093,115679],{"class":45},[39,117095,50],{"class":49},[39,117097,108415],{"class":45},[19,117099,117100],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[29,117102,117104],{"className":31,"code":117103,"language":33,"meta":34,"style":34},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[36,117105,117106,117122],{"__ignoreMap":34},[39,117107,117108,117110,117112,117114,117116,117118,117120],{"class":41,"line":42},[39,117109,4083],{"class":49},[39,117111,102446],{"class":45},[39,117113,27100],{"class":49},[39,117115,33498],{"class":56},[39,117117,1221],{"class":45},[39,117119,31878],{"class":56},[39,117121,115700],{"class":45},[39,117123,117124,117127,117129,117131,117133],{"class":41,"line":74},[39,117125,117126],{"class":45},"    mujoco.mj_step(",[39,117128,31878],{"class":56},[39,117130,115526],{"class":45},[39,117132,31878],{"class":56},[39,117134,115531],{"class":45},[19,117136,117137,117138,117141,117142,117144,117145,29442],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[36,117139,117140],{},"frame_skip=5","，所以外部调用一次 ",[36,117143,114822],{},"，内部实际执行 5 次 ",[36,117146,102160],{},[29,117148,117150],{"className":31,"code":117149,"language":33,"meta":34,"style":34},"self.steps += 1\n",[36,117151,117152],{"__ignoreMap":34},[39,117153,117154,117156,117158,117160],{"class":41,"line":42},[39,117155,31878],{"class":56},[39,117157,114651],{"class":45},[39,117159,10533],{"class":49},[39,117161,56753],{"class":56},[19,117163,117164],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[29,117166,117168],{"className":31,"code":117167,"language":33,"meta":34,"style":34},"obs = self._get_obs()\nreward = self._get_reward()\n",[36,117169,117170,117180],{"__ignoreMap":34},[39,117171,117172,117174,117176,117178],{"class":41,"line":42},[39,117173,111799],{"class":45},[39,117175,50],{"class":49},[39,117177,39928],{"class":56},[39,117179,115742],{"class":45},[39,117181,117182,117184,117186,117188],{"class":41,"line":74},[39,117183,111950],{"class":45},[39,117185,50],{"class":49},[39,117187,39928],{"class":56},[39,117189,115753],{"class":45},[19,117191,117192],{},"计算新的观测和奖励。",[29,117194,117196],{"className":31,"code":117195,"language":33,"meta":34,"style":34},"dist = float(np.linalg.norm(tip - target))\n",[36,117197,117198],{"__ignoreMap":34},[39,117199,117200,117202,117204,117206,117208,117210],{"class":41,"line":42},[39,117201,112541],{"class":45},[39,117203,50],{"class":49},[39,117205,110742],{"class":56},[39,117207,115796],{"class":45},[39,117209,1732],{"class":49},[39,117211,115801],{"class":45},[19,117213,117214],{},"计算末端到目标的距离，并转换成 Python float。",[29,117216,117217],{"className":31,"code":114622,"language":33,"meta":34,"style":34},[36,117218,117219,117231],{"__ignoreMap":34},[39,117220,117221,117223,117225,117227,117229],{"class":41,"line":42},[39,117222,114629],{"class":45},[39,117224,50],{"class":49},[39,117226,114634],{"class":45},[39,117228,2108],{"class":49},[39,117230,114639],{"class":56},[39,117232,117233,117235,117237,117239,117241,117243,117245],{"class":41,"line":74},[39,117234,114644],{"class":45},[39,117236,50],{"class":49},[39,117238,39928],{"class":56},[39,117240,114651],{"class":45},[39,117242,2768],{"class":49},[39,117244,39928],{"class":56},[39,117246,114658],{"class":45},[19,117248,117249],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[29,117251,117253],{"className":31,"code":117252,"language":33,"meta":34,"style":34},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[36,117254,117255,117268],{"__ignoreMap":34},[39,117256,117257,117260,117262,117264,117266],{"class":41,"line":42},[39,117258,117259],{"class":45},"info ",[39,117261,50],{"class":49},[39,117263,5506],{"class":45},[39,117265,115847],{"class":1319},[39,117267,115850],{"class":45},[39,117269,117270,117272],{"class":41,"line":74},[39,117271,18102],{"class":49},[39,117273,115857],{"class":45},[19,117275,117276,117279],{},[36,117277,117278],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[29,117281,117283],{"className":31,"code":117282,"language":33,"meta":34,"style":34},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[36,117284,117285,117294],{"__ignoreMap":34},[39,117286,117287,117290,117292],{"class":41,"line":42},[39,117288,117289],{"class":45},"env ",[39,117291,50],{"class":49},[39,117293,115887],{"class":45},[39,117295,117296,117298,117300,117302,117304,117306,117308],{"class":41,"line":74},[39,117297,114345],{"class":45},[39,117299,50],{"class":49},[39,117301,115897],{"class":45},[39,117303,115511],{"class":254},[39,117305,50],{"class":49},[39,117307,260],{"class":56},[39,117309,209],{"class":45},[19,117311,117312,117313,117316],{},"创建环境并重置。",[36,117314,117315],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[29,117318,117320],{"className":31,"code":117319,"language":33,"meta":34,"style":34},"action = env.action_space.sample()\n",[36,117321,117322],{"__ignoreMap":34},[39,117323,117324,117326,117328],{"class":41,"line":42},[39,117325,108387],{"class":45},[39,117327,50],{"class":49},[39,117329,115966],{"class":45},[19,117331,117332],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117334,103261],{"id":103260},[19,117336,106429],{},[29,117338,117341],{"className":117339,"code":117340,"language":6244,"meta":34},[6242],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[36,117342,117340],{"__ignoreMap":34},[19,117344,117345],{},"这个环境已经具备强化学习环境的基本结构。",[19,117347,117348],{},"主函数里使用随机动作：",[29,117350,117351],{"className":31,"code":117319,"language":33,"meta":34,"style":34},[36,117352,117353],{"__ignoreMap":34},[39,117354,117355,117357,117359],{"class":41,"line":42},[39,117356,108387],{"class":45},[39,117358,50],{"class":49},[39,117360,115966],{"class":45},[19,117362,117363],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117365,103293],{"id":103292},[1171,117367,117368,117371,117377,117386,117395,117404,117410],{},[1174,117369,117370],{},"运行程序。",[1174,117372,117373,117374,29442],{},"确认 ",[36,117375,117376],{},"obs.shape == (10,)",[1174,117378,112126,117379,117382,117383,29442],{},[36,117380,117381],{},"env.action_space","，应类似 ",[36,117384,117385],{},"Box(-1.0, 1.0, (2,), float32)",[1174,117387,106530,117388,117391,117392,29442],{},[36,117389,117390],{},"self.max_steps = 10","，确认环境会更快 ",[36,117393,117394],{},"truncated=True",[1174,117396,103356,117397,103359,117400,117403],{},[36,117398,117399],{},"terminated = dist \u003C 0.05",[36,117401,117402],{},"dist \u003C 0.2","，观察是否更容易结束。",[1174,117405,103356,117406,117409],{},[36,117407,117408],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[1174,117411,117412,117413,117415,117416,117419],{},"在 ",[36,117414,117278],{}," 里加入 ",[36,117417,117418],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117421,103398],{"id":103397},[1188,117423,117425],{"id":117424},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117427,117428,117429,117431],{},"Gymnasium 的 ",[36,117430,108079],{}," 返回 5 个值:",[29,117433,117435],{"className":31,"code":117434,"language":33,"meta":34,"style":34},"obs, reward, terminated, truncated, info\n",[36,117436,117437],{"__ignoreMap":34},[39,117438,117439],{"class":41,"line":42},[39,117440,117434],{"class":45},[19,117442,117443],{},"不是旧 Gym 的 4 个值。",[1188,117445,117447,117450],{"id":117446},"datactrl-action-维度错误",[36,117448,117449],{},"data.ctrl[:] = action"," 维度错误",[19,117452,103468],{},[29,117454,117456],{"className":31,"code":117455,"language":33,"meta":34,"style":34},"print(self.model.nu)\nprint(action.shape)\n",[36,117457,117458,117469],{"__ignoreMap":34},[39,117459,117460,117462,117464,117466],{"class":41,"line":42},[39,117461,31470],{"class":56},[39,117463,1221],{"class":45},[39,117465,31878],{"class":56},[39,117467,117468],{"class":45},".model.nu)\n",[39,117470,117471,117473],{"class":41,"line":74},[39,117472,31470],{"class":56},[39,117474,117475],{"class":45},"(action.shape)\n",[19,117477,117478],{},"两者必须匹配。",[1188,117480,117482],{"id":117481},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117484,103407],{},[29,117486,117488],{"className":31,"code":117487,"language":33,"meta":34,"style":34},"mujoco.mj_forward(self.model, self.data)\n",[36,117489,117490],{"__ignoreMap":34},[39,117491,117492,117495,117497,117499,117501],{"class":41,"line":42},[39,117493,117494],{"class":45},"mujoco.mj_forward(",[39,117496,31878],{"class":56},[39,117498,115526],{"class":45},[39,117500,31878],{"class":56},[39,117502,115531],{"class":45},[1188,117504,117506,117508],{"id":117505},"observation_space-维度和-obs-不一致",[36,117507,114545],{}," 维度和 obs 不一致",[19,117510,103520],{},[29,117512,117514],{"className":31,"code":117513,"language":33,"meta":34,"style":34},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[36,117515,117516,117526,117533],{"__ignoreMap":34},[39,117517,117518,117520,117522,117524],{"class":41,"line":42},[39,117519,111799],{"class":45},[39,117521,50],{"class":49},[39,117523,39928],{"class":56},[39,117525,115742],{"class":45},[39,117527,117528,117530],{"class":41,"line":74},[39,117529,31470],{"class":56},[39,117531,117532],{"class":45},"(obs.shape)\n",[39,117534,117535,117537,117539,117541],{"class":41,"line":99},[39,117536,31470],{"class":56},[39,117538,1221],{"class":45},[39,117540,31878],{"class":56},[39,117542,117543],{"class":45},".observation_space.shape)\n",[19,117545,117546],{},"两者必须一致。本章观测是：",[29,117548,117551],{"className":117549,"code":117550,"language":6244,"meta":34},[6242],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[36,117552,117550],{"__ignoreMap":34},[1188,117554,117556],{"id":117555},"action-超过范围","action 超过范围",[19,117558,117559],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[29,117561,117562],{"className":31,"code":117061,"language":33,"meta":34,"style":34},[36,117563,117564],{"__ignoreMap":34},[39,117565,117566,117568,117570,117572,117574,117576,117578],{"class":41,"line":42},[39,117567,108387],{"class":45},[39,117569,50],{"class":49},[39,117571,108392],{"class":45},[39,117573,31878],{"class":56},[39,117575,115663],{"class":45},[39,117577,31878],{"class":56},[39,117579,115668],{"class":45},[19,117581,117582,117583,29442],{},"这能避免无效动作直接写入 ",[36,117584,102021],{},[1188,117586,117588],{"id":117587},"忘记返回-info","忘记返回 info",[19,117590,117428,117591,101963,117593,117595],{},[36,117592,71110],{},[36,117594,108079],{}," 都会返回 info：",[29,117597,117598],{"className":31,"code":114338,"language":33,"meta":34,"style":34},[36,117599,117600,117608],{"__ignoreMap":34},[39,117601,117602,117604,117606],{"class":41,"line":42},[39,117603,114345],{"class":45},[39,117605,50],{"class":49},[39,117607,114350],{"class":45},[39,117609,117610,117612,117614],{"class":41,"line":74},[39,117611,114355],{"class":45},[39,117613,50],{"class":49},[39,117615,114360],{"class":45},[19,117617,117618,117619,29442],{},"即使暂时没有额外信息，也返回 ",[36,117620,33514],{},[14,117622,117624],{"id":117623},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,117626,117627],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[1171,117629,117630,117633,117636,117639,117642,117645],{},[1174,117631,117632],{},"更稳定的 reward。",[1174,117634,117635],{},"合理的 episode 长度。",[1174,117637,117638],{},"可重复的随机目标采样。",[1174,117640,117641],{},"render 接口。",[1174,117643,117644],{},"环境注册代码。",[1174,117646,117647],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,117649,117650],{},"如果只是自己写训练循环，最小形式是：",[29,117652,117654],{"className":31,"code":117653,"language":33,"meta":34,"style":34},"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",[36,117655,117656,117664,117680,117684,117700,117709,117718,117728],{"__ignoreMap":34},[39,117657,117658,117660,117662],{"class":41,"line":42},[39,117659,117289],{"class":45},[39,117661,50],{"class":49},[39,117663,115887],{"class":45},[39,117665,117666,117668,117670,117672,117674,117676,117678],{"class":41,"line":74},[39,117667,114345],{"class":45},[39,117669,50],{"class":49},[39,117671,115897],{"class":45},[39,117673,115511],{"class":254},[39,117675,50],{"class":49},[39,117677,260],{"class":56},[39,117679,209],{"class":45},[39,117681,117682],{"class":41,"line":99},[39,117683,3458],{"emptyLinePlaceholder":1145},[39,117685,117686,117688,117690,117692,117694,117696,117698],{"class":41,"line":106},[39,117687,4083],{"class":49},[39,117689,102446],{"class":45},[39,117691,27100],{"class":49},[39,117693,33498],{"class":56},[39,117695,1221],{"class":45},[39,117697,7466],{"class":56},[39,117699,31841],{"class":45},[39,117701,117702,117705,117707],{"class":41,"line":112},[39,117703,117704],{"class":45},"    action ",[39,117706,50],{"class":49},[39,117708,115966],{"class":45},[39,117710,117711,117714,117716],{"class":41,"line":118},[39,117712,117713],{"class":45},"    obs, reward, terminated, truncated, info ",[39,117715,50],{"class":49},[39,117717,114360],{"class":45},[39,117719,117720,117722,117724,117726],{"class":41,"line":413},[39,117721,4159],{"class":49},[39,117723,116032],{"class":45},[39,117725,116035],{"class":49},[39,117727,116038],{"class":45},[39,117729,117730,117733,117735],{"class":41,"line":419},[39,117731,117732],{"class":45},"        obs, info ",[39,117734,50],{"class":49},[39,117736,114350],{"class":45},[14,117738,117740],{"id":117739},"_9本章小结","9.本章小结",[19,117742,117743],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[29,117745,117748],{"className":117746,"code":117747,"language":6244,"meta":34},[6242],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[36,117749,117747],{"__ignoreMap":34},[19,117751,117752],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1133,117754,117755],{},"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":34,"searchDepth":74,"depth":74,"links":117757},[117758,117759,117760,117767,117771,117772,117773,117783,117784],{"id":101591,"depth":74,"text":101592},{"id":101714,"depth":74,"text":101715},{"id":101989,"depth":74,"text":101990,"children":117761},[117762,117764,117766],{"id":114569,"depth":99,"text":117763},"terminated 和 truncated 的区别",{"id":114672,"depth":99,"text":117765},"observation_space 和 action_space",{"id":114799,"depth":99,"text":114800},{"id":102197,"depth":74,"text":102198,"children":117768},[117769,117770],{"id":102517,"depth":99,"text":102517},{"id":102653,"depth":99,"text":102653},{"id":103260,"depth":74,"text":103261},{"id":103292,"depth":74,"text":103293},{"id":103397,"depth":74,"text":103398,"children":117774},[117775,117776,117778,117779,117781,117782],{"id":117424,"depth":99,"text":117425},{"id":117446,"depth":99,"text":117777},"data.ctrl[:] = action 维度错误",{"id":117481,"depth":99,"text":117482},{"id":117505,"depth":99,"text":117780},"observation_space 维度和 obs 不一致",{"id":117555,"depth":99,"text":117556},{"id":117587,"depth":99,"text":117588},{"id":117623,"depth":74,"text":117624},{"id":117739,"depth":74,"text":117740},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114322,"description":34},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117791,"title":117792,"body":117793,"description":118216,"extension":1143,"meta":118217,"navigation":1145,"path":118218,"seo":118219,"stem":118220,"__hash__":118221},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117794,"toc":118206},[117795,117799,117802,117805,117825,117831,117837,117847,117850,117853,117873,117876,117880,117883,117889,117892,117906,117909,117912,117986,117989,117995,117998,118021,118024,118074,118077,118083,118086,118089,118092,118111,118114,118120,118123,118126,118129,118149,118152,118155,118158,118203],[10,117796,117798],{"id":117797},"mujoco-学习","MuJoCo 学习",[19,117800,117801],{},"初版",[19,117803,117804],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[1171,117806,117807,117810,117813,117822],{},[1174,117808,117809],{},"MuJoCo 模型文件在描述什么。",[1174,117811,117812],{},"Python 代码怎样读取和推进仿真。",[1174,117814,117815,1425,117817,1425,117819,117821],{},[36,117816,104975],{},[36,117818,105305],{},[36,117820,105308],{}," 这些数组为什么重要。",[1174,117823,117824],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117826,117827,117828,117830],{},"默认环境为 Fedora 44、Python >= 3.10、",[36,117829,101972],{}," 官方 Python bindings。",[19,117832,117833,117834,117836],{},"注意：本文禁止使用 ",[36,117835,101957],{},"。所有示例均使用：",[29,117838,117839],{"className":31,"code":102523,"language":33,"meta":34,"style":34},[36,117840,117841],{"__ignoreMap":34},[39,117842,117843,117845],{"class":41,"line":42},[39,117844,31447],{"class":49},[39,117846,102246],{"class":45},[14,117848,117849],{"id":117849},"适合谁阅读",[19,117851,117852],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[1171,117854,117855,117858,117861,117864],{},[1174,117856,117857],{},"没学过 MuJoCo，只会一点 Python。",[1174,117859,117860],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[1174,117862,117863],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[1174,117865,117866,117867,117869,117870,117872],{},"以前接触过 ",[36,117868,101957],{},"，现在想迁移到官方 ",[36,117871,101966],{}," Python bindings。",[19,117874,117875],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117877,117879],{"id":117878},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117881,117882],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[29,117884,117887],{"className":117885,"code":117886,"language":6244,"meta":34},[6242],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[36,117888,117886],{"__ignoreMap":34},[19,117890,117891],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[1171,117893,117894,117897,117900,117903],{},[1174,117895,117896],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[1174,117898,117899],{},"快速测试控制算法，不必一开始就上真实机器人。",[1174,117901,117902],{},"生成强化学习环境。",[1174,117904,117905],{},"采集状态、动作、图像、奖励等训练数据。",[14,117907,117908],{"id":117908},"学习前的心智模型",[19,117910,117911],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[1352,117913,117914,117926],{},[1355,117915,117916],{},[1358,117917,117918,117921,117924],{},[1361,117919,117920],{"align":24792},"部分",[1361,117922,117923],{"align":24792},"负责什么",[1361,117925,22243],{"align":24792},[1398,117927,117928,117939,117951,117963,117975],{},[1358,117929,117930,117933,117936],{},[1403,117931,117932],{"align":24792},"MJCF XML",[1403,117934,117935],{"align":24792},"定义世界和机器人结构",[1403,117937,117938],{"align":24792},"地面、盒子、关节、电机、摄像头",[1358,117940,117941,117945,117948],{},[1403,117942,117943],{"align":24792},[36,117944,101654],{},[1403,117946,117947],{"align":24792},"编译后的静态模型",[1403,117949,117950],{"align":24792},"有几个关节、有几个电机、时间步长是多少",[1358,117952,117953,117957,117960],{},[1403,117954,117955],{"align":24792},[36,117956,101664],{},[1403,117958,117959],{"align":24792},"运行中的动态状态",[1403,117961,117962],{"align":24792},"当前时间、位置、速度、电机输入",[1358,117964,117965,117969,117972],{},[1403,117966,117967],{"align":24792},[36,117968,102160],{},[1403,117970,117971],{"align":24792},"推进一步物理仿真",[1403,117973,117974],{"align":24792},"根据重力、力、碰撞更新状态",[1358,117976,117977,117980,117983],{},[1403,117978,117979],{"align":24792},"Viewer \u002F Renderer",[1403,117981,117982],{"align":24792},"把仿真显示出来",[1403,117984,117985],{"align":24792},"打开窗口或保存图片",[19,117987,117988],{},"一句话总结：",[29,117990,117993],{"className":117991,"code":117992,"language":6244,"meta":34},[6242],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[36,117994,117992],{"__ignoreMap":34},[19,117996,117997],{},"参考来源：",[2205,117999,118000,118007,118014],{},[1174,118001,118002,118003],{},"MuJoCo Python 官方文档：",[46,118004,118005],{"href":118005,"rel":118006},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24921],[1174,118008,118009,118010],{},"MuJoCo XML Reference：",[46,118011,118012],{"href":118012,"rel":118013},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24921],[1174,118015,118016,118017],{},"MuJoCo Overview：",[46,118018,118019],{"href":118019,"rel":118020},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24921],[14,118022,118023],{"id":118023},"章节目录",[1171,118025,118026,118032,118038,118044,118050,118056,118062,118068],{},[1174,118027,118028],{},[46,118029,118031],{"href":118030},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[1174,118033,118034],{},[46,118035,118037],{"href":118036},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[1174,118039,118040],{},[46,118041,118043],{"href":118042},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[1174,118045,118046],{},[46,118047,118049],{"href":118048},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[1174,118051,118052],{},[46,118053,118055],{"href":118054},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[1174,118057,118058],{},[46,118059,118061],{"href":118060},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[1174,118063,118064],{},[46,118065,118067],{"href":118066},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[1174,118069,118070],{},[46,118071,118073],{"href":118072},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118075,118076],{"id":118076},"推荐学习路线",[29,118078,118081],{"className":118079,"code":118080,"language":6244,"meta":34},[6242],"环境安装\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",[36,118082,118080],{"__ignoreMap":34},[19,118084,118085],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118087,118088],{"id":118088},"建议的目录结构",[19,118090,118091],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[29,118093,118095],{"className":24878,"code":118094,"language":24880,"meta":34,"style":34},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[36,118096,118097,118105],{"__ignoreMap":34},[39,118098,118099,118101,118103],{"class":41,"line":42},[39,118100,102211],{"class":3021},[39,118102,30273],{"class":56},[39,118104,102216],{"class":1319},[39,118106,118107,118109],{"class":41,"line":74},[39,118108,102221],{"class":56},[39,118110,102216],{"class":1319},[19,118112,118113],{},"每一章的代码都单独保存：",[29,118115,118118],{"className":118116,"code":118117,"language":6244,"meta":34},[6242],"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",[36,118119,118117],{"__ignoreMap":34},[19,118121,118122],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118124,118125],{"id":118125},"学习方法",[19,118127,118128],{},"每章建议按这个顺序操作：",[1171,118130,118131,118134,118137,118140,118143,118146],{},[1174,118132,118133],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[1174,118135,118136],{},"复制最小可运行代码，保存成指定文件。",[1174,118138,118139],{},"运行代码，确认没有报错。",[1174,118141,118142],{},"对照“运行结果说明”理解输出。",[1174,118144,118145],{},"做“验证步骤”，主动改一两个参数。",[1174,118147,118148],{},"遇到报错先看“常见错误与解决方案”。",[19,118150,118151],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118153,118154],{"id":118154},"全局排错顺序",[19,118156,118157],{},"遇到问题时，按下面顺序查：",[1171,118159,118160,118166,118172,118177,118180,118183,118190,118200],{},[1174,118161,118162,118163],{},"Python 环境是否激活：",[36,118164,118165],{},"which python",[1174,118167,118168,118169],{},"MuJoCo 是否能导入：",[36,118170,118171],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[1174,118173,118174,118175],{},"是否误装了 ",[36,118176,101957],{},[1174,118178,118179],{},"XML 标签是否闭合、属性是否拼写正确",[1174,118181,118182],{},"actuator 引用的 joint 名字是否存在",[1174,118184,118185,118187,118188],{},[36,118186,102021],{}," 的长度是否等于 ",[36,118189,103103],{},[1174,118191,106530,118192,83593,118194,118196,118197],{},[36,118193,104975],{},[36,118195,105305],{}," 后是否调用了 ",[36,118198,118199],{},"mujoco.mj_forward",[1174,118201,118202],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1133,118204,118205],{},"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":34,"searchDepth":74,"depth":74,"links":118207},[118208,118209,118210,118211,118212,118213,118214,118215],{"id":117849,"depth":74,"text":117849},{"id":117878,"depth":74,"text":117879},{"id":117908,"depth":74,"text":117908},{"id":118023,"depth":74,"text":118023},{"id":118076,"depth":74,"text":118076},{"id":118088,"depth":74,"text":118088},{"id":118125,"depth":74,"text":118125},{"id":118154,"depth":74,"text":118154},"仿真搭建。",{"category":24434},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117792,"description":118216},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118223,"title":118224,"body":118225,"description":1142,"extension":1143,"meta":118680,"navigation":1145,"path":118681,"seo":118682,"stem":118683,"__hash__":118684},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118226,"toc":118678},[118227,118230,118233,118239,118675],[10,118228,118224],{"id":118229},"_1-最常用的基本操作更新",[19,118231,118232],{},"装linux系统教程：",[19,118234,118235],{},[46,118236,118237],{"href":118237,"rel":118238},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24921],[29,118240,118244],{"className":118241,"code":118242,"language":118243,"meta":34,"style":34},"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",[36,118245,118246,118251,118256,118265,118270,118279,118284,118304,118309,118320,118325,118334,118339,118367,118372,118391,118396,118415,118419,118424,118440,118444,118449,118479,118483,118488,118504,118508,118513,118528,118532,118537,118553,118557,118562,118574,118586,118590,118595,118612,118616,118621,118639,118643,118648,118657,118661,118666],{"__ignoreMap":34},[39,118247,118248],{"class":41,"line":42},[39,118249,118250],{"class":102},"#更新相关的知识\n",[39,118252,118253],{"class":41,"line":74},[39,118254,118255],{"class":102},"# 更新软件包列表（从服务器获取最新软件信息）\n",[39,118257,118258,118260,118263],{"class":41,"line":99},[39,118259,25633],{"class":3021},[39,118261,118262],{"class":1319}," apt",[39,118264,27299],{"class":1319},[39,118266,118267],{"class":41,"line":106},[39,118268,118269],{"class":102},"# 升级所有可更新的软件包（不删除旧包）\n",[39,118271,118272,118274,118276],{"class":41,"line":112},[39,118273,25633],{"class":3021},[39,118275,118262],{"class":1319},[39,118277,118278],{"class":1319}," upgrade\n",[39,118280,118281],{"class":41,"line":118},[39,118282,118283],{"class":102},"#更新和升级软件包\n",[39,118285,118286,118288,118290,118293,118295,118297,118299,118302],{"class":41,"line":413},[39,118287,25633],{"class":3021},[39,118289,118262],{"class":1319},[39,118291,118292],{"class":1319}," update",[39,118294,27247],{"class":45},[39,118296,25633],{"class":3021},[39,118298,118262],{"class":1319},[39,118300,118301],{"class":1319}," upgrade",[39,118303,101926],{"class":56},[39,118305,118306],{"class":41,"line":419},[39,118307,118308],{"class":102},"#列出可更新的软件包及版本信息\n",[39,118310,118311,118314,118317],{"class":41,"line":425},[39,118312,118313],{"class":3021},"apt",[39,118315,118316],{"class":1319}," list",[39,118318,118319],{"class":56}," --upgradable\n",[39,118321,118322],{"class":41,"line":443},[39,118323,118324],{"class":102},"#彻底升级（处理依赖关系，可能删除旧包）\n",[39,118326,118327,118329,118331],{"class":41,"line":449},[39,118328,25633],{"class":3021},[39,118330,118262],{"class":1319},[39,118332,118333],{"class":1319}," full-upgrade\n",[39,118335,118336],{"class":41,"line":455},[39,118337,118338],{"class":102},"#设置指定版本\n",[39,118340,118341,118343,118345,118347,118349,118352,118354,118356,118358,118360,118363,118365],{"class":41,"line":461},[39,118342,25633],{"class":3021},[39,118344,118262],{"class":1319},[39,118346,24890],{"class":1319},[39,118348,29959],{"class":49},[39,118350,118351],{"class":1319},"package_nam",[39,118353,1290],{"class":45},[39,118355,2158],{"class":49},[39,118357,50],{"class":1319},[39,118359,2108],{"class":49},[39,118361,118362],{"class":1319},"version_numbe",[39,118364,1869],{"class":45},[39,118366,52361],{"class":49},[39,118368,118369],{"class":41,"line":475},[39,118370,118371],{"class":102},"#只安装软件包不升级\n",[39,118373,118374,118376,118378,118380,118382,118384,118386,118388],{"class":41,"line":665},[39,118375,25633],{"class":3021},[39,118377,118262],{"class":1319},[39,118379,24890],{"class":1319},[39,118381,29959],{"class":49},[39,118383,118351],{"class":1319},[39,118385,1290],{"class":45},[39,118387,2158],{"class":49},[39,118389,118390],{"class":56}," --no-upgrade\n",[39,118392,118393],{"class":41,"line":671},[39,118394,118395],{"class":102},"#只升级，不存在就不安装\n",[39,118397,118398,118400,118402,118404,118406,118408,118410,118412],{"class":41,"line":684},[39,118399,25633],{"class":3021},[39,118401,118262],{"class":1319},[39,118403,24890],{"class":1319},[39,118405,29959],{"class":49},[39,118407,118351],{"class":1319},[39,118409,1290],{"class":45},[39,118411,2158],{"class":49},[39,118413,118414],{"class":56}," --only-upgrade\n",[39,118416,118417],{"class":41,"line":2732},[39,118418,3458],{"emptyLinePlaceholder":1145},[39,118420,118421],{"class":41,"line":2737},[39,118422,118423],{"class":102},"#安装指定的软件命令\n",[39,118425,118426,118428,118430,118432,118434,118436,118438],{"class":41,"line":2751},[39,118427,25633],{"class":3021},[39,118429,118262],{"class":1319},[39,118431,24890],{"class":1319},[39,118433,29959],{"class":49},[39,118435,118351],{"class":1319},[39,118437,1290],{"class":45},[39,118439,52361],{"class":49},[39,118441,118442],{"class":41,"line":2756},[39,118443,3458],{"emptyLinePlaceholder":1145},[39,118445,118446],{"class":41,"line":2785},[39,118447,118448],{"class":102},"#安装多个软件包\n",[39,118450,118451,118453,118455,118457,118459,118462,118465,118467,118469,118472,118474,118476],{"class":41,"line":2790},[39,118452,25633],{"class":3021},[39,118454,118262],{"class":1319},[39,118456,24890],{"class":1319},[39,118458,29959],{"class":49},[39,118460,118461],{"class":1319},"package_",[39,118463,118464],{"class":49},"1>",[39,118466,29959],{"class":49},[39,118468,118461],{"class":1319},[39,118470,118471],{"class":49},"2>",[39,118473,29959],{"class":49},[39,118475,118461],{"class":1319},[39,118477,118478],{"class":49},"3>\n",[39,118480,118481],{"class":41,"line":2807},[39,118482,3458],{"emptyLinePlaceholder":1145},[39,118484,118485],{"class":41,"line":2812},[39,118486,118487],{"class":102},"#更新指定的软件命令\n",[39,118489,118490,118492,118494,118496,118498,118500,118502],{"class":41,"line":2817},[39,118491,25633],{"class":3021},[39,118493,118262],{"class":1319},[39,118495,118292],{"class":1319},[39,118497,29959],{"class":49},[39,118499,118351],{"class":1319},[39,118501,1290],{"class":45},[39,118503,52361],{"class":49},[39,118505,118506],{"class":41,"line":2822},[39,118507,3458],{"emptyLinePlaceholder":1145},[39,118509,118510],{"class":41,"line":2836},[39,118511,118512],{"class":102},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[39,118514,118515,118517,118520,118522,118524,118526],{"class":41,"line":2841},[39,118516,118313],{"class":3021},[39,118518,118519],{"class":1319}," show",[39,118521,29959],{"class":49},[39,118523,118351],{"class":1319},[39,118525,1290],{"class":45},[39,118527,52361],{"class":49},[39,118529,118530],{"class":41,"line":3635},[39,118531,3458],{"emptyLinePlaceholder":1145},[39,118533,118534],{"class":41,"line":3649},[39,118535,118536],{"class":102},"#删除软件包命令\n",[39,118538,118539,118541,118543,118545,118547,118549,118551],{"class":41,"line":3657},[39,118540,25633],{"class":3021},[39,118542,118262],{"class":1319},[39,118544,27136],{"class":1319},[39,118546,29959],{"class":49},[39,118548,118351],{"class":1319},[39,118550,1290],{"class":45},[39,118552,52361],{"class":49},[39,118554,118555],{"class":41,"line":3662},[39,118556,3458],{"emptyLinePlaceholder":1145},[39,118558,118559],{"class":41,"line":3668},[39,118560,118561],{"class":102},"# 清理旧版本和缓存（释放磁盘空间）\n",[39,118563,118564,118566,118568,118571],{"class":41,"line":3674},[39,118565,25633],{"class":3021},[39,118567,118262],{"class":1319},[39,118569,118570],{"class":1319}," autoremove",[39,118572,118573],{"class":102},"  # 删除不再需要的依赖和库文件\n",[39,118575,118576,118578,118580,118583],{"class":41,"line":3679},[39,118577,25633],{"class":3021},[39,118579,118262],{"class":1319},[39,118581,118582],{"class":1319}," clean",[39,118584,118585],{"class":102},"       # 清理下载的缓存包\n",[39,118587,118588],{"class":41,"line":9004},[39,118589,3458],{"emptyLinePlaceholder":1145},[39,118591,118592],{"class":41,"line":9028},[39,118593,118594],{"class":102},"#移除软件包及配置文件\n",[39,118596,118597,118599,118601,118604,118606,118608,118610],{"class":41,"line":9033},[39,118598,25633],{"class":3021},[39,118600,118262],{"class":1319},[39,118602,118603],{"class":1319}," purge",[39,118605,29959],{"class":49},[39,118607,118351],{"class":1319},[39,118609,1290],{"class":45},[39,118611,52361],{"class":49},[39,118613,118614],{"class":41,"line":9039},[39,118615,3458],{"emptyLinePlaceholder":1145},[39,118617,118618],{"class":41,"line":9066},[39,118619,118620],{"class":102},"#查找软件包命令\n",[39,118622,118623,118625,118627,118630,118632,118635,118637],{"class":41,"line":9071},[39,118624,25633],{"class":3021},[39,118626,118262],{"class":1319},[39,118628,118629],{"class":1319}," search",[39,118631,29959],{"class":49},[39,118633,118634],{"class":1319},"keywor",[39,118636,1522],{"class":45},[39,118638,52361],{"class":49},[39,118640,118641],{"class":41,"line":9077},[39,118642,3458],{"emptyLinePlaceholder":1145},[39,118644,118645],{"class":41,"line":9089},[39,118646,118647],{"class":102},"#列出所有已安装的包\n",[39,118649,118650,118652,118654],{"class":41,"line":9101},[39,118651,118313],{"class":3021},[39,118653,118316],{"class":1319},[39,118655,118656],{"class":56}," --installed\n",[39,118658,118659],{"class":41,"line":9113},[39,118660,3458],{"emptyLinePlaceholder":1145},[39,118662,118663],{"class":41,"line":10772},[39,118664,118665],{"class":102},"#列出所有已安装的包的版本信息\n",[39,118667,118668,118670,118672],{"class":41,"line":10797},[39,118669,118313],{"class":3021},[39,118671,118316],{"class":1319},[39,118673,118674],{"class":56}," --all-versions\n",[1133,118676,118677],{},"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":34,"searchDepth":74,"depth":74,"links":118679},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118224,"description":1142},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118686,"title":118687,"body":118688,"description":1142,"extension":1143,"meta":119429,"navigation":1145,"path":119430,"seo":119431,"stem":119432,"__hash__":119433},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118689,"toc":119416},[118690,118693,118697,118700,118706,118710,118714,118720,118725,118730,118735,118740,118745,118748,118751,118754,118757,118761,118764,118769,118772,118777,118780,118785,118792,118795,118798,118801,118804,118807,118818,118822,118826,118831,118836,118840,118845,118849,118854,118858,118862,118867,118870,118915,118920,118924,118928,118933,118939,118944,118954,118959,118969,118974,118979,119006,119010,119013,119018,119021,119046,119050,119055,119058,119063,119068,119088,119093,119096,119111,119115,119168,119171,119176,119180,119183,119198,119201,119204,119209,119213,119217,119220,119224,119228,119231,119236,119241,119245,119252,119260,119263,119270,119275,119280,119283,119288,119295,119300,119307,119311,119313,119318,119322,119325,119328,119333,119336,119341,119344,119349,119354,119359,119363,119368,119372,119413],[10,118691,118687],{"id":118692},"_2-linux装机教程",[14,118694,118696],{"id":118695},"_21-实体机","2.1 实体机",[19,118698,118699],{},"使用清华源：（Ubuntu24.04）",[19,118701,118702],{},[46,118703,118704],{"href":118704,"rel":118705},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24921],[14,118707,118709],{"id":118708},"_22-普通虚拟机","2.2 普通虚拟机",[1188,118711,118713],{"id":118712},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,118715,118716],{},[46,118717,118718],{"href":118718,"rel":118719},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24921],[19,118721,118722],{},[269,118723],{"alt":34,"src":118724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,118726,118727],{},[269,118728],{"alt":34,"src":118729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,118731,118732],{},[269,118733],{"alt":34,"src":118734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,118736,118737],{},[269,118738],{"alt":34,"src":118739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,118741,118742],{},[269,118743],{"alt":34,"src":118744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,118746,118747],{},"内存4G（4096MB）；",[19,118749,118750],{},"CPU给4个核；",[19,118752,118753],{},"硬盘动态分配60G；",[19,118755,118756],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[1188,118758,118760],{"id":118759},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,118762,118763],{},"按照1.1的步骤下载Ubuntu",[19,118765,118766],{},[269,118767],{"alt":34,"src":118768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,118770,118771],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,118773,118774],{},[269,118775],{"alt":34,"src":118776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,118778,118779],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,118781,118782],{},[269,118783],{"alt":34,"src":118784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,118786,118787,118788,118791],{},"选择“正常安装”(找不到都用Alt+F7)， ",[304,118789,118790],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,118793,118794],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,118796,118797],{},"将改动写入磁盘吗 继续",[19,118799,118800],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,118802,118803],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,118805,118806],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,118808,118809,118810,118813,118814,118817],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[304,118811,118812],{},"除了"," 选不发送系统信息与不升级之外， ",[304,118815,118816],{},"其它"," 都跳过或前进）",[1188,118819,118821],{"id":118820},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23054,118823,118825],{"id":118824},"_2231-全屏","2.2.3.1 全屏",[19,118827,118828],{},[269,118829],{"alt":34,"src":118830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118832,118833],{},[269,118834],{"alt":34,"src":118835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23054,118837,118839],{"id":118838},"_2232-文件交换","2.2.3.2 文件交换",[19,118841,118842],{},[269,118843],{"alt":34,"src":118844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23054,118846,118848],{"id":118847},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118850,118851],{},[269,118852],{"alt":34,"src":118853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118855,118857],{"id":118856},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[1188,118859,118861],{"id":118860},"_231-简介与优缺点","2.3.1 简介与优缺点",[1171,118863,118864],{},[1174,118865,118866],{},"什么情况下推荐？",[19,118868,118869],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[1171,118871,118872],{"start":74},[1174,118873,118874,118875],{},"优缺点：",[1171,118876,118877,118907],{},[1174,118878,118879,118880],{},"优点：",[1171,118881,118882,118885,118892,118895,118898,118901,118904],{},[1174,118883,118884],{},"WSL2是最好的Linux发行版;(bushi)",[1174,118886,118887,118888,118891],{},"性能损耗极低。且比在Windows上跑深度性能 ",[304,118889,118890],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[1174,118893,118894],{},"非常方便调用USB设备，可以USB直通;",[1174,118896,118897],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[1174,118899,118900],{},"非常方便Win与WSL2互相传文件等协同操作;",[1174,118902,118903],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[1174,118905,118906],{},"非常方便使用Windows的VScode远程开发;",[1174,118908,118909,118910],{},"缺点：",[1171,118911,118912],{},[1174,118913,118914],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118916,118917],{},[269,118918],{"alt":34,"src":118919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[1188,118921,118923],{"id":118922},"_232-安装教程","2.3.2 安装教程",[23054,118925,118927],{"id":118926},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[1171,118929,118930],{},[1174,118931,118932],{},"方法一(图形界面)",[19,118934,118935,118936,25675],{},"用Win+R输入",[36,118937,118938],{},"appwiz.cpl",[19,118940,118941],{},[269,118942],{"alt":34,"src":118943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118945,118946,118947,118950,118951,27530],{},"点击OK进入 ",[304,118948,118949],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[304,118952,118953],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118955,118956],{},[269,118957],{"alt":34,"src":118958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118960,118961,118962,101963,118965,118968],{},"选择 ",[304,118963,118964],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[304,118966,118967],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118970,118971],{},[269,118972],{"alt":34,"src":118973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[1171,118975,118976],{"start":74},[1174,118977,118978],{},"方法二(命令行)",[29,118980,118984],{"className":118981,"code":118982,"language":118983,"meta":34,"style":34},"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",[36,118985,118986,118991,118996,119001],{"__ignoreMap":34},[39,118987,118988],{"class":41,"line":42},[39,118989,118990],{},"# 开启 Linux 子系统\n",[39,118992,118993],{"class":41,"line":74},[39,118994,118995],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[39,118997,118998],{"class":41,"line":99},[39,118999,119000],{},"# 开启虚拟机平台\n",[39,119002,119003],{"class":41,"line":106},[39,119004,119005],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23054,119007,119009],{"id":119008},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119011,119012],{},"用管理员权限打开powershell",[19,119014,119015],{},[269,119016],{"alt":34,"src":119017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119019,119020],{},"升级WSL并设置默认版本为WSL2",[29,119022,119024],{"className":118981,"code":119023,"language":118983,"meta":34,"style":34},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[36,119025,119026,119031,119036,119041],{"__ignoreMap":34},[39,119027,119028],{"class":41,"line":42},[39,119029,119030],{},"# 更新 wsl\n",[39,119032,119033],{"class":41,"line":74},[39,119034,119035],{},"wsl --update\n",[39,119037,119038],{"class":41,"line":99},[39,119039,119040],{},"# 将 wsl 版本设置为 wsl2\n",[39,119042,119043],{"class":41,"line":106},[39,119044,119045],{},"wsl --set-default-version 2\n",[23054,119047,119049],{"id":119048},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[1171,119051,119052],{},[1174,119053,119054],{},"方式一(商店下载)",[19,119056,119057],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119059,119060],{},[269,119061],{"alt":34,"src":119062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[1171,119064,119065],{"start":74},[1174,119066,119067],{},"方式二(命令行安装)",[29,119069,119071],{"className":118981,"code":119070,"language":118983,"meta":34,"style":34},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[36,119072,119073,119078,119083],{"__ignoreMap":34},[39,119074,119075],{"class":41,"line":42},[39,119076,119077],{},"# 列出可安装的 Linux 版本\n",[39,119079,119080],{"class":41,"line":74},[39,119081,119082],{},"#（需要科学手段）\n",[39,119084,119085],{"class":41,"line":99},[39,119086,119087],{},"wsl --list --online\n",[19,119089,119090],{},[269,119091],{"alt":34,"src":119092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119094,119095],{},"选择对应发行版并安装",[29,119097,119099],{"className":118981,"code":119098,"language":118983,"meta":34,"style":34},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[36,119100,119101,119106],{"__ignoreMap":34},[39,119102,119103],{"class":41,"line":42},[39,119104,119105],{},"# Ubuntu安装完毕后需要重启系统\n",[39,119107,119108],{"class":41,"line":74},[39,119109,119110],{},"wsl --install -d Ubuntu-24.04\n",[23054,119112,119114],{"id":119113},"_2324-查看系统状态","2.3.2.4 查看系统状态",[29,119116,119118],{"className":118981,"code":119117,"language":118983,"meta":34,"style":34},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[36,119119,119120,119125,119130,119135,119140,119144,119148,119153,119158,119163],{"__ignoreMap":34},[39,119121,119122],{"class":41,"line":42},[39,119123,119124],{},"# 查看 wsl\n",[39,119126,119127],{"class":41,"line":74},[39,119128,119129],{},"wsl -l\n",[39,119131,119132],{"class":41,"line":99},[39,119133,119134],{},"# 查看 wsl 运行版本或模式\n",[39,119136,119137],{"class":41,"line":106},[39,119138,119139],{},"wsl -l -v\n",[39,119141,119142],{"class":41,"line":112},[39,119143,3458],{"emptyLinePlaceholder":1145},[39,119145,119146],{"class":41,"line":118},[39,119147,3458],{"emptyLinePlaceholder":1145},[39,119149,119150],{"class":41,"line":413},[39,119151,119152],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[39,119154,119155],{"class":41,"line":419},[39,119156,119157],{},"wsl --set-version \u003Cdistro> 2\n",[39,119159,119160],{"class":41,"line":425},[39,119161,119162],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[39,119164,119165],{"class":41,"line":443},[39,119166,119167],{},"wsl --unregister \u003Cdistro>\n",[19,119169,119170],{},"输出Version为2即正常",[19,119172,119173],{},[269,119174],{"alt":34,"src":119175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23054,119177,119179],{"id":119178},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119181,119182],{},"直接在Powershell里输入wsl命令进入子系统",[29,119184,119186],{"className":118981,"code":119185,"language":118983,"meta":34,"style":34},"# 进入子系统\nwsl\n",[36,119187,119188,119193],{"__ignoreMap":34},[39,119189,119190],{"class":41,"line":42},[39,119191,119192],{},"# 进入子系统\n",[39,119194,119195],{"class":41,"line":74},[39,119196,119197],{},"wsl\n",[19,119199,119200],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119202,119203],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119205,119206],{},[269,119207],{"alt":34,"src":119208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[1188,119210,119212],{"id":119211},"_233-配置各种环境","2.3.3 配置各种环境",[23054,119214,119216],{"id":119215},"_2331-换源","2.3.3.1 换源",[19,119218,119219],{},"(同实体机LINUX，往下找教程)",[23054,119221,119223],{"id":119222},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23966,119225,119227],{"id":119226},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119229,119230],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119232,119233],{},[269,119234],{"alt":34,"src":119235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119237,119238],{},[269,119239],{"alt":34,"src":119240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23966,119242,119244],{"id":119243},"_23322-cuda","2.3.3.2.2 CUDA",[19,119246,119247,119248],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[46,119249,119250],{"href":119250,"rel":119251},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24921],[19,119253,119254,119257],{},[269,119255],{"alt":34,"src":119256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[269,119258],{"alt":34,"src":119259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119261,119262],{},"在下方的网站，选择合适的版本。",[19,119264,119265,119266],{},"WSL2 专属 CUDA 指南：",[46,119267,119268],{"href":119268,"rel":119269},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24921],[19,119271,119272],{},[304,119273,119274],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119276,119277],{},[269,119278],{"alt":34,"src":119279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119281,119282],{},"挨行敲一遍",[19,119284,119285],{},[269,119286],{"alt":34,"src":119287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119289,119290,119291,119294],{},"敲完后，输入",[36,119292,119293],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119296,119297],{},[269,119298],{"alt":34,"src":119299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119301,119302,119303,119306],{},"（请详看下方教程的",[304,119304,119305],{},"安装CUDA的配置环境来看","如何配置环境）",[23966,119308,119310],{"id":119309},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,119312,119219],{},[19,119314,119315],{},[269,119316],{"alt":34,"src":119317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23054,119319,119321],{"id":119320},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,119323,119324],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,119326,119327],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,119329,119330],{},[269,119331],{"alt":34,"src":119332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,119334,119335],{},"连接WSL2",[19,119337,119338],{},[269,119339],{"alt":34,"src":119340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,119342,119343],{},"远程开发成功。",[19,119345,119346],{},[269,119347],{"alt":34,"src":119348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,119350,119351],{},[269,119352],{"alt":34,"src":119353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,119355,119356],{},[269,119357],{"alt":34,"src":119358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23054,119360,119362],{"id":119361},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,119364,119365],{},[269,119366],{"alt":34,"src":119367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23054,119369,119371],{"id":119370},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[29,119373,119375],{"className":118241,"code":119374,"language":118243,"meta":34,"style":34},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[36,119376,119377,119385,119393,119404,119408],{"__ignoreMap":34},[39,119378,119379,119381,119383],{"class":41,"line":42},[39,119380,25633],{"class":3021},[39,119382,118262],{"class":1319},[39,119384,27299],{"class":1319},[39,119386,119387,119389,119391],{"class":41,"line":74},[39,119388,25633],{"class":3021},[39,119390,118262],{"class":1319},[39,119392,118278],{"class":1319},[39,119394,119395,119397,119399,119401],{"class":41,"line":99},[39,119396,25633],{"class":3021},[39,119398,118262],{"class":1319},[39,119400,24890],{"class":1319},[39,119402,119403],{"class":1319}," mesa-utils\n",[39,119405,119406],{"class":41,"line":106},[39,119407,3458],{"emptyLinePlaceholder":1145},[39,119409,119410],{"class":41,"line":112},[39,119411,119412],{"class":102},"#然后重启wsl2即可\n",[1133,119414,119415],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":34,"searchDepth":74,"depth":74,"links":119417},[119418,119419,119424],{"id":118695,"depth":74,"text":118696},{"id":118708,"depth":74,"text":118709,"children":119420},[119421,119422,119423],{"id":118712,"depth":99,"text":118713},{"id":118759,"depth":99,"text":118760},{"id":118820,"depth":99,"text":118821},{"id":118856,"depth":74,"text":118857,"children":119425},[119426,119427,119428],{"id":118860,"depth":99,"text":118861},{"id":118922,"depth":99,"text":118923},{"id":119211,"depth":99,"text":119212},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118687,"description":1142},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119435,"title":119436,"body":119437,"description":1142,"extension":1143,"meta":122373,"navigation":1145,"path":122374,"seo":122375,"stem":122376,"__hash__":122377},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119438,"toc":122345},[119439,119442,119446,119452,119456,119462,119466,119654,119657,119662,119666,119670,119673,119676,119682,119687,119690,119693,119698,119731,119736,119740,119817,119820,119825,119829,119832,119871,119874,119883,119901,119906,119913,120030,120035,120038,120065,120070,120074,120083,120133,120140,120144,120147,120161,120168,120202,120207,120211,120234,120237,120242,120246,120249,120252,120255,120297,120301,120304,120307,120348,120352,120356,120359,120364,120369,120372,120395,120398,120406,120411,120414,120419,120424,120427,120432,120436,120441,120464,120469,120531,120539,120544,120549,120552,120557,120560,120565,120570,120588,120593,120599,120604,120618,120622,120625,120628,120631,120674,120677,120682,120783,120786,120791,120795,120799,120836,120840,120844,120848,120894,120898,120943,120947,120954,120962,121017,121020,121097,121100,121123,121127,121130,121135,121140,121148,121151,121156,121161,121166,121169,121174,121183,121186,121191,121194,121265,121270,121273,121278,121281,121286,121289,121294,121297,121302,121307,121310,121385,121388,121401,121406,121409,121423,121426,121455,121460,121489,121492,121497,121501,121506,121515,121518,121523,121526,121531,121534,121537,121542,121545,121550,121555,121558,121563,121566,121691,121696,121726,121729,121734,121739,121756,121759,121802,121805,121832,121837,121850,121993,121997,122002,122016,122019,122070,122073,122103,122106,122122,122127,122141,122144,122211,122216,122225,122230,122233,122245,122250,122257,122281,122284,122289,122292,122311,122316,122323,122335,122342],[10,119440,119436],{"id":119441},"_3-安装必备配置",[14,119443,119445],{"id":119444},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[29,119447,119450],{"className":119448,"code":119449,"language":6244},[6242],"  打开下方网站（注意，该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",[36,119451,119449],{"__ignoreMap":34},[1188,119453,119455],{"id":119454},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[29,119457,119460],{"className":119458,"code":119459,"language":6244},[6242],"  输入以下命令\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",[36,119461,119459],{"__ignoreMap":34},[1188,119463,119465],{"id":119464},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[29,119467,119471],{"className":119468,"code":119469,"language":119470,"meta":34,"style":34},"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",[36,119472,119473,119481,119492,119504,119518,119522,119532,119537,119541,119545,119550,119554,119566,119570,119575,119579,119590,119594,119610,119614,119625,119629,119634,119638,119646],{"__ignoreMap":34},[39,119474,119475,119477,119479],{"class":41,"line":42},[39,119476,25633],{"class":3021},[39,119478,118262],{"class":1319},[39,119480,27299],{"class":1319},[39,119482,119483,119485,119487,119489],{"class":41,"line":74},[39,119484,25633],{"class":3021},[39,119486,118262],{"class":1319},[39,119488,24890],{"class":1319},[39,119490,119491],{"class":1319}," vim\n",[39,119493,119494,119496,119499,119501],{"class":41,"line":99},[39,119495,25633],{"class":3021},[39,119497,119498],{"class":1319}," rm",[39,119500,26382],{"class":56},[39,119502,119503],{"class":1319}," \u002Fetc\u002Fapt\u002Fsources.list\n",[39,119505,119506,119508,119510,119512,119515],{"class":41,"line":106},[39,119507,25633],{"class":3021},[39,119509,119498],{"class":1319},[39,119511,26382],{"class":56},[39,119513,119514],{"class":1319}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[39,119516,119517],{"class":56},"**\n",[39,119519,119520],{"class":41,"line":112},[39,119521,3458],{"emptyLinePlaceholder":1145},[39,119523,119524,119526,119529],{"class":41,"line":118},[39,119525,25633],{"class":3021},[39,119527,119528],{"class":1319}," vim",[39,119530,119531],{"class":1319}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[39,119533,119534],{"class":41,"line":413},[39,119535,119536],{"class":1319},"```\n",[39,119538,119539],{"class":41,"line":419},[39,119540,3458],{"emptyLinePlaceholder":1145},[39,119542,119543],{"class":41,"line":425},[39,119544,3458],{"emptyLinePlaceholder":1145},[39,119546,119547],{"class":41,"line":443},[39,119548,119549],{"class":3021},"选择好Ubuntu版本后，复制下方的内容。\n",[39,119551,119552],{"class":41,"line":449},[39,119553,3458],{"emptyLinePlaceholder":1145},[39,119555,119556,119558,119561,119564],{"class":41,"line":455},[39,119557,1438],{"class":49},[39,119559,119560],{"class":1319},"[](",[39,119562,119563],{"class":3021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[39,119565,209],{"class":1319},[39,119567,119568],{"class":41,"line":461},[39,119569,3458],{"emptyLinePlaceholder":1145},[39,119571,119572],{"class":41,"line":475},[39,119573,119574],{"class":3021},"粘贴进去\n",[39,119576,119577],{"class":41,"line":665},[39,119578,3458],{"emptyLinePlaceholder":1145},[39,119580,119581,119583,119585,119588],{"class":41,"line":671},[39,119582,1438],{"class":49},[39,119584,119560],{"class":1319},[39,119586,119587],{"class":3021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[39,119589,209],{"class":1319},[39,119591,119592],{"class":41,"line":684},[39,119593,3458],{"emptyLinePlaceholder":1145},[39,119595,119596,119599,119602,119605,119607],{"class":41,"line":2732},[39,119597,119598],{"class":3021},"按一下ESC，然后英文冒号，输入",[39,119600,119601],{"class":1319}," `",[39,119603,119604],{"class":3021},":wq!",[39,119606,2170],{"class":1319},[39,119608,119609],{"class":3021},"然后回车\n",[39,119611,119612],{"class":41,"line":2737},[39,119613,3458],{"emptyLinePlaceholder":1145},[39,119615,119616,119618,119620,119623],{"class":41,"line":2751},[39,119617,1438],{"class":49},[39,119619,119560],{"class":1319},[39,119621,119622],{"class":3021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[39,119624,209],{"class":1319},[39,119626,119627],{"class":41,"line":2756},[39,119628,3458],{"emptyLinePlaceholder":1145},[39,119630,119631],{"class":41,"line":2785},[39,119632,119633],{"class":3021},"输入以下命令\n",[39,119635,119636],{"class":41,"line":2790},[39,119637,3458],{"emptyLinePlaceholder":1145},[39,119639,119640,119643],{"class":41,"line":2807},[39,119641,119642],{"class":1319},"```",[39,119644,119645],{"class":3021},"Bash\n",[39,119647,119648,119650,119652],{"class":41,"line":2812},[39,119649,25633],{"class":3021},[39,119651,118262],{"class":1319},[39,119653,27299],{"class":1319},[19,119655,119656],{},"这里被替换成对应学校则成功",[19,119658,119659],{},[269,119660],{"alt":34,"src":119661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,119663,119665],{"id":119664},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[1188,119667,119669],{"id":119668},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,119671,119672],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,119674,119675],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,119677,119678],{},[46,119679,119680],{"href":119680,"rel":119681},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24921],[19,119683,119684],{},[269,119685],{"alt":34,"src":119686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,119688,119689],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,119691,119692],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,119694,119695],{},[269,119696],{"alt":34,"src":119697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[29,119699,119701],{"className":118241,"code":119700,"language":118243,"meta":34,"style":34},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[36,119702,119703,119708,119715,119720],{"__ignoreMap":34},[39,119704,119705],{"class":41,"line":42},[39,119706,119707],{"class":102},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[39,119709,119710,119712],{"class":41,"line":74},[39,119711,102221],{"class":56},[39,119713,119714],{"class":1319}," ~\u002FDownloads\n",[39,119716,119717],{"class":41,"line":99},[39,119718,119719],{"class":102},"#下方chrome安装包名不一定是这个，根据名字来看\n",[39,119721,119722,119724,119726,119728],{"class":41,"line":106},[39,119723,25633],{"class":3021},[39,119725,118262],{"class":1319},[39,119727,24890],{"class":1319},[39,119729,119730],{"class":1319}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,119732,119733],{},[269,119734],{"alt":34,"src":119735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[1188,119737,119739],{"id":119738},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[29,119741,119743],{"className":118241,"code":119742,"language":118243,"meta":34,"style":34},"# 老版\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",[36,119744,119745,119750,119758,119769,119774,119778,119783,119793,119801,119812],{"__ignoreMap":34},[39,119746,119747],{"class":41,"line":42},[39,119748,119749],{"class":102},"# 老版\n",[39,119751,119752,119754,119756],{"class":41,"line":74},[39,119753,25633],{"class":3021},[39,119755,118262],{"class":1319},[39,119757,27299],{"class":1319},[39,119759,119760,119762,119764,119766],{"class":41,"line":99},[39,119761,25633],{"class":3021},[39,119763,118262],{"class":1319},[39,119765,24890],{"class":1319},[39,119767,119768],{"class":1319}," neofetch\n",[39,119770,119771],{"class":41,"line":106},[39,119772,119773],{"class":3021},"neofetch\n",[39,119775,119776],{"class":41,"line":112},[39,119777,3458],{"emptyLinePlaceholder":1145},[39,119779,119780],{"class":41,"line":118},[39,119781,119782],{"class":102},"# 新版\n",[39,119784,119785,119787,119790],{"class":41,"line":413},[39,119786,25633],{"class":3021},[39,119788,119789],{"class":1319}," add-apt-repository",[39,119791,119792],{"class":1319}," ppa:zhangsongcui3371\u002Ffastfetch\n",[39,119794,119795,119797,119799],{"class":41,"line":419},[39,119796,25633],{"class":3021},[39,119798,118262],{"class":1319},[39,119800,27299],{"class":1319},[39,119802,119803,119805,119807,119809],{"class":41,"line":425},[39,119804,25633],{"class":3021},[39,119806,118262],{"class":1319},[39,119808,24890],{"class":1319},[39,119810,119811],{"class":1319}," fastfetch\n",[39,119813,119814],{"class":41,"line":443},[39,119815,119816],{"class":3021},"fastfetch\n",[19,119818,119819],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119821,119822],{},[269,119823],{"alt":34,"src":119824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[1188,119826,119828],{"id":119827},"_323-移除snap应用","3.2.3 移除snap应用",[19,119830,119831],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[29,119833,119835],{"className":118241,"code":119834,"language":118243,"meta":34,"style":34},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[36,119836,119837,119849,119860],{"__ignoreMap":34},[39,119838,119839,119841,119843,119846],{"class":41,"line":42},[39,119840,25633],{"class":3021},[39,119842,27570],{"class":1319},[39,119844,119845],{"class":1319}," disable",[39,119847,119848],{"class":1319}," snapd.service\n",[39,119850,119851,119853,119855,119857],{"class":41,"line":74},[39,119852,25633],{"class":3021},[39,119854,27570],{"class":1319},[39,119856,119845],{"class":1319},[39,119858,119859],{"class":1319}," snapd.socket\n",[39,119861,119862,119864,119866,119868],{"class":41,"line":99},[39,119863,25633],{"class":3021},[39,119865,27570],{"class":1319},[39,119867,119845],{"class":1319},[39,119869,119870],{"class":1319}," snapd.seeded.service\n",[19,119872,119873],{},"然后查看snap应用列表",[19,119875,119876,119877,119882],{},"根据你安装的选择不同（最小安装或普通安装），有",[46,119878,119881],{"href":119879,"rel":119880},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24921],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[29,119884,119886],{"className":118241,"code":119885,"language":118243,"meta":34,"style":34},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[36,119887,119888,119893],{"__ignoreMap":34},[39,119889,119890],{"class":41,"line":42},[39,119891,119892],{"class":102},"# 查询当前系统上snap安装了哪些app\n",[39,119894,119895,119898],{"class":41,"line":74},[39,119896,119897],{"class":3021},"snap",[39,119899,119900],{"class":1319}," list\n",[19,119902,119903],{},[269,119904],{"alt":34,"src":119905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119907,119908,119909,119912],{},"卸载掉图中所有应用，按照 ",[304,119910,119911],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[29,119914,119916],{"className":118241,"code":119915,"language":118243,"meta":34,"style":34},"#移除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",[36,119917,119918,119923,119935,119940,119951,119956,119967,119972,119983,119988,119992,119997,120008,120019],{"__ignoreMap":34},[39,119919,119920],{"class":41,"line":42},[39,119921,119922],{"class":102},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[39,119924,119925,119927,119930,119932],{"class":41,"line":74},[39,119926,25633],{"class":3021},[39,119928,119929],{"class":1319}," snap",[39,119931,27136],{"class":1319},[39,119933,119934],{"class":1319}," snap-store\n",[39,119936,119937],{"class":41,"line":99},[39,119938,119939],{"class":102},"#移除firefox浏览器\n",[39,119941,119942,119944,119946,119948],{"class":41,"line":106},[39,119943,25633],{"class":3021},[39,119945,119929],{"class":1319},[39,119947,27136],{"class":1319},[39,119949,119950],{"class":1319}," firefox\n",[39,119952,119953],{"class":41,"line":112},[39,119954,119955],{"class":102},"#移除gnome-42-2204\n",[39,119957,119958,119960,119962,119964],{"class":41,"line":118},[39,119959,25633],{"class":3021},[39,119961,119929],{"class":1319},[39,119963,27136],{"class":1319},[39,119965,119966],{"class":1319}," gnome-42-2204\n",[39,119968,119969],{"class":41,"line":413},[39,119970,119971],{"class":102},"#移除gtk-common-themes\n",[39,119973,119974,119976,119978,119980],{"class":41,"line":419},[39,119975,25633],{"class":3021},[39,119977,119929],{"class":1319},[39,119979,27136],{"class":1319},[39,119981,119982],{"class":1319}," gtk-common-themes\n",[39,119984,119985],{"class":41,"line":425},[39,119986,119987],{"class":102},"#移除其它...\n",[39,119989,119990],{"class":41,"line":443},[39,119991,3732],{"class":45},[39,119993,119994],{"class":41,"line":449},[39,119995,119996],{"class":102},"#移除core22,bare以及snapd\n",[39,119998,119999,120001,120003,120005],{"class":41,"line":455},[39,120000,25633],{"class":3021},[39,120002,119929],{"class":1319},[39,120004,27136],{"class":1319},[39,120006,120007],{"class":1319}," core22\n",[39,120009,120010,120012,120014,120016],{"class":41,"line":461},[39,120011,25633],{"class":3021},[39,120013,119929],{"class":1319},[39,120015,27136],{"class":1319},[39,120017,120018],{"class":1319}," bare\n",[39,120020,120021,120023,120025,120027],{"class":41,"line":475},[39,120022,25633],{"class":3021},[39,120024,119929],{"class":1319},[39,120026,27136],{"class":1319},[39,120028,120029],{"class":1319}," snapd\n",[19,120031,120032],{},[269,120033],{"alt":34,"src":120034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120036,120037],{},"输入以下命令查看是否还有snap包",[29,120039,120041],{"className":118241,"code":120040,"language":118243,"meta":34,"style":34},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[36,120042,120043,120049,120053,120057,120061],{"__ignoreMap":34},[39,120044,120045,120047],{"class":41,"line":42},[39,120046,119897],{"class":3021},[39,120048,119900],{"class":1319},[39,120050,120051],{"class":41,"line":74},[39,120052,119749],{"class":102},[39,120054,120055],{"class":41,"line":99},[39,120056,119773],{"class":3021},[39,120058,120059],{"class":41,"line":106},[39,120060,119782],{"class":102},[39,120062,120063],{"class":41,"line":112},[39,120064,119816],{"class":3021},[19,120066,120067],{},[269,120068],{"alt":34,"src":120069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[1188,120071,120073],{"id":120072},"_324-移除snap","3.2.4 移除snap",[19,120075,120076,120077,120082],{},"在删除掉",[46,120078,120081],{"href":120079,"rel":120080},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24921],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[29,120084,120086],{"className":118241,"code":120085,"language":118243,"meta":34,"style":34}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[36,120087,120088,120093,120106,120111,120122],{"__ignoreMap":34},[39,120089,120090],{"class":41,"line":42},[39,120091,120092],{"class":102}," #使用apt移除掉snap\n",[39,120094,120095,120097,120099,120101,120104],{"class":41,"line":74},[39,120096,25633],{"class":3021},[39,120098,118262],{"class":1319},[39,120100,118570],{"class":1319},[39,120102,120103],{"class":56}," --purge",[39,120105,120029],{"class":1319},[39,120107,120108],{"class":41,"line":99},[39,120109,120110],{"class":102},"#移除snapd的一些目录\n",[39,120112,120113,120115,120117,120119],{"class":41,"line":106},[39,120114,25633],{"class":3021},[39,120116,119498],{"class":1319},[39,120118,26382],{"class":56},[39,120120,120121],{"class":1319}," \u002Fvar\u002Fcache\u002Fsnapd\n",[39,120123,120124,120126,120128,120130],{"class":41,"line":112},[39,120125,25633],{"class":3021},[39,120127,119498],{"class":1319},[39,120129,26382],{"class":56},[39,120131,120132],{"class":1319}," ~\u002Fsnap\n",[19,120134,120135,120136,120139],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[36,120137,120138],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[1188,120141,120143],{"id":120142},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120145,120146],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[29,120148,120150],{"className":118241,"code":120149,"language":118243,"meta":34,"style":34},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[36,120151,120152],{"__ignoreMap":34},[39,120153,120154,120156,120158],{"class":41,"line":42},[39,120155,25633],{"class":3021},[39,120157,119528],{"class":1319},[39,120159,120160],{"class":1319}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120162,120163,120164,120167],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[36,120165,120166],{},":wq"," 回车",[29,120169,120171],{"className":118241,"code":120170,"language":118243,"meta":34,"style":34},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[36,120172,120173,120180,120194],{"__ignoreMap":34},[39,120174,120175,120178],{"class":41,"line":42},[39,120176,120177],{"class":3021},"Package:",[39,120179,120029],{"class":1319},[39,120181,120182,120185,120188,120191],{"class":41,"line":74},[39,120183,120184],{"class":3021},"Pin:",[39,120186,120187],{"class":1319}," release",[39,120189,120190],{"class":1319}," a=",[39,120192,120193],{"class":56},"*\n",[39,120195,120196,120199],{"class":41,"line":99},[39,120197,120198],{"class":3021},"Pin-Priority:",[39,120200,120201],{"class":56}," -10\n",[19,120203,120204],{},[269,120205],{"alt":34,"src":120206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[1188,120208,120210],{"id":120209},"_326-测试是否成功","3.2.6 测试是否成功",[29,120212,120214],{"className":118241,"code":120213,"language":118243,"meta":34,"style":34},"sudo apt update\nsudo apt install firefox\n",[36,120215,120216,120224],{"__ignoreMap":34},[39,120217,120218,120220,120222],{"class":41,"line":42},[39,120219,25633],{"class":3021},[39,120221,118262],{"class":1319},[39,120223,27299],{"class":1319},[39,120225,120226,120228,120230,120232],{"class":41,"line":74},[39,120227,25633],{"class":3021},[39,120229,118262],{"class":1319},[39,120231,24890],{"class":1319},[39,120233,119950],{"class":1319},[19,120235,120236],{},"这里提示snapd无法被安装，就证明成功了",[19,120238,120239],{},[269,120240],{"alt":34,"src":120241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[1188,120243,120245],{"id":120244},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120247,120248],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120250,120251],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120253,120254],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[29,120256,120258],{"className":118241,"code":120257,"language":118243,"meta":34,"style":34},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[36,120259,120260,120265,120274,120279,120287],{"__ignoreMap":34},[39,120261,120262],{"class":41,"line":42},[39,120263,120264],{"class":102},"# 添加Mozilla提供的源\n",[39,120266,120267,120269,120271],{"class":41,"line":74},[39,120268,25633],{"class":3021},[39,120270,119789],{"class":1319},[39,120272,120273],{"class":1319}," ppa:mozillateam\u002Fppa\n",[39,120275,120276],{"class":41,"line":99},[39,120277,120278],{"class":102},"# 安装Firefox\n",[39,120280,120281,120283,120285],{"class":41,"line":106},[39,120282,25633],{"class":3021},[39,120284,118262],{"class":1319},[39,120286,27299],{"class":1319},[39,120288,120289,120291,120293,120295],{"class":41,"line":112},[39,120290,25633],{"class":3021},[39,120292,118262],{"class":1319},[39,120294,24890],{"class":1319},[39,120296,119950],{"class":1319},[1188,120298,120300],{"id":120299},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120302,120303],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120305,120306],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[29,120308,120310],{"className":118241,"code":120309,"language":118243,"meta":34,"style":34},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[36,120311,120312,120317,120327,120335,120339],{"__ignoreMap":34},[39,120313,120314],{"class":41,"line":42},[39,120315,120316],{"class":102},"#删掉禁止安装snap的配置文件\n",[39,120318,120319,120321,120323,120325],{"class":41,"line":74},[39,120320,25633],{"class":3021},[39,120322,119498],{"class":1319},[39,120324,26382],{"class":56},[39,120326,120160],{"class":1319},[39,120328,120329,120331,120333],{"class":41,"line":99},[39,120330,25633],{"class":3021},[39,120332,118262],{"class":1319},[39,120334,27299],{"class":1319},[39,120336,120337],{"class":41,"line":106},[39,120338,3458],{"emptyLinePlaceholder":1145},[39,120340,120341,120343,120345],{"class":41,"line":112},[39,120342,25633],{"class":3021},[39,120344,118262],{"class":1319},[39,120346,120347],{"class":1319}," dist-update\n",[14,120349,120351],{"id":120350},"_33-中文输入法","3.3 中文输入法",[1188,120353,120355],{"id":120354},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,120357,120358],{},"官网下载搜狗输入法",[19,120360,120361],{},[269,120362],{"alt":34,"src":120363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,120365,120366],{},[269,120367],{"alt":34,"src":120368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,120370,120371],{},"打开终端输入如下",[29,120373,120375],{"className":118241,"code":120374,"language":118243,"meta":34,"style":34},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[36,120376,120377,120384],{"__ignoreMap":34},[39,120378,120379,120381],{"class":41,"line":42},[39,120380,102221],{"class":56},[39,120382,120383],{"class":1319}," ~\u002FDownloads\u002F\n",[39,120385,120386,120388,120390,120392],{"class":41,"line":74},[39,120387,25633],{"class":3021},[39,120389,118262],{"class":1319},[39,120391,24890],{"class":1319},[39,120393,120394],{"class":1319}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,120396,120397],{},"打开Fcitx",[19,120399,120400,120403],{},[269,120401],{"alt":34,"src":120402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[269,120404],{"alt":34,"src":120405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,120407,120408],{},[269,120409],{"alt":34,"src":120410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,120412,120413],{},"添加搜狗输入法",[19,120415,120416],{},[269,120417],{"alt":34,"src":120418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,120420,120421],{},[269,120422],{"alt":34,"src":120423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,120425,120426],{},"将搜狗输入法设置为唯一输入法",[19,120428,120429],{},[269,120430],{"alt":34,"src":120431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[1188,120433,120435],{"id":120434},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[1171,120437,120438],{},[1174,120439,120440],{},"卸载旧输入法",[29,120442,120444],{"className":119468,"code":120443,"language":119470,"meta":34,"style":34},"sudo apt purge fcitx* ibus*\n",[36,120445,120446],{"__ignoreMap":34},[39,120447,120448,120450,120452,120454,120457,120459,120462],{"class":41,"line":42},[39,120449,25633],{"class":3021},[39,120451,118262],{"class":1319},[39,120453,118603],{"class":1319},[39,120455,120456],{"class":1319}," fcitx",[39,120458,1657],{"class":56},[39,120460,120461],{"class":1319}," ibus",[39,120463,120193],{"class":56},[1171,120465,120466],{"start":74},[1174,120467,120468],{},"安装Fcitx5",[29,120470,120472],{"className":118241,"code":120471,"language":118243,"meta":34,"style":34},"# 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",[36,120473,120474,120479,120493,120497,120502,120511,120519],{"__ignoreMap":34},[39,120475,120476],{"class":41,"line":42},[39,120477,120478],{"class":102},"# Ubuntu22.04及以上、Debian12及以上\n",[39,120480,120481,120483,120485,120487,120490],{"class":41,"line":74},[39,120482,25633],{"class":3021},[39,120484,118262],{"class":1319},[39,120486,24890],{"class":1319},[39,120488,120489],{"class":1319}," fcitx5",[39,120491,120492],{"class":1319}," fcitx5-chinese-addons\n",[39,120494,120495],{"class":41,"line":99},[39,120496,3458],{"emptyLinePlaceholder":1145},[39,120498,120499],{"class":41,"line":106},[39,120500,120501],{"class":102},"# Ubuntu20.04\n",[39,120503,120504,120506,120508],{"class":41,"line":112},[39,120505,25633],{"class":3021},[39,120507,119789],{"class":1319},[39,120509,120510],{"class":1319}," ppa:zhsj\u002Ffcitx5\n",[39,120512,120513,120515,120517],{"class":41,"line":118},[39,120514,25633],{"class":3021},[39,120516,118262],{"class":1319},[39,120518,27299],{"class":1319},[39,120520,120521,120523,120525,120527,120529],{"class":41,"line":413},[39,120522,25633],{"class":3021},[39,120524,118262],{"class":1319},[39,120526,24890],{"class":1319},[39,120528,120489],{"class":1319},[39,120530,120492],{"class":1319},[1171,120532,120533,120536],{"start":99},[1174,120534,120535],{},"Reboot System",[1174,120537,120538],{},"启动Fcitx5",[19,120540,120541],{},[269,120542],{"alt":34,"src":120543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[1171,120545,120546],{"start":112},[1174,120547,120548],{},"修改一些设置",[19,120550,120551],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120553,120554],{},[269,120555],{"alt":34,"src":120556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120558,120559],{},"添加快捷键以便于更好切换中英文",[19,120561,120562],{},[269,120563],{"alt":34,"src":120564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[1171,120566,120567],{"start":118},[1174,120568,120569],{},"重启",[29,120571,120573],{"className":119468,"code":120572,"language":119470,"meta":34,"style":34},"sudo shutdown -r now\n",[36,120574,120575],{"__ignoreMap":34},[39,120576,120577,120579,120582,120585],{"class":41,"line":42},[39,120578,25633],{"class":3021},[39,120580,120581],{"class":1319}," shutdown",[39,120583,120584],{"class":56}," -r",[39,120586,120587],{"class":1319}," now\n",[1171,120589,120590],{"start":413},[1174,120591,120592],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,120594,120595],{},[46,120596,120597],{"href":120597,"rel":120598},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24921],[1171,120600,120601],{"start":419},[1174,120602,120603],{},"再重启",[29,120605,120606],{"className":119468,"code":120572,"language":119470,"meta":34,"style":34},[36,120607,120608],{"__ignoreMap":34},[39,120609,120610,120612,120614,120616],{"class":41,"line":42},[39,120611,25633],{"class":3021},[39,120613,120581],{"class":1319},[39,120615,120584],{"class":56},[39,120617,120587],{"class":1319},[14,120619,120621],{"id":120620},"_34-pip3源替换","3.4 pip3源替换",[19,120623,120624],{},"非Debian系发行版需要做。",[19,120626,120627],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,120629,120630],{},"使用dnf的系统也可能不用做。",[29,120632,120634],{"className":118241,"code":120633,"language":118243,"meta":34,"style":34},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[36,120635,120636,120641,120648,120653,120658],{"__ignoreMap":34},[39,120637,120638],{"class":41,"line":42},[39,120639,120640],{"class":102},"# 检查是否已安装 pip\n",[39,120642,120643,120646],{"class":41,"line":74},[39,120644,120645],{"class":3021},"pip3",[39,120647,27350],{"class":56},[39,120649,120650],{"class":41,"line":99},[39,120651,120652],{"class":102},"# 如果未安装，先安装 pip3（见下方）\n",[39,120654,120655],{"class":41,"line":106},[39,120656,120657],{"class":102},"# 配置 pip 使用清华源\n",[39,120659,120660,120662,120665,120668,120671],{"class":41,"line":112},[39,120661,120645],{"class":3021},[39,120663,120664],{"class":1319}," config",[39,120666,120667],{"class":1319}," set",[39,120669,120670],{"class":1319}," global.index-url",[39,120672,120673],{"class":1319}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,120675,120676],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,120678,120679],{},[269,120680],{"alt":34,"src":120681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[29,120683,120685],{"className":118241,"code":120684,"language":118243,"meta":34,"style":34},"#安装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",[36,120686,120687,120692,120700,120711,120715,120720,120739,120743,120748,120760,120764,120769],{"__ignoreMap":34},[39,120688,120689],{"class":41,"line":42},[39,120690,120691],{"class":102},"#安装pip3\n",[39,120693,120694,120696,120698],{"class":41,"line":74},[39,120695,25633],{"class":3021},[39,120697,118262],{"class":1319},[39,120699,27299],{"class":1319},[39,120701,120702,120704,120706,120708],{"class":41,"line":99},[39,120703,25633],{"class":3021},[39,120705,27133],{"class":1319},[39,120707,24890],{"class":1319},[39,120709,120710],{"class":1319}," python3-pip\n",[39,120712,120713],{"class":41,"line":106},[39,120714,3458],{"emptyLinePlaceholder":1145},[39,120716,120717],{"class":41,"line":112},[39,120718,120719],{"class":102},"#更新pip3\n",[39,120721,120722,120724,120726,120728,120730,120732,120735,120737],{"class":41,"line":118},[39,120723,101824],{"class":3021},[39,120725,101827],{"class":56},[39,120727,101850],{"class":1319},[39,120729,24890],{"class":1319},[39,120731,27487],{"class":56},[39,120733,120734],{"class":1319}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[39,120736,101855],{"class":56},[39,120738,101858],{"class":1319},[39,120740,120741],{"class":41,"line":413},[39,120742,3458],{"emptyLinePlaceholder":1145},[39,120744,120745],{"class":41,"line":419},[39,120746,120747],{"class":102},"#设置pip源为清华源\n",[39,120749,120750,120752,120754,120756,120758],{"class":41,"line":425},[39,120751,120645],{"class":3021},[39,120753,120664],{"class":1319},[39,120755,120667],{"class":1319},[39,120757,120670],{"class":1319},[39,120759,120673],{"class":1319},[39,120761,120762],{"class":41,"line":443},[39,120763,3458],{"emptyLinePlaceholder":1145},[39,120765,120766],{"class":41,"line":449},[39,120767,120768],{"class":102},"#测试\n",[39,120770,120771,120773,120775,120777,120779,120781],{"class":41,"line":455},[39,120772,101824],{"class":3021},[39,120774,101827],{"class":56},[39,120776,101850],{"class":1319},[39,120778,24890],{"class":1319},[39,120780,101855],{"class":56},[39,120782,101858],{"class":1319},[19,120784,120785],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,120787,120788],{},[269,120789],{"alt":34,"src":120790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120792,120794],{"id":120793},"_35-显卡驱动安装","3.5 显卡驱动安装",[1188,120796,120798],{"id":120797},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[29,120800,120802],{"className":119468,"code":120801,"language":119470,"meta":34,"style":34},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[36,120803,120804,120809,120824,120829],{"__ignoreMap":34},[39,120805,120806],{"class":41,"line":42},[39,120807,120808],{"class":102},"# 如果是使用apt安装的驱动\n",[39,120810,120811,120813,120815,120817,120819,120822],{"class":41,"line":74},[39,120812,25633],{"class":3021},[39,120814,27133],{"class":1319},[39,120816,27136],{"class":1319},[39,120818,120103],{"class":56},[39,120820,120821],{"class":1319}," nvidia",[39,120823,120193],{"class":56},[39,120825,120826],{"class":41,"line":99},[39,120827,120828],{"class":102},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[39,120830,120831,120833],{"class":41,"line":106},[39,120832,25633],{"class":3021},[39,120834,120835],{"class":1319}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[1188,120837,120839],{"id":120838},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23054,120841,120843],{"id":120842},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23966,120845,120847],{"id":120846},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[29,120849,120851],{"className":119468,"code":120850,"language":119470,"meta":34,"style":34},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[36,120852,120853,120858,120869,120874,120884,120889],{"__ignoreMap":34},[39,120854,120855],{"class":41,"line":42},[39,120856,120857],{"class":102},"# 安装英伟达驱动\n",[39,120859,120860,120862,120864,120866],{"class":41,"line":74},[39,120861,25633],{"class":3021},[39,120863,118262],{"class":1319},[39,120865,24890],{"class":1319},[39,120867,120868],{"class":1319}," nvidia-driver-版本号\n",[39,120870,120871],{"class":41,"line":99},[39,120872,120873],{"class":102},"# 重启 \n",[39,120875,120876,120878,120880,120882],{"class":41,"line":106},[39,120877,25633],{"class":3021},[39,120879,120581],{"class":1319},[39,120881,120584],{"class":56},[39,120883,120587],{"class":1319},[39,120885,120886],{"class":41,"line":112},[39,120887,120888],{"class":102},"# 检查驱动是否安装成功\n",[39,120890,120891],{"class":41,"line":118},[39,120892,120893],{"class":3021},"nvidia-smi\n",[23966,120895,120897],{"id":120896},"_35212-debian","3.5.2.1.2 Debian",[29,120899,120901],{"className":119468,"code":120900,"language":119470,"meta":34,"style":34},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[36,120902,120903,120907,120921,120925,120935,120939],{"__ignoreMap":34},[39,120904,120905],{"class":41,"line":42},[39,120906,120857],{"class":102},[39,120908,120909,120911,120913,120915,120918],{"class":41,"line":74},[39,120910,25633],{"class":3021},[39,120912,118262],{"class":1319},[39,120914,24890],{"class":1319},[39,120916,120917],{"class":1319}," nvidia-driver",[39,120919,120920],{"class":1319}," nvidia-settings\n",[39,120922,120923],{"class":41,"line":99},[39,120924,120873],{"class":102},[39,120926,120927,120929,120931,120933],{"class":41,"line":106},[39,120928,25633],{"class":3021},[39,120930,120581],{"class":1319},[39,120932,120584],{"class":56},[39,120934,120587],{"class":1319},[39,120936,120937],{"class":41,"line":112},[39,120938,120888],{"class":102},[39,120940,120941],{"class":41,"line":118},[39,120942,120893],{"class":3021},[23054,120944,120946],{"id":120945},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120948,120949,120950,120953],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[304,120951,120952],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120955,120956,120957],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[24609,120958,120959],{},[304,120960,120961],{},"（也可以不禁用桌面环境，直接进行下一步。）",[29,120963,120965],{"className":119468,"code":120964,"language":119470,"meta":34,"style":34},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[36,120966,120967,120972,120982,120987,121000,121005],{"__ignoreMap":34},[39,120968,120969],{"class":41,"line":42},[39,120970,120971],{"class":102},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[39,120973,120974,120976,120979],{"class":41,"line":74},[39,120975,25633],{"class":3021},[39,120977,120978],{"class":1319}," telinit",[39,120980,120981],{"class":56}," 3\n",[39,120983,120984],{"class":41,"line":99},[39,120985,120986],{"class":102},"# ubuntu 使用下方命令\n",[39,120988,120989,120991,120994,120997],{"class":41,"line":106},[39,120990,25633],{"class":3021},[39,120992,120993],{"class":1319}," service",[39,120995,120996],{"class":1319}," lightdm",[39,120998,120999],{"class":1319}," stop\n",[39,121001,121002],{"class":41,"line":112},[39,121003,121004],{"class":102},"# Fedora 使用下方命令\n",[39,121006,121007,121009,121011,121014],{"class":41,"line":118},[39,121008,25633],{"class":3021},[39,121010,27570],{"class":1319},[39,121012,121013],{"class":1319}," isolate",[39,121015,121016],{"class":1319}," multi-user.target\n",[19,121018,121019],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[29,121021,121023],{"className":119468,"code":121022,"language":119470,"meta":34,"style":34},"# 编译环境+准备工作\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",[36,121024,121025,121030,121041,121046,121053,121058,121070,121075,121082,121087],{"__ignoreMap":34},[39,121026,121027],{"class":41,"line":42},[39,121028,121029],{"class":102},"# 编译环境+准备工作\n",[39,121031,121032,121034,121036,121038],{"class":41,"line":74},[39,121033,25633],{"class":3021},[39,121035,118262],{"class":1319},[39,121037,24890],{"class":1319},[39,121039,121040],{"class":1319}," build-essential\n",[39,121042,121043],{"class":41,"line":99},[39,121044,121045],{"class":102},"# 进入到.run目录中\n",[39,121047,121048,121050],{"class":41,"line":106},[39,121049,102221],{"class":56},[39,121051,121052],{"class":1319}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[39,121054,121055],{"class":41,"line":112},[39,121056,121057],{"class":102},"# 给驱动文件增加可执行权限：\n",[39,121059,121060,121062,121064,121067],{"class":41,"line":118},[39,121061,25633],{"class":3021},[39,121063,25636],{"class":1319},[39,121065,121066],{"class":1319}," a+x",[39,121068,121069],{"class":1319}," NVIDIA-Linux-x86_64-550.107.02.run\n",[39,121071,121072],{"class":41,"line":413},[39,121073,121074],{"class":102},"# 然后执行安装：\n",[39,121076,121077,121079],{"class":41,"line":419},[39,121078,25633],{"class":3021},[39,121080,121081],{"class":1319}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[39,121083,121084],{"class":41,"line":425},[39,121085,121086],{"class":102},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[39,121088,121089,121091,121094],{"class":41,"line":443},[39,121090,25633],{"class":3021},[39,121092,121093],{"class":1319}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[39,121095,121096],{"class":56},"  --no-opengl-files\n",[19,121098,121099],{},"安装完毕重启即可",[29,121101,121103],{"className":119468,"code":121102,"language":119470,"meta":34,"style":34},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[36,121104,121105,121109,121115,121119],{"__ignoreMap":34},[39,121106,121107],{"class":41,"line":42},[39,121108,120873],{"class":102},[39,121110,121111,121113],{"class":41,"line":74},[39,121112,25633],{"class":3021},[39,121114,27704],{"class":1319},[39,121116,121117],{"class":41,"line":99},[39,121118,120888],{"class":102},[39,121120,121121],{"class":41,"line":106},[39,121122,120893],{"class":3021},[1188,121124,121126],{"id":121125},"_353-安装cuda","3.5.3 安装CUDA",[19,121128,121129],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121131,121132],{},[269,121133],{"alt":34,"src":121134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[1171,121136,121137],{},[1174,121138,121139],{},"先查看显卡驱动所支持的最高CUDA版本",[29,121141,121142],{"className":119468,"code":120893,"language":119470,"meta":34,"style":34},[36,121143,121144],{"__ignoreMap":34},[39,121145,121146],{"class":41,"line":42},[39,121147,120893],{"class":3021},[19,121149,121150],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121152,121153],{},[269,121154],{"alt":34,"src":121155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[1171,121157,121158],{"start":74},[1174,121159,121160],{},"下载CUDA并安装CUDA",[19,121162,119247,121163],{},[46,121164,119250],{"href":119250,"rel":121165},[24921],[19,121167,121168],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121170,121171],{},[269,121172],{"alt":34,"src":121173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121175,121176,121177,121182],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[46,121178,121181],{"href":121179,"rel":121180},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24921],"Vinci机器人队单片机教程","）",[19,121184,121185],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121187,121188],{},[269,121189],{"alt":34,"src":121190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121192,121193],{},"将最下方框框里的命令敲入终端",[29,121195,121197],{"className":119468,"code":121196,"language":119470,"meta":34,"style":34},"# 在当前文件夹下创建一个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",[36,121198,121199,121204,121213,121218,121225,121230,121238,121243,121254,121259],{"__ignoreMap":34},[39,121200,121201],{"class":41,"line":42},[39,121202,121203],{"class":102},"# 在当前文件夹下创建一个ttt的子文件夹\n",[39,121205,121206,121208,121210],{"class":41,"line":74},[39,121207,102211],{"class":3021},[39,121209,30273],{"class":56},[39,121211,121212],{"class":1319}," .\u002Fttt\n",[39,121214,121215],{"class":41,"line":99},[39,121216,121217],{"class":102},"# 进入ttt文件夹\n",[39,121219,121220,121222],{"class":41,"line":106},[39,121221,102221],{"class":56},[39,121223,121224],{"class":1319}," ttt\n",[39,121226,121227],{"class":41,"line":112},[39,121228,121229],{"class":102},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[39,121231,121232,121235],{"class":41,"line":118},[39,121233,121234],{"class":3021},"wget",[39,121236,121237],{"class":1319}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[39,121239,121240],{"class":41,"line":413},[39,121241,121242],{"class":102},"# 给予权限\n",[39,121244,121245,121247,121249,121251],{"class":41,"line":419},[39,121246,25633],{"class":3021},[39,121248,25636],{"class":1319},[39,121250,121066],{"class":1319},[39,121252,121253],{"class":1319}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[39,121255,121256],{"class":41,"line":425},[39,121257,121258],{"class":102},"# 运行脚本\n",[39,121260,121261,121263],{"class":41,"line":443},[39,121262,25633],{"class":3021},[39,121264,121253],{"class":1319},[19,121266,121267],{},[269,121268],{"alt":34,"src":121269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121271,121272],{},"正在安装中：",[19,121274,121275],{},[269,121276],{"alt":34,"src":121277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121279,121280],{},"输入accept接受即可",[19,121282,121283],{},[269,121284],{"alt":34,"src":121285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121287,121288],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121290,121291],{},[269,121292],{"alt":34,"src":121293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121295,121296],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121298,121299],{},[269,121300],{"alt":34,"src":121301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[1171,121303,121304],{"start":99},[1174,121305,121306],{},"配置环境",[19,121308,121309],{},"根据上方确认一下路径，比如我上面红色框起来的为",[29,121311,121313],{"className":119468,"code":121312,"language":119470,"meta":34,"style":34},"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",[36,121314,121315,121331,121346],{"__ignoreMap":34},[39,121316,121317,121320,121323,121326,121329],{"class":41,"line":42},[39,121318,121319],{"class":3021},"Please",[39,121321,121322],{"class":1319}," make",[39,121324,121325],{"class":1319}," sure",[39,121327,121328],{"class":1319}," that",[39,121330,3732],{"class":45},[39,121332,121333,121335,121338,121341,121344],{"class":41,"line":74},[39,121334,53325],{"class":3021},[39,121336,121337],{"class":1319},"   PATH",[39,121339,121340],{"class":1319}," includes",[39,121342,121343],{"class":1319}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[39,121345,3732],{"class":45},[39,121347,121348,121350,121353,121355,121358,121361,121363,121366,121369,121372,121375,121377,121380,121382],{"class":41,"line":99},[39,121349,53325],{"class":3021},[39,121351,121352],{"class":1319},"   LD_LIBRARY_PATH",[39,121354,121340],{"class":1319},[39,121356,121357],{"class":1319}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[39,121359,121360],{"class":1319}," or,",[39,121362,6266],{"class":1319},[39,121364,121365],{"class":1319}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[39,121367,121368],{"class":1319}," to",[39,121370,121371],{"class":1319}," \u002Fetc\u002Fld.so.conf",[39,121373,121374],{"class":1319}," and",[39,121376,28287],{"class":1319},[39,121378,121379],{"class":1319}," ldconfig",[39,121381,65658],{"class":1319},[39,121383,121384],{"class":1319}," root\n",[19,121386,121387],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[29,121389,121391],{"className":119468,"code":121390,"language":119470,"meta":34,"style":34},"which nvcc\n",[36,121392,121393],{"__ignoreMap":34},[39,121394,121395,121398],{"class":41,"line":42},[39,121396,121397],{"class":56},"which",[39,121399,121400],{"class":1319}," nvcc\n",[19,121402,121403],{},[269,121404],{"alt":34,"src":121405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,121407,121408],{},"所以我进行以下操作：",[29,121410,121412],{"className":119468,"code":121411,"language":119470,"meta":34,"style":34},"sudo vim ~\u002F.bashrc\n",[36,121413,121414],{"__ignoreMap":34},[39,121415,121416,121418,121420],{"class":41,"line":42},[39,121417,25633],{"class":3021},[39,121419,119528],{"class":1319},[39,121421,121422],{"class":1319}," ~\u002F.bashrc\n",[19,121424,121425],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[29,121427,121429],{"className":119468,"code":121428,"language":119470,"meta":34,"style":34},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[36,121430,121431,121443],{"__ignoreMap":34},[39,121432,121433,121435,121438,121440],{"class":41,"line":42},[39,121434,26099],{"class":49},[39,121436,121437],{"class":45}," PATH",[39,121439,50],{"class":49},[39,121441,121442],{"class":45},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[39,121444,121445,121447,121450,121452],{"class":41,"line":74},[39,121446,26099],{"class":49},[39,121448,121449],{"class":45}," LD_LIBRARY_PATH",[39,121451,50],{"class":49},[39,121453,121454],{"class":45},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121456,121457],{},[269,121458],{"alt":34,"src":121459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[29,121461,121463],{"className":119468,"code":121462,"language":119470,"meta":34,"style":34},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[36,121464,121465,121470,121476,121481],{"__ignoreMap":34},[39,121466,121467],{"class":41,"line":42},[39,121468,121469],{"class":102},"# 刷新当前终端的环境变量\n",[39,121471,121472,121474],{"class":41,"line":74},[39,121473,101838],{"class":56},[39,121475,121422],{"class":1319},[39,121477,121478],{"class":41,"line":99},[39,121479,121480],{"class":102},"# 验证CUDA是否安装成功\n",[39,121482,121483,121486],{"class":41,"line":106},[39,121484,121485],{"class":3021},"nvcc",[39,121487,121488],{"class":56}," -V\n",[19,121490,121491],{},"出现下图这种则安装成功。",[19,121493,121494],{},[269,121495],{"alt":34,"src":121496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[1188,121498,121500],{"id":121499},"_354-安装cudnn","3.5.4 安装cuDNN",[1171,121502,121503],{},[1174,121504,121505],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,121507,121508,121509,121514],{},"前往 NVIDIA cuDNN 下载页面：",[46,121510,121513],{"href":121511,"rel":121512},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24921],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,121516,121517],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,121519,121520],{},[269,121521],{"alt":34,"src":121522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,121524,121525],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,121527,121528],{},[269,121529],{"alt":34,"src":121530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,121532,121533],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,121535,121536],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,121538,121539],{},[304,121540,121541],{},"我这里选择所有Linux X86_64最通用的办法：",[19,121543,121544],{},"下载好的：",[19,121546,121547],{},[269,121548],{"alt":34,"src":121549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[1171,121551,121552],{"start":74},[1174,121553,121554],{},"安装cuDNN",[19,121556,121557],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121559,121560],{},[269,121561],{"alt":34,"src":121562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121564,121565],{},"解压文件，并复制到对应位置完成安装",[29,121567,121569],{"className":119468,"code":121568,"language":119470,"meta":34,"style":34},"# 解压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",[36,121570,121571,121576,121587,121592,121599,121604,121620,121634,121639,121650,121659,121663,121679],{"__ignoreMap":34},[39,121572,121573],{"class":41,"line":42},[39,121574,121575],{"class":102},"# 解压cuDNN文件\n",[39,121577,121578,121581,121584],{"class":41,"line":74},[39,121579,121580],{"class":3021},"tar",[39,121582,121583],{"class":56}," -xvf",[39,121585,121586],{"class":1319}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[39,121588,121589],{"class":41,"line":99},[39,121590,121591],{"class":102},"# cd进文件夹\n",[39,121593,121594,121596],{"class":41,"line":106},[39,121595,102221],{"class":56},[39,121597,121598],{"class":1319}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[39,121600,121601],{"class":41,"line":112},[39,121602,121603],{"class":102},"# 复制cuDNN文件到CUDA目录\n",[39,121605,121606,121608,121610,121613,121615,121618],{"class":41,"line":118},[39,121607,25633],{"class":3021},[39,121609,28918],{"class":1319},[39,121611,121612],{"class":1319}," include\u002Fcudnn",[39,121614,1657],{"class":56},[39,121616,121617],{"class":1319},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[39,121619,3732],{"class":45},[39,121621,121622,121624,121626,121629,121631],{"class":41,"line":413},[39,121623,25633],{"class":3021},[39,121625,28918],{"class":1319},[39,121627,121628],{"class":1319}," lib\u002Flibcudnn",[39,121630,1657],{"class":56},[39,121632,121633],{"class":1319},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[39,121635,121636],{"class":41,"line":419},[39,121637,121638],{"class":102},"# 对比一下有没有缺文件\n",[39,121640,121641,121643,121646,121648],{"class":41,"line":425},[39,121642,27818],{"class":3021},[39,121644,121645],{"class":1319}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[39,121647,1657],{"class":56},[39,121649,3732],{"class":45},[39,121651,121652,121654,121657],{"class":41,"line":443},[39,121653,27818],{"class":3021},[39,121655,121656],{"class":1319}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[39,121658,120193],{"class":56},[39,121660,121661],{"class":41,"line":449},[39,121662,121242],{"class":102},[39,121664,121665,121667,121669,121672,121674,121676],{"class":41,"line":455},[39,121666,25633],{"class":3021},[39,121668,25636],{"class":1319},[39,121670,121671],{"class":1319}," a+r",[39,121673,121645],{"class":1319},[39,121675,1657],{"class":56},[39,121677,121678],{"class":45},"   \n",[39,121680,121681,121683,121685,121687,121689],{"class":41,"line":461},[39,121682,25633],{"class":3021},[39,121684,25636],{"class":1319},[39,121686,121671],{"class":1319},[39,121688,121656],{"class":1319},[39,121690,120193],{"class":56},[1171,121692,121693],{"start":99},[1174,121694,121695],{},"检查是否安装成功",[29,121697,121699],{"className":119468,"code":121698,"language":119470,"meta":34,"style":34},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[36,121700,121701,121706],{"__ignoreMap":34},[39,121702,121703],{"class":41,"line":42},[39,121704,121705],{"class":102},"# 检查cuDNN版本命令\n",[39,121707,121708,121711,121714,121716,121718,121721,121724],{"class":41,"line":74},[39,121709,121710],{"class":3021},"cat",[39,121712,121713],{"class":1319}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[39,121715,26166],{"class":49},[39,121717,31293],{"class":3021},[39,121719,121720],{"class":1319}," CUDNN_MAJOR",[39,121722,121723],{"class":56}," -A",[39,121725,48777],{"class":56},[19,121727,121728],{},"出现下图这样的就是安装成功了",[19,121730,121731],{},[269,121732],{"alt":34,"src":121733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[1171,121735,121736],{"start":106},[1174,121737,121738],{},"软链接(一般不需要)",[29,121740,121742],{"className":119468,"code":121741,"language":119470,"meta":34,"style":34},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[36,121743,121744,121749],{"__ignoreMap":34},[39,121745,121746],{"class":41,"line":42},[39,121747,121748],{"class":102},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[39,121750,121751,121753],{"class":41,"line":74},[39,121752,25633],{"class":3021},[39,121754,121755],{"class":1319}," ldconfig\n",[19,121757,121758],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[29,121760,121765],{"className":121761,"code":121762,"language":121763,"meta":121764,"style":34},"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",[36,121766,121767,121772,121777,121782,121787,121792,121797],{"__ignoreMap":34},[39,121768,121769],{"class":41,"line":42},[39,121770,121771],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[39,121773,121774],{"class":41,"line":74},[39,121775,121776],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[39,121778,121779],{"class":41,"line":99},[39,121780,121781],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[39,121783,121784],{"class":41,"line":106},[39,121785,121786],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[39,121788,121789],{"class":41,"line":112},[39,121790,121791],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[39,121793,121794],{"class":41,"line":118},[39,121795,121796],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[39,121798,121799],{"class":41,"line":413},[39,121800,121801],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121803,121804],{},"运行下方的命令",[29,121806,121808],{"className":119468,"code":121807,"language":119470,"meta":34,"style":34},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[36,121809,121810,121815,121822,121827],{"__ignoreMap":34},[39,121811,121812],{"class":41,"line":42},[39,121813,121814],{"class":102},"# cd进入CUDA路径\n",[39,121816,121817,121819],{"class":41,"line":74},[39,121818,102221],{"class":56},[39,121820,121821],{"class":1319}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[39,121823,121824],{"class":41,"line":99},[39,121825,121826],{"class":102}," # 查看本路径下的需要软链接的文件名\n",[39,121828,121829],{"class":41,"line":106},[39,121830,121831],{"class":3021}," ls\n",[19,121833,121834],{},[269,121835],{"alt":34,"src":121836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121838,121839,121840,19466,121843,19466,121846,121849],{},"如上图，我需要将",[36,121841,121842],{},"libcudnn_xxx_xxxxx.so.8.9.7",[36,121844,121845],{},"libcudnn_xxx_xxxxx.so.8",[36,121847,121848],{},"libcudnn_xxx_xxxxx.so","软链接",[29,121851,121853],{"className":119468,"code":121852,"language":119470,"meta":34,"style":34},"# 创建符号链接。对于每个 .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",[36,121854,121855,121860,121876,121890,121904,121918,121932,121946,121960,121965,121971,121976],{"__ignoreMap":34},[39,121856,121857],{"class":41,"line":42},[39,121858,121859],{"class":102},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[39,121861,121862,121864,121867,121870,121873],{"class":41,"line":74},[39,121863,25633],{"class":3021},[39,121865,121866],{"class":1319}," ln",[39,121868,121869],{"class":56}," -sf",[39,121871,121872],{"class":1319}," libcudnn_cnn_train.so.8.9.7",[39,121874,121875],{"class":1319}," libcudnn_cnn_train.so.8\n",[39,121877,121878,121880,121882,121884,121887],{"class":41,"line":99},[39,121879,25633],{"class":3021},[39,121881,121866],{"class":1319},[39,121883,121869],{"class":56},[39,121885,121886],{"class":1319}," libcudnn_adv_infer.so.8.9.7",[39,121888,121889],{"class":1319}," libcudnn_adv_infer.so.8\n",[39,121891,121892,121894,121896,121898,121901],{"class":41,"line":106},[39,121893,25633],{"class":3021},[39,121895,121866],{"class":1319},[39,121897,121869],{"class":56},[39,121899,121900],{"class":1319}," libcudnn_adv_train.so.8.9.7",[39,121902,121903],{"class":1319}," libcudnn_adv_train.so.8\n",[39,121905,121906,121908,121910,121912,121915],{"class":41,"line":112},[39,121907,25633],{"class":3021},[39,121909,121866],{"class":1319},[39,121911,121869],{"class":56},[39,121913,121914],{"class":1319}," libcudnn_cnn_infer.so.8.9.7",[39,121916,121917],{"class":1319}," libcudnn_cnn_infer.so.8\n",[39,121919,121920,121922,121924,121926,121929],{"class":41,"line":118},[39,121921,25633],{"class":3021},[39,121923,121866],{"class":1319},[39,121925,121869],{"class":56},[39,121927,121928],{"class":1319}," libcudnn.so.8.9.7",[39,121930,121931],{"class":1319}," libcudnn.so.8\n",[39,121933,121934,121936,121938,121940,121943],{"class":41,"line":413},[39,121935,25633],{"class":3021},[39,121937,121866],{"class":1319},[39,121939,121869],{"class":56},[39,121941,121942],{"class":1319}," libcudnn_ops_infer.so.8.9.7",[39,121944,121945],{"class":1319}," libcudnn_ops_infer.so.8\n",[39,121947,121948,121950,121952,121954,121957],{"class":41,"line":419},[39,121949,25633],{"class":3021},[39,121951,121866],{"class":1319},[39,121953,121869],{"class":56},[39,121955,121956],{"class":1319}," libcudnn_ops_train.so.8.9.7",[39,121958,121959],{"class":1319}," libcudnn_ops_train.so.8\n",[39,121961,121962],{"class":41,"line":425},[39,121963,121964],{"class":102},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[39,121966,121967,121969],{"class":41,"line":443},[39,121968,25633],{"class":3021},[39,121970,121755],{"class":1319},[39,121972,121973],{"class":41,"line":449},[39,121974,121975],{"class":102},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[39,121977,121978,121980,121983,121986,121988,121991],{"class":41,"line":455},[39,121979,27818],{"class":3021},[39,121981,121982],{"class":56}," -l",[39,121984,121985],{"class":1319}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[39,121987,1657],{"class":56},[39,121989,121990],{"class":1319},".so",[39,121992,120193],{"class":56},[1188,121994,121996],{"id":121995},"_355-常见问题","3.5.5 常见问题",[1171,121998,121999],{},[1174,122000,122001],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[29,122003,122005],{"className":119468,"code":122004,"language":119470,"meta":34,"style":34},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[36,122006,122007],{"__ignoreMap":34},[39,122008,122009,122011,122013],{"class":41,"line":42},[39,122010,25633],{"class":3021},[39,122012,119528],{"class":1319},[39,122014,122015],{"class":1319}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122017,122018],{},"blacklist-nouveau.conf文件内容如下：",[29,122020,122022],{"className":119468,"code":122021,"language":119470,"meta":34,"style":34},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[36,122023,122024,122032,122039,122051,122061],{"__ignoreMap":34},[39,122025,122026,122029],{"class":41,"line":42},[39,122027,122028],{"class":3021},"blacklist",[39,122030,122031],{"class":1319}," nouveau\n",[39,122033,122034,122036],{"class":41,"line":74},[39,122035,122028],{"class":3021},[39,122037,122038],{"class":1319}," lbm-nouveau\n",[39,122040,122041,122043,122046,122049],{"class":41,"line":99},[39,122042,116875],{"class":3021},[39,122044,122045],{"class":1319}," nouveau",[39,122047,122048],{"class":1319}," modeset=",[39,122050,4143],{"class":56},[39,122052,122053,122056,122058],{"class":41,"line":106},[39,122054,122055],{"class":56},"alias",[39,122057,122045],{"class":1319},[39,122059,122060],{"class":1319}," off\n",[39,122062,122063,122065,122068],{"class":41,"line":112},[39,122064,122055],{"class":56},[39,122066,122067],{"class":1319}," lbm-nouveau",[39,122069,122060],{"class":1319},[19,122071,122072],{},"接着运行下方命令",[29,122074,122076],{"className":119468,"code":122075,"language":119470,"meta":34,"style":34},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[36,122077,122078,122088,122093],{"__ignoreMap":34},[39,122079,122080,122082,122085],{"class":41,"line":42},[39,122081,25633],{"class":3021},[39,122083,122084],{"class":1319}," update-initramfs",[39,122086,122087],{"class":56}," -u\n",[39,122089,122090],{"class":41,"line":74},[39,122091,122092],{"class":3021},"或者\n",[39,122094,122095,122097,122100],{"class":41,"line":99},[39,122096,25633],{"class":3021},[39,122098,122099],{"class":1319}," dracut",[39,122101,122102],{"class":56}," --force\n",[19,122104,122105],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[29,122107,122109],{"className":119468,"code":122108,"language":119470,"meta":34,"style":34},"lsmod | grep nouveau\n",[36,122110,122111],{"__ignoreMap":34},[39,122112,122113,122116,122118,122120],{"class":41,"line":42},[39,122114,122115],{"class":3021},"lsmod",[39,122117,26166],{"class":49},[39,122119,31293],{"class":3021},[39,122121,122031],{"class":1319},[1171,122123,122124],{"start":74},[1174,122125,122126],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[29,122128,122130],{"className":119468,"code":122129,"language":119470,"meta":34,"style":34},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[36,122131,122132],{"__ignoreMap":34},[39,122133,122134,122136,122138],{"class":41,"line":42},[39,122135,25633],{"class":3021},[39,122137,119528],{"class":1319},[39,122139,122140],{"class":1319}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122142,122143],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[29,122145,122147],{"className":119468,"code":122146,"language":119470,"meta":34,"style":34},"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",[36,122148,122149,122157,122165,122173,122180,122188,122198,122206],{"__ignoreMap":34},[39,122150,122151,122154],{"class":41,"line":42},[39,122152,122153],{"class":3021},"Section",[39,122155,122156],{"class":1319}," \"OutputClass\"\n",[39,122158,122159,122162],{"class":41,"line":74},[39,122160,122161],{"class":3021},"   Identifier",[39,122163,122164],{"class":1319}," \"nvidia\"\n",[39,122166,122167,122170],{"class":41,"line":99},[39,122168,122169],{"class":3021},"   MatchDriver",[39,122171,122172],{"class":1319}," \"nvidia-drm\"\n",[39,122174,122175,122178],{"class":41,"line":106},[39,122176,122177],{"class":3021},"   Driver",[39,122179,122164],{"class":1319},[39,122181,122182,122185],{"class":41,"line":112},[39,122183,122184],{"class":3021},"   Option",[39,122186,122187],{"class":1319}," \"AllowEmptyInitialConfiguration\"\n",[39,122189,122190,122192,122195],{"class":41,"line":118},[39,122191,122184],{"class":3021},[39,122193,122194],{"class":1319}," \"PrimaryGPU\"",[39,122196,122197],{"class":1319}," \"yes\"\n",[39,122199,122200,122203],{"class":41,"line":413},[39,122201,122202],{"class":3021},"   ModulePath",[39,122204,122205],{"class":1319}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[39,122207,122208],{"class":41,"line":419},[39,122209,122210],{"class":3021},"EndSection\n",[1171,122212,122213],{"start":99},[1174,122214,122215],{},"安装N卡驱动提示错误",[29,122217,122219],{"className":121761,"code":122218,"language":121763,"meta":121764,"style":34},"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",[36,122220,122221],{"__ignoreMap":34},[39,122222,122223],{"class":41,"line":42},[39,122224,122218],{},[1171,122226,122227],{},[1174,122228,122229],{},"检查当前运行的内核版本：",[19,122231,122232],{},"运行以下命令以查看你当前正在使用的内核版本：",[29,122234,122236],{"className":118241,"code":122235,"language":118243,"meta":34,"style":34},"uname -r\n",[36,122237,122238],{"__ignoreMap":34},[39,122239,122240,122242],{"class":41,"line":42},[39,122241,71258],{"class":3021},[39,122243,122244],{"class":56}," -r\n",[1171,122246,122247],{"start":74},[1174,122248,122249],{},"安装内核开发文件：",[19,122251,122252,122253,122256],{},"确保你已经安装了与当前内核版本相匹配的 ",[36,122254,122255],{},"kernel-devel"," 包。运行以下命令来安装：",[29,122258,122260],{"className":118241,"code":122259,"language":118243,"meta":34,"style":34},"sudo dnf install kernel-devel-$(uname -r)\n",[36,122261,122262],{"__ignoreMap":34},[39,122263,122264,122266,122268,122270,122273,122275,122277,122279],{"class":41,"line":42},[39,122265,25633],{"class":3021},[39,122267,27372],{"class":1319},[39,122269,24890],{"class":1319},[39,122271,122272],{"class":1319}," kernel-devel-",[39,122274,26156],{"class":45},[39,122276,71258],{"class":3021},[39,122278,120584],{"class":56},[39,122280,209],{"class":45},[19,122282,122283],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[1171,122285,122286],{"start":99},[1174,122287,122288],{},"安装内核源代码（如果需要）：",[19,122290,122291],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[29,122293,122295],{"className":118241,"code":122294,"language":118243,"meta":34,"style":34},"sudo dnf install kernel-headers kernel-source\n",[36,122296,122297],{"__ignoreMap":34},[39,122298,122299,122301,122303,122305,122308],{"class":41,"line":42},[39,122300,25633],{"class":3021},[39,122302,27372],{"class":1319},[39,122304,24890],{"class":1319},[39,122306,122307],{"class":1319}," kernel-headers",[39,122309,122310],{"class":1319}," kernel-source\n",[1171,122312,122313],{"start":106},[1174,122314,122315],{},"检查安装：",[19,122317,122318,122319,122322],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[36,122320,122321],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[29,122324,122326],{"className":118241,"code":122325,"language":118243,"meta":34,"style":34},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[36,122327,122328],{"__ignoreMap":34},[39,122329,122330,122332],{"class":41,"line":42},[39,122331,27818],{"class":3021},[39,122333,122334],{"class":1319}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,122336,122337,122338,122341],{},"如果仍然遇到问题，可以通过 ",[36,122339,122340],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1133,122343,122344],{},"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":34,"searchDepth":74,"depth":74,"links":122346},[122347,122351,122361,122365,122366],{"id":119444,"depth":74,"text":119445,"children":122348},[122349,122350],{"id":119454,"depth":99,"text":119455},{"id":119464,"depth":99,"text":119465},{"id":119664,"depth":74,"text":119665,"children":122352},[122353,122354,122355,122356,122357,122358,122359,122360],{"id":119668,"depth":99,"text":119669},{"id":119738,"depth":99,"text":119739},{"id":119827,"depth":99,"text":119828},{"id":120072,"depth":99,"text":120073},{"id":120142,"depth":99,"text":120143},{"id":120209,"depth":99,"text":120210},{"id":120244,"depth":99,"text":120245},{"id":120299,"depth":99,"text":120300},{"id":120350,"depth":74,"text":120351,"children":122362},[122363,122364],{"id":120354,"depth":99,"text":120355},{"id":120434,"depth":99,"text":120435},{"id":120620,"depth":74,"text":120621},{"id":120793,"depth":74,"text":120794,"children":122367},[122368,122369,122370,122371,122372],{"id":120797,"depth":99,"text":120798},{"id":120838,"depth":99,"text":120839},{"id":121125,"depth":99,"text":121126},{"id":121499,"depth":99,"text":121500},{"id":121995,"depth":99,"text":121996},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119436,"description":1142},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122379,"title":122380,"body":122381,"description":1142,"extension":1143,"meta":122721,"navigation":1145,"path":122722,"seo":122723,"stem":122724,"__hash__":122725},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122382,"toc":122719},[122383,122386,122391,122394,122640,122645,122648,122684,122687,122716],[10,122384,122380],{"id":122385},"_4-命令教程长期积累",[1171,122387,122388],{},[1174,122389,122390],{},"大多数命令",[19,122392,122393],{},"常用 Linux 命令速查：",[29,122395,122397],{"className":118241,"code":122396,"language":118243,"meta":34,"style":34},"# 文件与目录\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",[36,122398,122399,122404,122411,122418,122426,122433,122440,122448,122456,122463,122470,122478,122482,122487,122494,122502,122509,122513,122518,122525,122533,122541,122549,122557,122561,122566,122574,122581,122588,122596,122604,122608,122613,122622,122631],{"__ignoreMap":34},[39,122400,122401],{"class":41,"line":42},[39,122402,122403],{"class":102},"# 文件与目录\n",[39,122405,122406,122408],{"class":41,"line":74},[39,122407,27818],{"class":3021},[39,122409,122410],{"class":102},"        # 列出目录内容\n",[39,122412,122413,122415],{"class":41,"line":99},[39,122414,102221],{"class":56},[39,122416,122417],{"class":102},"        # 切换目录\n",[39,122419,122420,122423],{"class":41,"line":106},[39,122421,122422],{"class":56},"pwd",[39,122424,122425],{"class":102},"       # 显示当前路径\n",[39,122427,122428,122430],{"class":41,"line":112},[39,122429,102211],{"class":3021},[39,122431,122432],{"class":102},"     # 创建目录\n",[39,122434,122435,122437],{"class":41,"line":118},[39,122436,26379],{"class":3021},[39,122438,122439],{"class":102},"        # 删除文件或目录\n",[39,122441,122442,122445],{"class":41,"line":413},[39,122443,122444],{"class":3021},"cp",[39,122446,122447],{"class":102},"        # 复制文件或目录\n",[39,122449,122450,122453],{"class":41,"line":419},[39,122451,122452],{"class":3021},"mv",[39,122454,122455],{"class":102},"        # 移动\u002F重命名文件或目录\n",[39,122457,122458,122460],{"class":41,"line":425},[39,122459,102228],{"class":3021},[39,122461,122462],{"class":102},"     # 创建空文件\n",[39,122464,122465,122467],{"class":41,"line":443},[39,122466,121710],{"class":3021},[39,122468,122469],{"class":102},"       # 查看文件内容\n",[39,122471,122472,122475],{"class":41,"line":449},[39,122473,122474],{"class":3021},"head\u002Ftail",[39,122476,122477],{"class":102}," # 查看文件头部\u002F尾部\n",[39,122479,122480],{"class":41,"line":455},[39,122481,3458],{"emptyLinePlaceholder":1145},[39,122483,122484],{"class":41,"line":461},[39,122485,122486],{"class":102},"# 权限管理\n",[39,122488,122489,122491],{"class":41,"line":475},[39,122490,25668],{"class":3021},[39,122492,122493],{"class":102},"     # 修改文件权限\n",[39,122495,122496,122499],{"class":41,"line":665},[39,122497,122498],{"class":3021},"chown",[39,122500,122501],{"class":102},"     # 修改文件所有者\n",[39,122503,122504,122506],{"class":41,"line":671},[39,122505,25633],{"class":3021},[39,122507,122508],{"class":102},"      # 以管理员身份执行\n",[39,122510,122511],{"class":41,"line":684},[39,122512,3458],{"emptyLinePlaceholder":1145},[39,122514,122515],{"class":41,"line":2732},[39,122516,122517],{"class":102},"# 系统信息\n",[39,122519,122520,122522],{"class":41,"line":2737},[39,122521,71258],{"class":3021},[39,122523,122524],{"class":102},"     # 系统信息\n",[39,122526,122527,122530],{"class":41,"line":2751},[39,122528,122529],{"class":3021},"df",[39,122531,122532],{"class":102},"        # 磁盘使用情况\n",[39,122534,122535,122538],{"class":41,"line":2756},[39,122536,122537],{"class":3021},"free",[39,122539,122540],{"class":102},"      # 内存使用情况\n",[39,122542,122543,122546],{"class":41,"line":2785},[39,122544,122545],{"class":3021},"top\u002Fhtop",[39,122547,122548],{"class":102},"  # 进程监控\n",[39,122550,122551,122554],{"class":41,"line":2790},[39,122552,122553],{"class":3021},"ps",[39,122555,122556],{"class":102},"        # 查看进程\n",[39,122558,122559],{"class":41,"line":2807},[39,122560,3458],{"emptyLinePlaceholder":1145},[39,122562,122563],{"class":41,"line":2812},[39,122564,122565],{"class":102},"# 网络\n",[39,122567,122568,122571],{"class":41,"line":2817},[39,122569,122570],{"class":3021},"ping",[39,122572,122573],{"class":102},"      # 测试网络连通性\n",[39,122575,122576,122578],{"class":41,"line":2822},[39,122577,27906],{"class":3021},[39,122579,122580],{"class":102},"      # 发送 HTTP 请求\n",[39,122582,122583,122585],{"class":41,"line":2836},[39,122584,121234],{"class":3021},[39,122586,122587],{"class":102},"      # 下载文件\n",[39,122589,122590,122593],{"class":41,"line":2841},[39,122591,122592],{"class":3021},"ssh",[39,122594,122595],{"class":102},"       # 远程登录\n",[39,122597,122598,122601],{"class":41,"line":3635},[39,122599,122600],{"class":3021},"scp",[39,122602,122603],{"class":102},"       # 远程文件传输\n",[39,122605,122606],{"class":41,"line":3649},[39,122607,3458],{"emptyLinePlaceholder":1145},[39,122609,122610],{"class":41,"line":3657},[39,122611,122612],{"class":102},"# 包管理（Debian\u002FUbuntu）\n",[39,122614,122615,122617,122619],{"class":41,"line":3662},[39,122616,118313],{"class":3021},[39,122618,118292],{"class":1319},[39,122620,122621],{"class":102},"   # 更新软件源\n",[39,122623,122624,122626,122628],{"class":41,"line":3668},[39,122625,118313],{"class":3021},[39,122627,24890],{"class":1319},[39,122629,122630],{"class":102},"  # 安装软件包\n",[39,122632,122633,122635,122637],{"class":41,"line":3674},[39,122634,118313],{"class":3021},[39,122636,27136],{"class":1319},[39,122638,122639],{"class":102},"   # 卸载软件包\n",[1171,122641,122642],{"start":74},[1174,122643,122644],{},"KDE Dolphin 以root打开",[19,122646,122647],{},"kde5",[29,122649,122651],{"className":118241,"code":122650,"language":118243,"meta":34,"style":34},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[36,122652,122653],{"__ignoreMap":34},[39,122654,122655,122658,122661,122664,122666,122668,122671,122674,122676,122679,122681],{"class":41,"line":42},[39,122656,122657],{"class":3021},"pkexec",[39,122659,122660],{"class":1319}," env",[39,122662,122663],{"class":1319}," DISPLAY=",[39,122665,29200],{"class":45},[39,122667,29258],{"class":1319},[39,122669,122670],{"class":45},"$XAUTHORITY ",[39,122672,122673],{"class":1319},"KDE_SESSION_VERSION=",[39,122675,89],{"class":56},[39,122677,122678],{"class":1319}," KDE_FULL_SESSION=",[39,122680,2428],{"class":56},[39,122682,122683],{"class":1319}," dolphin\n",[19,122685,122686],{},"kde6",[29,122688,122690],{"className":118241,"code":122689,"language":118243,"meta":34,"style":34},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[36,122691,122692],{"__ignoreMap":34},[39,122693,122694,122696,122698,122700,122702,122704,122706,122708,122710,122712,122714],{"class":41,"line":42},[39,122695,122657],{"class":3021},[39,122697,122660],{"class":1319},[39,122699,122663],{"class":1319},[39,122701,29200],{"class":45},[39,122703,29258],{"class":1319},[39,122705,122670],{"class":45},[39,122707,122673],{"class":1319},[39,122709,94],{"class":56},[39,122711,122678],{"class":1319},[39,122713,2428],{"class":56},[39,122715,122683],{"class":1319},[1133,122717,122718],{},"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":34,"searchDepth":74,"depth":74,"links":122720},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122380,"description":1142},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122727,"title":122728,"body":122729,"description":1142,"extension":1143,"meta":122743,"navigation":1145,"path":122744,"seo":122745,"stem":122746,"__hash__":122747},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122730,"toc":122741},[122731,122734],[10,122732,122728],{"id":122733},"_5-各种环境配置",[19,122735,122736],{},[46,122737,122740],{"href":122738,"rel":122739},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24921],"电控组环境搭建大全",{"title":34,"searchDepth":74,"depth":74,"links":122742},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122728,"description":1142},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122749,"title":122750,"body":122751,"description":1142,"extension":1143,"meta":123099,"navigation":1145,"path":123100,"seo":123101,"stem":123102,"__hash__":123103},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122752,"toc":123091},[122753,122756,122760,122764,122768,122773,122780,122784,123077,123081,123088],[10,122754,122750],{"id":122755},"_6-拓展功能",[14,122757,122759],{"id":122758},"_61-wine","6.1 Wine",[14,122761,122763],{"id":122762},"_62-android","6.2 Android",[1188,122765,122767],{"id":122766},"_621-i卡a卡","6.2.1 I卡、A卡",[1171,122769,122770],{},[1174,122771,122772],{},"Wayland-Waydroid(体验超级好)",[19,122774,122775,122776],{},"Waydroid 官网与安装指南：",[46,122777,122778],{"href":122778,"rel":122779},"https:\u002F\u002Fwaydro.id\u002F",[24921],[1188,122781,122783],{"id":122782},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[1171,122785,122786],{},[1174,122787,122788,122789,122791,122792,122796,122798,122801,122806,123003],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54770,122790],{},"BlissOS 官网下载：",[46,122793,122794],{"href":122794,"rel":122795},"https:\u002F\u002Fblissos.org\u002F",[24921],[54770,122797],{},[269,122799],{"alt":34,"src":122800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[1171,122802,122803],{"start":99},[1174,122804,122805],{},"比较推荐的配置",[29,122807,122809],{"className":118241,"code":122808,"language":118243,"meta":34,"style":34},"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",[36,122810,122811,122818,122828,122838,122848,122860,122870,122877,122887,122896,122905,122915,122925,122934,122944,122954,122966,122976,122985,122995],{"__ignoreMap":34},[39,122812,122813,122816],{"class":41,"line":42},[39,122814,122815],{"class":3021},"qemu-system-x86_64",[39,122817,25735],{"class":56},[39,122819,122820,122823,122826],{"class":41,"line":74},[39,122821,122822],{"class":56},"        -M",[39,122824,122825],{"class":1319}," q35,vmport=off",[39,122827,25735],{"class":56},[39,122829,122830,122833,122836],{"class":41,"line":99},[39,122831,122832],{"class":56},"        -accel",[39,122834,122835],{"class":1319}," kvm",[39,122837,25735],{"class":56},[39,122839,122840,122843,122846],{"class":41,"line":106},[39,122841,122842],{"class":56},"        -cpu",[39,122844,122845],{"class":1319}," qemu64,+sse3,+sse4.2",[39,122847,25735],{"class":56},[39,122849,122850,122853,122856,122858],{"class":41,"line":112},[39,122851,122852],{"class":56},"        -smp",[39,122854,122855],{"class":1319}," 8,cores=",[39,122857,84],{"class":56},[39,122859,25735],{"class":56},[39,122861,122862,122865,122868],{"class":41,"line":118},[39,122863,122864],{"class":56},"        -m",[39,122866,122867],{"class":1319}," 6G",[39,122869,25735],{"class":56},[39,122871,122872,122875],{"class":41,"line":413},[39,122873,122874],{"class":56},"        -usb",[39,122876,25735],{"class":56},[39,122878,122879,122882,122885],{"class":41,"line":419},[39,122880,122881],{"class":56},"        -device",[39,122883,122884],{"class":1319}," virtio-tablet",[39,122886,25735],{"class":56},[39,122888,122889,122891,122894],{"class":41,"line":425},[39,122890,122881],{"class":56},[39,122892,122893],{"class":1319}," virtio-keyboard",[39,122895,25735],{"class":56},[39,122897,122898,122900,122903],{"class":41,"line":443},[39,122899,122881],{"class":56},[39,122901,122902],{"class":1319}," usb-tablet",[39,122904,25735],{"class":56},[39,122906,122907,122910,122913],{"class":41,"line":449},[39,122908,122909],{"class":56},"        -bios",[39,122911,122912],{"class":1319}," OVMF-pure-efi64.fd",[39,122914,25735],{"class":56},[39,122916,122917,122920,122923],{"class":41,"line":455},[39,122918,122919],{"class":56},"        -net",[39,122921,122922],{"class":1319}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[39,122924,25735],{"class":56},[39,122926,122927,122929,122932],{"class":41,"line":461},[39,122928,122919],{"class":56},[39,122930,122931],{"class":1319}," nic,model=virtio",[39,122933,25735],{"class":56},[39,122935,122936,122939,122942],{"class":41,"line":475},[39,122937,122938],{"class":56},"        -audio",[39,122940,122941],{"class":1319}," sdl,model=hda",[39,122943,25735],{"class":56},[39,122945,122946,122949,122952],{"class":41,"line":665},[39,122947,122948],{"class":56},"        -display",[39,122950,122951],{"class":1319}," sdl,gl=on,show-cursor=on",[39,122953,25735],{"class":56},[39,122955,122956,122958,122961,122964],{"class":41,"line":671},[39,122957,122881],{"class":56},[39,122959,122960],{"class":1319}," virtio-vga-gl,xres=1920,yres=",[39,122962,122963],{"class":56},"1080",[39,122965,25735],{"class":56},[39,122967,122968,122971,122974],{"class":41,"line":684},[39,122969,122970],{"class":56},"        -drive",[39,122972,122973],{"class":1319}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[39,122975,25735],{"class":56},[39,122977,122978,122980,122983],{"class":41,"line":2732},[39,122979,122970],{"class":56},[39,122981,122982],{"class":1319}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[39,122984,25735],{"class":56},[39,122986,122987,122990,122993],{"class":41,"line":2737},[39,122988,122989],{"class":56},"        -monitor",[39,122991,122992],{"class":1319}," stdio",[39,122994,25735],{"class":56},[39,122996,122997,123000],{"class":41,"line":2751},[39,122998,122999],{"class":56},"        -serial",[39,123001,123002],{"class":1319}," none\n",[1171,123004,123005],{"start":112},[1174,123006,123007,123008],{},"常用操作：",[1171,123009,123010,123013,123069],{},[1174,123011,123012],{},"全屏：Ctrl+Alt+F",[1174,123014,123015,123016,123021],{},"adb调试",[1171,123017,123018],{},[1174,123019,123020],{},"使Linux与Android用ADB连接。",[29,123022,123024],{"className":118241,"code":123023,"language":118243,"meta":34,"style":34},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[36,123025,123026,123031,123042,123047,123059,123064],{"__ignoreMap":34},[39,123027,123028],{"class":41,"line":42},[39,123029,123030],{"class":102},"# 连接安卓\n",[39,123032,123033,123036,123039],{"class":41,"line":74},[39,123034,123035],{"class":3021},"adb",[39,123037,123038],{"class":1319}," connect",[39,123040,123041],{"class":56}," 127.0.0.1\n",[39,123043,123044],{"class":41,"line":99},[39,123045,123046],{"class":102},"# 打开shell\n",[39,123048,123049,123051,123053,123056],{"class":41,"line":106},[39,123050,123035],{"class":3021},[39,123052,27940],{"class":56},[39,123054,123055],{"class":1319}," 127.0.0.1:5555",[39,123057,123058],{"class":1319}," shell\n",[39,123060,123061],{"class":41,"line":112},[39,123062,123063],{"class":102},"# 使用root权限\n",[39,123065,123066],{"class":41,"line":118},[39,123067,123068],{"class":3021},"su\n",[1174,123070,123071,123072],{},"中文输入法",[1171,123073,123074],{},[1174,123075,123076],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123078,123080],{"id":123079},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123082,123083,123084],{},"rEFInd 官网与文档：",[46,123085,123086],{"href":123086,"rel":123087},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24921],[1133,123089,123090],{},"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":34,"searchDepth":74,"depth":74,"links":123092},[123093,123094,123098],{"id":122758,"depth":74,"text":122759},{"id":122762,"depth":74,"text":122763,"children":123095},[123096,123097],{"id":122766,"depth":99,"text":122767},{"id":122782,"depth":99,"text":122783},{"id":123079,"depth":74,"text":123080},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122750,"description":1142},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123105,"title":123106,"body":123107,"description":1142,"extension":1143,"meta":126406,"navigation":1145,"path":126407,"seo":126408,"stem":126409,"__hash__":126410},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123108,"toc":126380},[123109,123112,123116,123119,123126,123376,123379,123451,123454,123458,123462,123467,123470,123473,123476,123481,123484,123487,123490,123495,123498,123503,123506,123509,123514,123517,123522,123525,123529,123533,123536,123541,123544,123558,123561,123564,123573,123576,123585,123588,123591,123600,123603,123612,123615,123618,123627,123630,123633,123648,123651,123654,123663,123668,123671,123674,123683,123686,123695,123698,123707,123710,123719,123724,123727,123735,123740,123743,123752,123755,123763,123768,123771,123780,123783,123786,123790,123793,123798,123801,123806,123820,123825,123830,123841,123846,123852,123857,123872,123877,123880,123885,123890,123895,123903,123908,123915,123920,123931,123936,123939,123943,123946,123949,123954,123957,123976,123981,123984,123993,123998,124001,124023,124026,124056,124059,124064,124067,124081,124086,124105,124108,124111,124116,124128,124133,124138,124141,124146,124149,124164,124167,124172,124177,124181,124186,124226,124229,124233,124239,124245,124250,124253,124260,124265,124272,124275,124278,124285,124299,124302,124362,124365,124379,124391,124394,124397,124400,124464,124467,124470,124473,124493,124496,124501,124508,124512,124515,124519,124524,124529,124533,124536,124539,124581,124586,124589,124611,124626,124628,124633,124645,124705,124707,124709,124763,124765,124767,124773,124778,124781,124786,124790,124793,124855,124860,124863,124865,124869,124881,124963,124965,124967,125021,125027,125029,125033,125038,125040,125045,125049,125069,125104,125108,125111,125114,125117,125124,125127,125139,125142,125157,125160,125179,125227,125230,125247,125250,125264,125269,125272,125281,125296,125308,125346,125351,125360,125365,125370,125396,125405,125409,125413,125418,125421,125425,125429,125434,125437,125442,125445,125450,125453,125458,125461,125465,125470,125473,125478,125481,125485,125490,125493,125498,125501,125506,125509,125513,125518,125521,125526,125529,125534,125537,125541,125546,125549,125554,125557,125562,125565,125570,125573,125578,125581,125586,125589,125593,125598,125601,125606,125613,125617,125622,125625,125630,125633,125637,125642,125645,125648,125651,125654,125657,125661,125664,125674,125679,125684,125706,125711,125716,125723,125727,125732,125735,125738,125743,125746,125749,125752,125755,125758,125761,125764,125767,125770,125773,125776,125779,125784,125789,125794,125799,125804,125809,125814,125817,125821,125824,125828,125833,125838,125843,125848,125852,125858,125866,125871,125874,125879,125894,125897,125902,125936,125951,125954,126009,126035,126047,126050,126059,126062,126077,126082,126085,126091,126096,126099,126104,126107,126112,126117,126124,126127,126142,126145,126180,126185,126193,126231,126234,126237,126242,126245,126250,126261,126295,126300,126303,126312,126317,126323,126326,126331,126340,126345,126348,126351,126356,126364,126367,126372,126377],[10,123110,123106],{"id":123111},"_7-其他操作",[14,123113,123115],{"id":123114},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123117,123118],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123120,123121,123122,123125],{},"进入工控机的硬盘目录，进入",[36,123123,123124],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[29,123127,123131],{"className":123128,"code":123129,"language":123130,"meta":34,"style":34},"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",[36,123132,123133,123141,123152,123159,123166,123178,123185,123197,123208,123219,123226,123233,123240,123252,123264,123271,123283,123295,123302,123314,123326,123338,123349,123356,123367],{"__ignoreMap":34},[39,123134,123135,123138],{"class":41,"line":42},[39,123136,123137],{"class":52354},"network",[39,123139,123140],{"class":45},": \n",[39,123142,123143,123146,123148,123150],{"class":41,"line":74},[39,123144,123145],{"class":52354},"  version",[39,123147,52491],{"class":45},[39,123149,63],{"class":56},[39,123151,3732],{"class":45},[39,123153,123154,123157],{"class":41,"line":99},[39,123155,123156],{"class":52354},"  wifis",[39,123158,123140],{"class":45},[39,123160,123161,123164],{"class":41,"line":106},[39,123162,123163],{"class":52354},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[39,123165,123140],{"class":45},[39,123167,123168,123171,123173,123176],{"class":41,"line":112},[39,123169,123170],{"class":52354},"      renderer",[39,123172,52491],{"class":45},[39,123174,123175],{"class":1319},"NetworkManager",[39,123177,3732],{"class":45},[39,123179,123180,123183],{"class":41,"line":118},[39,123181,123182],{"class":52354},"      match",[39,123184,123140],{"class":45},[39,123186,123187,123190,123192,123195],{"class":41,"line":413},[39,123188,123189],{"class":52354},"        name",[39,123191,52491],{"class":45},[39,123193,123194],{"class":1319},"\"wlan0\"",[39,123196,3732],{"class":45},[39,123198,123199,123202,123204,123206],{"class":41,"line":419},[39,123200,123201],{"class":52354},"      dhcp4",[39,123203,52491],{"class":45},[39,123205,2428],{"class":56},[39,123207,3732],{"class":45},[39,123209,123210,123213,123215,123217],{"class":41,"line":425},[39,123211,123212],{"class":52354},"      dhcp6",[39,123214,52491],{"class":45},[39,123216,2428],{"class":56},[39,123218,3732],{"class":45},[39,123220,123221,123224],{"class":41,"line":443},[39,123222,123223],{"class":52354},"      access-points",[39,123225,123140],{"class":45},[39,123227,123228,123231],{"class":41,"line":449},[39,123229,123230],{"class":1319},"        \"EMIS_Vinci_Robocon_5G\"",[39,123232,123140],{"class":45},[39,123234,123235,123238],{"class":41,"line":455},[39,123236,123237],{"class":52354},"          auth",[39,123239,123140],{"class":45},[39,123241,123242,123245,123247,123250],{"class":41,"line":461},[39,123243,123244],{"class":52354},"            key-management",[39,123246,52491],{"class":45},[39,123248,123249],{"class":1319},"\"psk\"",[39,123251,3732],{"class":45},[39,123253,123254,123257,123259,123262],{"class":41,"line":475},[39,123255,123256],{"class":52354},"            password",[39,123258,52491],{"class":45},[39,123260,123261],{"class":1319},"\"vinci666\"",[39,123263,3732],{"class":45},[39,123265,123266,123269],{"class":41,"line":665},[39,123267,123268],{"class":52354},"          networkmanager",[39,123270,123140],{"class":45},[39,123272,123273,123276,123278,123281],{"class":41,"line":671},[39,123274,123275],{"class":52354},"            uuid",[39,123277,52491],{"class":45},[39,123279,123280],{"class":1319},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[39,123282,3732],{"class":45},[39,123284,123285,123288,123290,123293],{"class":41,"line":684},[39,123286,123287],{"class":52354},"            name",[39,123289,52491],{"class":45},[39,123291,123292],{"class":1319},"\"EMIS_Vinci_Robocon_5G\"",[39,123294,3732],{"class":45},[39,123296,123297,123300],{"class":41,"line":2732},[39,123298,123299],{"class":52354},"            passthrough",[39,123301,123140],{"class":45},[39,123303,123304,123307,123309,123312],{"class":41,"line":2737},[39,123305,123306],{"class":52354},"              wifi-security.auth-alg",[39,123308,52491],{"class":45},[39,123310,123311],{"class":1319},"\"open\"",[39,123313,3732],{"class":45},[39,123315,123316,123319,123321,123324],{"class":41,"line":2751},[39,123317,123318],{"class":52354},"              ipv6.addr-gen-mode",[39,123320,52491],{"class":45},[39,123322,123323],{"class":1319},"\"default\"",[39,123325,3732],{"class":45},[39,123327,123328,123331,123333,123336],{"class":41,"line":2756},[39,123329,123330],{"class":52354},"              ipv6.ip6-privacy",[39,123332,52491],{"class":45},[39,123334,123335],{"class":1319},"\"-1\"",[39,123337,3732],{"class":45},[39,123339,123340,123343,123345,123347],{"class":41,"line":2785},[39,123341,123342],{"class":52354},"              proxy._",[39,123344,52491],{"class":45},[39,123346,8708],{"class":1319},[39,123348,3732],{"class":45},[39,123350,123351,123354],{"class":41,"line":2790},[39,123352,123353],{"class":52354},"      networkmanager",[39,123355,123140],{"class":45},[39,123357,123358,123361,123363,123365],{"class":41,"line":2807},[39,123359,123360],{"class":52354},"        uuid",[39,123362,52491],{"class":45},[39,123364,123280],{"class":1319},[39,123366,3732],{"class":45},[39,123368,123369,123371,123373],{"class":41,"line":2812},[39,123370,123189],{"class":52354},[39,123372,52491],{"class":45},[39,123374,123375],{"class":1319},"\"EMIS_Vinci_Robocon_5G\"\n",[19,123377,123378],{},"将其改为新wifi的名和密码：",[29,123380,123382],{"className":123128,"code":123381,"language":123130,"meta":34,"style":34},"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",[36,123383,123384,123390,123399,123405,123412,123421,123429,123435,123441],{"__ignoreMap":34},[39,123385,123386,123388],{"class":41,"line":42},[39,123387,123137],{"class":52354},[39,123389,4797],{"class":45},[39,123391,123392,123394,123396],{"class":41,"line":74},[39,123393,123145],{"class":52354},[39,123395,52491],{"class":45},[39,123397,123398],{"class":56},"2\n",[39,123400,123401,123403],{"class":41,"line":99},[39,123402,123156],{"class":52354},[39,123404,4797],{"class":45},[39,123406,123407,123410],{"class":41,"line":106},[39,123408,123409],{"class":52354},"    wlan0",[39,123411,4797],{"class":45},[39,123413,123414,123416,123418],{"class":41,"line":112},[39,123415,123201],{"class":52354},[39,123417,52491],{"class":45},[39,123419,123420],{"class":56},"true\n",[39,123422,123423,123425,123427],{"class":41,"line":118},[39,123424,123212],{"class":52354},[39,123426,52491],{"class":45},[39,123428,123420],{"class":56},[39,123430,123431,123433],{"class":41,"line":413},[39,123432,123223],{"class":52354},[39,123434,4797],{"class":45},[39,123436,123437,123439],{"class":41,"line":419},[39,123438,123230],{"class":1319},[39,123440,4797],{"class":45},[39,123442,123443,123446,123448],{"class":41,"line":425},[39,123444,123445],{"class":52354},"          password",[39,123447,52491],{"class":45},[39,123449,123450],{"class":1319},"\"vinci666\"\n",[19,123452,123453],{},"工控机开机即可连上网。",[14,123455,123457],{"id":123456},"_72-ssh远程开发","7.2 SSH远程开发",[1188,123459,123461],{"id":123460},"_721-环境准备","7.2.1 环境准备",[19,123463,123464],{},[304,123465,123466],{},"1.硬件准备",[19,123468,123469],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123471,123472],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123474,123475],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123477,123478],{},[304,123479,123480],{},"2.设置固定IP",[19,123482,123483],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123485,123486],{},"1.进入设置界面",[19,123488,123489],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123491,123492],{},[269,123493],{"alt":34,"src":123494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123496,123497],{},"2.配置所连接的网络",[19,123499,123500],{},[269,123501],{"alt":34,"src":123502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123504,123505],{},"3.设置固定IP",[19,123507,123508],{},"查看当前IP地址。",[19,123510,123511],{},[269,123512],{"alt":34,"src":123513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,123515,123516],{},"设置固定IP。",[19,123518,123519],{},[269,123520],{"alt":34,"src":123521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,123523,123524],{},"至此，IP配置完毕。",[1188,123526,123528],{"id":123527},"_722-环境搭建","7.2.2 环境搭建",[19,123530,123531],{},[304,123532,26810],{},[19,123534,123535],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,123537,123538],{},[304,123539,123540],{},"实现",[19,123542,123543],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[1171,123545,123546,123549,123552,123555],{},[1174,123547,123548],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[1174,123550,123551],{},"远程主机启动SSH服务；",[1174,123553,123554],{},"本地主机登陆远程主机；",[1174,123556,123557],{},"实现数据传输。",[19,123559,123560],{},"1.安装SSH客户端与服务端",[19,123562,123563],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[29,123565,123567],{"className":121761,"code":123566,"language":121763,"meta":121764,"style":34}," sudo apt install openssh-server\n",[36,123568,123569],{"__ignoreMap":34},[39,123570,123571],{"class":41,"line":42},[39,123572,123566],{},[19,123574,123575],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[29,123577,123579],{"className":121761,"code":123578,"language":121763,"meta":121764,"style":34},"sudo apt install openssh-client\n",[36,123580,123581],{"__ignoreMap":34},[39,123582,123583],{"class":41,"line":42},[39,123584,123578],{},[19,123586,123587],{},"2.远程主机启动SSH服务",[19,123589,123590],{},"远程主机启动 ssh 服务命令如下：",[29,123592,123594],{"className":121761,"code":123593,"language":121763,"meta":121764,"style":34},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[36,123595,123596],{"__ignoreMap":34},[39,123597,123598],{"class":41,"line":42},[39,123599,123593],{},[19,123601,123602],{},"启动后可使用如下命令查看服务是否正常运行：",[29,123604,123606],{"className":121761,"code":123605,"language":121763,"meta":121764,"style":34},"ps -e | grep ssh\n",[36,123607,123608],{"__ignoreMap":34},[39,123609,123610],{"class":41,"line":42},[39,123611,123605],{},[19,123613,123614],{},"如果启动成功，会包含 sshd 程序。",[19,123616,123617],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[29,123619,123621],{"className":121761,"code":123620,"language":121763,"meta":121764,"style":34},"sudo systemctl enable ssh\n",[36,123622,123623],{"__ignoreMap":34},[39,123624,123625],{"class":41,"line":42},[39,123626,123620],{},[19,123628,123629],{},"3.本地远程登录",[19,123631,123632],{},"登录远程主机可以调用如下命令:",[29,123634,123636],{"className":118241,"code":123635,"language":118243,"meta":34,"style":34},"ssh -X 用户名@ip地址\n",[36,123637,123638],{"__ignoreMap":34},[39,123639,123640,123642,123645],{"class":41,"line":42},[39,123641,122592],{"class":3021},[39,123643,123644],{"class":56}," -X",[39,123646,123647],{"class":1319}," 用户名@ip地址\n",[19,123649,123650],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,123652,123653],{},"如果退出，可以调用exit命令：",[29,123655,123657],{"className":121761,"code":123656,"language":121763,"meta":121764,"style":34},"exit\n",[36,123658,123659],{"__ignoreMap":34},[39,123660,123661],{"class":41,"line":42},[39,123662,123656],{},[19,123664,123665],{},[304,123666,123667],{},"4.实现数据传输",[19,123669,123670],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,123672,123673],{},"上传文件指令格式如下：",[29,123675,123677],{"className":121761,"code":123676,"language":121763,"meta":121764,"style":34},"scp 本地文件路径 账号@ip:路径\n",[36,123678,123679],{"__ignoreMap":34},[39,123680,123681],{"class":41,"line":42},[39,123682,123676],{},[19,123684,123685],{},"上传文件夹指令格式如下：",[29,123687,123689],{"className":121761,"code":123688,"language":121763,"meta":121764,"style":34},"scp -r 本地文件夹路径 账号@ip:路径\n",[36,123690,123691],{"__ignoreMap":34},[39,123692,123693],{"class":41,"line":42},[39,123694,123688],{},[19,123696,123697],{},"下载文件指令格式如下：",[29,123699,123701],{"className":121761,"code":123700,"language":121763,"meta":121764,"style":34},"scp 账号@ip:路径 本地文件夹路径\n",[36,123702,123703],{"__ignoreMap":34},[39,123704,123705],{"class":41,"line":42},[39,123706,123700],{},[19,123708,123709],{},"下载文件夹指令格式如下：",[29,123711,123713],{"className":121761,"code":123712,"language":121763,"meta":121764,"style":34},"scp -r 账号@ip:路径 本地文件夹路径\n",[36,123714,123715],{"__ignoreMap":34},[39,123716,123717],{"class":41,"line":42},[39,123718,123712],{},[19,123720,123721],{},[304,123722,123723],{},"优化",[19,123725,123726],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[1171,123728,123729,123732],{},[1174,123730,123731],{},"本地生成密钥对；",[1174,123733,123734],{},"将公钥上传至远程主机。",[19,123736,123737],{},[304,123738,123739],{},"1.生成密钥对",[19,123741,123742],{},"本地客户端生成公私钥：（一路回车默认即可）",[29,123744,123746],{"className":121761,"code":123745,"language":121763,"meta":121764,"style":34},"ssh-keygen\n",[36,123747,123748],{"__ignoreMap":34},[39,123749,123750],{"class":41,"line":42},[39,123751,123745],{},[19,123753,123754],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[1171,123756,123757,123760],{},[1174,123758,123759],{},"id_rsa （私钥）；",[1174,123761,123762],{},"id_rsa.pub (公钥)。",[19,123764,123765],{},[304,123766,123767],{},"2.公钥上传",[19,123769,123770],{},"上传指令如下：",[29,123772,123774],{"className":121761,"code":123773,"language":121763,"meta":121764,"style":34},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[36,123775,123776],{"__ignoreMap":34},[39,123777,123778],{"class":41,"line":42},[39,123779,123773],{},[19,123781,123782],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,123784,123785],{},"以后再远程登录就无需录入密码了。",[1188,123787,123789],{"id":123788},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,123791,123792],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,123794,123795],{},[304,123796,123797],{},"1.准备工作",[19,123799,123800],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123802,123803],{},[304,123804,123805],{},"2.为VScode安装远程开发插件",[19,123807,123808,123809,123812,123813,123816,123817,29442],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[36,123810,123811],{},"扩展：商店","的搜索栏输入",[36,123814,123815],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[36,123818,123819],{},"安装",[19,123821,123822],{},[269,123823],{"alt":34,"src":123824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123826,123827],{},[304,123828,123829],{},"3.配置远程连接",[19,123831,123832,123833,123836,123837,123840],{},"步骤1：使用快捷键",[36,123834,123835],{},"ctrl + shift + p","打开命令输入窗口，并输入",[36,123838,123839],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123842,123843],{},[269,123844],{"alt":34,"src":123845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123847,123848,123849,29442],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[36,123850,123851],{},"Add New SSH Host",[19,123853,123854],{},[269,123855],{"alt":34,"src":123856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123858,123859,123860,123863,123864,123867,123868,123871],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[36,123861,123862],{},"ssh +X ubuntu@192.168.43.164","，其中，",[36,123865,123866],{},"ubuntu","需要替换为你的登录用户名，",[36,123869,123870],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123873,123874],{},[269,123875],{"alt":34,"src":123876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123878,123879],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123881,123882],{},[269,123883],{"alt":34,"src":123884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123886,123887],{},[269,123888],{"alt":34,"src":123889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123891,123892],{},[304,123893,123894],{},"4.使用",[19,123896,123897,123898,123836,123900,123902],{},"步骤1：继续使用快捷键",[36,123899,123835],{},[36,123901,123839],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123904,123905],{},[269,123906],{"alt":34,"src":123907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123909,123910,123911,123914],{},"或者，也可以点击侧边栏的",[36,123912,123913],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123916,123917],{},[269,123918],{"alt":34,"src":123919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123921,123922,123923,123926,123927,123930],{},"步骤2：选择菜单栏的",[36,123924,123925],{},"文件","下的",[36,123928,123929],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123932,123933],{},[269,123934],{"alt":34,"src":123935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123937,123938],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123940,123942],{"id":123941},"_73-远程桌面","7.3 远程桌面",[19,123944,123945],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123947,123948],{},"我们选择使用VNC来看。",[1171,123950,123951],{},[1174,123952,123953],{},"安装VNC服务器：",[19,123955,123956],{},"这里以TigerVNC为例进行安装：",[29,123958,123960],{"className":118241,"code":123959,"language":118243,"meta":34,"style":34},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[36,123961,123962],{"__ignoreMap":34},[39,123963,123964,123966,123968,123970,123973],{"class":41,"line":42},[39,123965,25633],{"class":3021},[39,123967,118262],{"class":1319},[39,123969,24890],{"class":1319},[39,123971,123972],{"class":1319}," tigervnc-standalone-server",[39,123974,123975],{"class":1319}," tigervnc-common\n",[1171,123977,123978],{"start":74},[1174,123979,123980],{},"设置VNC密码：",[19,123982,123983],{},"为VNC用户设置密码，运行以下命令：",[29,123985,123987],{"className":118241,"code":123986,"language":118243,"meta":34,"style":34},"vncpasswd\n",[36,123988,123989],{"__ignoreMap":34},[39,123990,123991],{"class":41,"line":42},[39,123992,123986],{"class":3021},[1171,123994,123995],{"start":99},[1174,123996,123997],{},"配置VNC启动脚本:",[19,123999,124000],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[29,124002,124004],{"className":118241,"code":124003,"language":118243,"meta":34,"style":34},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[36,124005,124006,124015],{"__ignoreMap":34},[39,124007,124008,124010,124012],{"class":41,"line":42},[39,124009,102211],{"class":3021},[39,124011,30273],{"class":56},[39,124013,124014],{"class":1319}," ~\u002F.vnc\n",[39,124016,124017,124020],{"class":41,"line":74},[39,124018,124019],{"class":3021},"nano",[39,124021,124022],{"class":1319}," ~\u002F.vnc\u002Fxstartup\n",[19,124024,124025],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[29,124027,124029],{"className":118241,"code":124028,"language":118243,"meta":34,"style":34},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[36,124030,124031,124036,124044,124051],{"__ignoreMap":34},[39,124032,124033],{"class":41,"line":42},[39,124034,124035],{"class":102},"#!\u002Fbin\u002Fsh\n",[39,124037,124038,124041],{"class":41,"line":74},[39,124039,124040],{"class":56},"unset",[39,124042,124043],{"class":1319}," SESSION_MANAGER\n",[39,124045,124046,124048],{"class":41,"line":99},[39,124047,124040],{"class":56},[39,124049,124050],{"class":1319}," DBUS_SESSION_BUS_ADDRESS\n",[39,124052,124053],{"class":41,"line":106},[39,124054,124055],{"class":3021},"gnome-session\n",[19,124057,124058],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[1171,124060,124061],{"start":106},[1174,124062,124063],{},"给予执行权限：",[19,124065,124066],{},"为xstartup文件设置执行权限：",[29,124068,124070],{"className":118241,"code":124069,"language":118243,"meta":34,"style":34},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[36,124071,124072],{"__ignoreMap":34},[39,124073,124074,124076,124079],{"class":41,"line":42},[39,124075,25668],{"class":3021},[39,124077,124078],{"class":1319}," +x",[39,124080,124022],{"class":1319},[1171,124082,124083],{"start":112},[1174,124084,124085],{},"启动VNC服务器：",[29,124087,124089],{"className":118241,"code":124088,"language":118243,"meta":34,"style":34},"vncserver -geometry 1920x1080 -localhost=0\n",[36,124090,124091],{"__ignoreMap":34},[39,124092,124093,124096,124099,124102],{"class":41,"line":42},[39,124094,124095],{"class":3021},"vncserver",[39,124097,124098],{"class":56}," -geometry",[39,124100,124101],{"class":1319}," 1920x1080",[39,124103,124104],{"class":56}," -localhost=0\n",[19,124106,124107],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124109,124110],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[1171,124112,124113],{"start":118},[1174,124114,124115],{},"查看已开启的VNC服务器：",[29,124117,124119],{"className":118241,"code":124118,"language":118243,"meta":34,"style":34},"vncserver -list\n",[36,124120,124121],{"__ignoreMap":34},[39,124122,124123,124125],{"class":41,"line":42},[39,124124,124095],{"class":3021},[39,124126,124127],{"class":56}," -list\n",[19,124129,124130],{},[269,124131],{"alt":34,"src":124132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[1171,124134,124135],{"start":413},[1174,124136,124137],{},"连接到VNC服务器：",[19,124139,124140],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[1171,124142,124143],{"start":419},[1174,124144,124145],{},"停止VNC服务器：",[19,124147,124148],{},"如果需要停止VNC服务器，可以使用以下命令：",[29,124150,124152],{"className":118241,"code":124151,"language":118243,"meta":34,"style":34},"vncserver -kill :1\n",[36,124153,124154],{"__ignoreMap":34},[39,124155,124156,124158,124161],{"class":41,"line":42},[39,124157,124095],{"class":3021},[39,124159,124160],{"class":56}," -kill",[39,124162,124163],{"class":1319}," :1\n",[19,124165,124166],{},"将:1替换为你实际使用的显示编号。",[19,124168,124169],{},[269,124170],{"alt":34,"src":124171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124173,124174],{},[269,124175],{"alt":34,"src":124176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124178,124180],{"id":124179},"_74-usb端口设置","7.4 USB端口设置",[19,124182,124183],{},[304,124184,124185],{},"首先先配置好权限",[29,124187,124189],{"className":118241,"code":124188,"language":118243,"meta":34,"style":34},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[36,124190,124191,124196,124209,124216,124221],{"__ignoreMap":34},[39,124192,124193],{"class":41,"line":42},[39,124194,124195],{"class":102},"# 将用户权限提高\n",[39,124197,124198,124200,124202,124204,124207],{"class":41,"line":74},[39,124199,25633],{"class":3021},[39,124201,27631],{"class":1319},[39,124203,27634],{"class":56},[39,124205,124206],{"class":1319}," dialout",[39,124208,27639],{"class":45},[39,124210,124211,124213],{"class":41,"line":99},[39,124212,27658],{"class":3021},[39,124214,124215],{"class":1319}," dialout\n",[39,124217,124218],{"class":41,"line":106},[39,124219,124220],{"class":102},"# 查看下面命令是否输出dialout（若输出才正常）\n",[39,124222,124223],{"class":41,"line":112},[39,124224,124225],{"class":3021},"groups\n",[19,124227,124228],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[1188,124230,124232],{"id":124231},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124234,124235,124238],{},[304,124236,124237],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124240,124241,124244],{},[304,124242,124243],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124246,124247],{},[304,124248,124249],{},"流程如下：",[19,124251,124252],{},"（1）.查找设备idVendor和idProduct",[19,124254,124255,124256,124259],{},"接入两个USB设备，在终端调用指令",[36,124257,124258],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124261,124262],{},[269,124263],{"alt":34,"src":124264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124266,124267,124268,124271],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[36,124269,124270],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124273,124274],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124276,124277],{},"（2）.编写映射规则",[19,124279,124280,124281,124284],{},"在",[36,124282,124283],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[29,124286,124288],{"className":118241,"code":124287,"language":118243,"meta":34,"style":34},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[36,124289,124290],{"__ignoreMap":34},[39,124291,124292,124294,124296],{"class":41,"line":42},[39,124293,25633],{"class":3021},[39,124295,119528],{"class":1319},[39,124297,124298],{"class":1319}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124300,124301],{},"输入如下内容：",[29,124303,124305],{"className":118241,"code":124304,"language":118243,"meta":34,"style":34},"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",[36,124306,124307,124337],{"__ignoreMap":34},[39,124308,124309,124312,124314,124317,124320,124323,124326,124328,124331,124334],{"class":41,"line":42},[39,124310,124311],{"class":45},"KERNEL",[39,124313,50],{"class":49},[39,124315,124316],{"class":1319},"=\"ttyUSB*\",",[39,124318,124319],{"class":3021}," ATTRS",[39,124321,124322],{"class":1319},"{idVendor}==",[39,124324,124325],{"class":3021},"\"10c4\"",[39,124327,60],{"class":3021},[39,124329,124330],{"class":1319}," ATTRS{idProduct}==\"ea60\",",[39,124332,124333],{"class":1319}," MODE:=\"0777\",",[39,124335,124336],{"class":1319}," SYMLINK+=\"mylidar\"\n",[39,124338,124339,124341,124343,124345,124347,124349,124352,124354,124357,124359],{"class":41,"line":74},[39,124340,124311],{"class":45},[39,124342,50],{"class":49},[39,124344,124316],{"class":1319},[39,124346,124319],{"class":3021},[39,124348,124322],{"class":1319},[39,124350,124351],{"class":3021},"\"1a86\"",[39,124353,60],{"class":3021},[39,124355,124356],{"class":1319}," ATTRS{idProduct}==\"7523\",",[39,124358,124333],{"class":1319},[39,124360,124361],{"class":1319}," SYMLINK+=\"mycar\"\n",[19,124363,124364],{},"代码解释：",[2205,124366,124367,124370,124373,124376],{},[1174,124368,124369],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[1174,124371,124372],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[1174,124374,124375],{},"SYMLINK是符号连接，即绑定的别名；",[1174,124377,124378],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,124380,124381,124382,124385,124388],{},"***小提示：***",[24609,124383,124384],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[36,124386,124387],{},"\u002Fetc\u002Fudev\u002Frule.d",[24609,124389,124390],{},"目录即可。",[19,124392,124393],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,124395,124396],{},"（3）.使规则生效",[19,124398,124399],{},"在终端下输入如下指令：",[29,124401,124403],{"className":118241,"code":124402,"language":118243,"meta":34,"style":34},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[36,124404,124405,124410,124422,124433,124437,124442,124455],{"__ignoreMap":34},[39,124406,124407],{"class":41,"line":42},[39,124408,124409],{"class":102},"# Ubuntu用下方命令\n",[39,124411,124412,124414,124416,124419],{"class":41,"line":74},[39,124413,25633],{"class":3021},[39,124415,120993],{"class":1319},[39,124417,124418],{"class":1319}," udev",[39,124420,124421],{"class":1319}," reload\n",[39,124423,124424,124426,124428,124430],{"class":41,"line":99},[39,124425,25633],{"class":3021},[39,124427,120993],{"class":1319},[39,124429,124418],{"class":1319},[39,124431,124432],{"class":1319}," restart\n",[39,124434,124435],{"class":41,"line":106},[39,124436,3458],{"emptyLinePlaceholder":1145},[39,124438,124439],{"class":41,"line":112},[39,124440,124441],{"class":102},"#Fedora用下方命令\n",[39,124443,124444,124446,124449,124452],{"class":41,"line":118},[39,124445,25633],{"class":3021},[39,124447,124448],{"class":1319}," udevadm",[39,124450,124451],{"class":1319}," control",[39,124453,124454],{"class":56}," --reload\n",[39,124456,124457,124459,124461],{"class":41,"line":413},[39,124458,25633],{"class":3021},[39,124460,124448],{"class":1319},[39,124462,124463],{"class":1319}," trigger\n",[19,124465,124466],{},"再重新插拔设备即可。",[19,124468,124469],{},"（4）.测试",[19,124471,124472],{},"终端下输入如下指令",[29,124474,124476],{"className":118241,"code":124475,"language":118243,"meta":34,"style":34},"ll \u002Fdev | grep ttyUSB\n",[36,124477,124478],{"__ignoreMap":34},[39,124479,124480,124483,124486,124488,124490],{"class":41,"line":42},[39,124481,124482],{"class":3021},"ll",[39,124484,124485],{"class":1319}," \u002Fdev",[39,124487,26166],{"class":49},[39,124489,31293],{"class":3021},[39,124491,124492],{"class":1319}," ttyUSB\n",[19,124494,124495],{},"运行结果如下：",[19,124497,124498],{},[269,124499],{"alt":34,"src":124500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124502,124503,124504,124507],{},"也可以多次插拔USB设备，会发现设备端口",[36,124505,124506],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,124509,124510],{},[304,124511,118909],{},[19,124513,124514],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[1188,124516,124518],{"id":124517},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,124520,124521,124523],{},[304,124522,124237],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,124525,124526,124528],{},[304,124527,124243],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,124530,124531],{},[304,124532,124249],{},[19,124534,124535],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,124537,124538],{},"调用如下指令查看第一台雷达的USB信息：",[29,124540,124542],{"className":118241,"code":124541,"language":118243,"meta":34,"style":34},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[36,124543,124544,124564],{"__ignoreMap":34},[39,124545,124546,124549,124551,124554,124557,124559,124561],{"class":41,"line":42},[39,124547,124548],{"class":3021},"udevadm",[39,124550,70875],{"class":1319},[39,124552,124553],{"class":56}," --attribute-walk",[39,124555,124556],{"class":56}," --name=\u002Fdev\u002FttyUSB0",[39,124558,26166],{"class":49},[39,124560,31293],{"class":3021},[39,124562,124563],{"class":1319}," KERNELS\n",[39,124565,124566,124568,124570,124572,124575,124577,124579],{"class":41,"line":74},[39,124567,124548],{"class":3021},[39,124569,70875],{"class":1319},[39,124571,124553],{"class":56},[39,124573,124574],{"class":56}," --name=\u002Fdev\u002FttyACM0",[39,124576,26166],{"class":49},[39,124578,31293],{"class":3021},[39,124580,124563],{"class":1319},[19,124582,124583],{},[269,124584],{"alt":34,"src":124585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,124587,124588],{},"调用如下指令查看第二台雷达的USB信息：",[29,124590,124592],{"className":118241,"code":124591,"language":118243,"meta":34,"style":34},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[36,124593,124594],{"__ignoreMap":34},[39,124595,124596,124598,124600,124602,124605,124607,124609],{"class":41,"line":42},[39,124597,124548],{"class":3021},[39,124599,70875],{"class":1319},[39,124601,124553],{"class":56},[39,124603,124604],{"class":56}," --name=\u002Fdev\u002FttyUSB1",[39,124606,26166],{"class":49},[39,124608,31293],{"class":3021},[39,124610,124563],{"class":1319},[19,124612,124613,124614,124617,124618,124621,124622,124625],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[36,124615,124616],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[36,124619,124620],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[304,124623,124624],{},"唯一性标识","”。",[19,124627,124277],{},[19,124629,124280,124630,124632],{},[36,124631,124283],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[29,124634,124635],{"className":118241,"code":124287,"language":118243,"meta":34,"style":34},[36,124636,124637],{"__ignoreMap":34},[39,124638,124639,124641,124643],{"class":41,"line":42},[39,124640,25633],{"class":3021},[39,124642,119528],{"class":1319},[39,124644,124298],{"class":1319},[29,124646,124648],{"className":118241,"code":124647,"language":118243,"meta":34,"style":34},"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",[36,124649,124650,124679],{"__ignoreMap":34},[39,124651,124652,124654,124656,124658,124661,124663,124666,124669,124671,124674,124676],{"class":41,"line":42},[39,124653,124311],{"class":45},[39,124655,50],{"class":49},[39,124657,124316],{"class":1319},[39,124659,124660],{"class":45}," KERNELS",[39,124662,50],{"class":49},[39,124664,124665],{"class":1319},"=\"1-1.3:1.0\",",[39,124667,124668],{"class":3021}," MODE:",[39,124670,50],{"class":1319},[39,124672,124673],{"class":3021},"\"0777\"",[39,124675,60],{"class":3021},[39,124677,124678],{"class":1319}," SYMLINK+=\"rplidar_front\"\n",[39,124680,124681,124683,124685,124687,124689,124691,124694,124696,124698,124700,124702],{"class":41,"line":74},[39,124682,124311],{"class":45},[39,124684,50],{"class":49},[39,124686,124316],{"class":1319},[39,124688,124660],{"class":45},[39,124690,50],{"class":49},[39,124692,124693],{"class":1319},"=\"1-1.4:1.0\",",[39,124695,124668],{"class":3021},[39,124697,50],{"class":1319},[39,124699,124673],{"class":3021},[39,124701,60],{"class":3021},[39,124703,124704],{"class":1319}," SYMLINK+=\"rplidar_back\"\n",[19,124706,124396],{},[19,124708,124399],{},[29,124710,124711],{"className":118241,"code":124402,"language":118243,"meta":34,"style":34},[36,124712,124713,124717,124727,124737,124741,124745,124755],{"__ignoreMap":34},[39,124714,124715],{"class":41,"line":42},[39,124716,124409],{"class":102},[39,124718,124719,124721,124723,124725],{"class":41,"line":74},[39,124720,25633],{"class":3021},[39,124722,120993],{"class":1319},[39,124724,124418],{"class":1319},[39,124726,124421],{"class":1319},[39,124728,124729,124731,124733,124735],{"class":41,"line":99},[39,124730,25633],{"class":3021},[39,124732,120993],{"class":1319},[39,124734,124418],{"class":1319},[39,124736,124432],{"class":1319},[39,124738,124739],{"class":41,"line":106},[39,124740,3458],{"emptyLinePlaceholder":1145},[39,124742,124743],{"class":41,"line":112},[39,124744,124441],{"class":102},[39,124746,124747,124749,124751,124753],{"class":41,"line":118},[39,124748,25633],{"class":3021},[39,124750,124448],{"class":1319},[39,124752,124451],{"class":1319},[39,124754,124454],{"class":56},[39,124756,124757,124759,124761],{"class":41,"line":413},[39,124758,25633],{"class":3021},[39,124760,124448],{"class":1319},[39,124762,124463],{"class":1319},[19,124764,124466],{},[19,124766,124469],{},[19,124768,124472,124769,124772],{},[36,124770,124771],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,124774,124775],{},[269,124776],{"alt":34,"src":124777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,124779,124780],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,124782,124783,124785],{},[304,124784,118909],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[1188,124787,124789],{"id":124788},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,124791,124792],{},"（1）.查看所连接的主机USB接口的信息",[29,124794,124796],{"className":118241,"code":124795,"language":118243,"meta":34,"style":34},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[36,124797,124798,124828],{"__ignoreMap":34},[39,124799,124800,124802,124804,124807,124809,124811,124813,124815,124818,124821,124823,124826],{"class":41,"line":42},[39,124801,124548],{"class":3021},[39,124803,70875],{"class":1319},[39,124805,124806],{"class":56}," -a",[39,124808,30273],{"class":56},[39,124810,29479],{"class":45},[39,124812,124548],{"class":3021},[39,124814,70875],{"class":1319},[39,124816,124817],{"class":56}," -q",[39,124819,124820],{"class":1319}," path",[39,124822,26172],{"class":56},[39,124824,124825],{"class":1319}," \u002Fdev\u002FttyACM0",[39,124827,209],{"class":45},[39,124829,124830,124832,124834,124836,124838,124840,124842,124844,124846,124848,124850,124853],{"class":41,"line":74},[39,124831,124548],{"class":3021},[39,124833,70875],{"class":1319},[39,124835,124806],{"class":56},[39,124837,30273],{"class":56},[39,124839,29479],{"class":45},[39,124841,124548],{"class":3021},[39,124843,70875],{"class":1319},[39,124845,124817],{"class":56},[39,124847,124820],{"class":1319},[39,124849,26172],{"class":56},[39,124851,124852],{"class":1319}," \u002Fdev\u002FttyUSB0",[39,124854,209],{"class":45},[19,124856,124857],{},[269,124858],{"alt":34,"src":124859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124861,124862],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124864,124277],{},[19,124866,124280,124867,124632],{},[36,124868,124283],{},[29,124870,124871],{"className":118241,"code":124287,"language":118243,"meta":34,"style":34},[36,124872,124873],{"__ignoreMap":34},[39,124874,124875,124877,124879],{"class":41,"line":42},[39,124876,25633],{"class":3021},[39,124878,119528],{"class":1319},[39,124880,124298],{"class":1319},[29,124882,124884],{"className":118241,"code":124883,"language":118243,"meta":34,"style":34},"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",[36,124885,124886,124914,124940],{"__ignoreMap":34},[39,124887,124888,124890,124892,124895,124897,124899,124901,124903,124906,124909,124911],{"class":41,"line":42},[39,124889,124311],{"class":45},[39,124891,50],{"class":49},[39,124893,124894],{"class":1319},"=\"ttyACM*\",",[39,124896,124319],{"class":3021},[39,124898,124322],{"class":1319},[39,124900,124351],{"class":3021},[39,124902,60],{"class":3021},[39,124904,124905],{"class":1319}," ATTRS{idProduct}==\"55d4\",",[39,124907,124908],{"class":1319}," ATTRS{serial}==\"0001\",",[39,124910,124333],{"class":1319},[39,124912,124913],{"class":1319}," SYMLINK+=\"ttyACM_MCU\"\n",[39,124915,124916,124918,124920,124922,124924,124926,124928,124930,124932,124935,124937],{"class":41,"line":74},[39,124917,124311],{"class":45},[39,124919,50],{"class":49},[39,124921,124894],{"class":1319},[39,124923,124319],{"class":3021},[39,124925,124322],{"class":1319},[39,124927,124351],{"class":3021},[39,124929,60],{"class":3021},[39,124931,124905],{"class":1319},[39,124933,124934],{"class":1319}," ATTRS{serial}==\"0002\",",[39,124936,124333],{"class":1319},[39,124938,124939],{"class":1319}," SYMLINK+=\"ttyACM_Lidar\"\n",[39,124941,124942,124944,124946,124948,124950,124952,124954,124956,124958,124960],{"class":41,"line":99},[39,124943,124311],{"class":45},[39,124945,50],{"class":49},[39,124947,124316],{"class":1319},[39,124949,124319],{"class":3021},[39,124951,124322],{"class":1319},[39,124953,124351],{"class":3021},[39,124955,60],{"class":3021},[39,124957,124356],{"class":1319},[39,124959,124333],{"class":1319},[39,124961,124962],{"class":1319}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124964,124396],{},[19,124966,124399],{},[29,124968,124969],{"className":118241,"code":124402,"language":118243,"meta":34,"style":34},[36,124970,124971,124975,124985,124995,124999,125003,125013],{"__ignoreMap":34},[39,124972,124973],{"class":41,"line":42},[39,124974,124409],{"class":102},[39,124976,124977,124979,124981,124983],{"class":41,"line":74},[39,124978,25633],{"class":3021},[39,124980,120993],{"class":1319},[39,124982,124418],{"class":1319},[39,124984,124421],{"class":1319},[39,124986,124987,124989,124991,124993],{"class":41,"line":99},[39,124988,25633],{"class":3021},[39,124990,120993],{"class":1319},[39,124992,124418],{"class":1319},[39,124994,124432],{"class":1319},[39,124996,124997],{"class":41,"line":106},[39,124998,3458],{"emptyLinePlaceholder":1145},[39,125000,125001],{"class":41,"line":112},[39,125002,124441],{"class":102},[39,125004,125005,125007,125009,125011],{"class":41,"line":118},[39,125006,25633],{"class":3021},[39,125008,124448],{"class":1319},[39,125010,124451],{"class":1319},[39,125012,124454],{"class":56},[39,125014,125015,125017,125019],{"class":41,"line":413},[39,125016,25633],{"class":3021},[39,125018,124448],{"class":1319},[39,125020,124463],{"class":1319},[19,125022,125023,125024],{},"再重新插拔设备即可，或者 ",[304,125025,125026],{},"直接重启系统。",[19,125028,124469],{},[19,125030,124472,125031,124772],{},[36,125032,124771],{},[19,125034,125035],{},[269,125036],{"alt":34,"src":125037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125039,124780],{},[19,125041,125042,125044],{},[304,125043,118909],{}," 一些设备可能没有串口号等。",[1188,125046,125048],{"id":125047},"_744-其他注意事项","7.4.4 其他注意事项",[19,125050,125051,125052,125054,125055,125058,125059,19466,125062,125065,125066,125068],{},"并非所有的USB设备端口号都是",[36,125053,124506],{},"的格式，比如Arduino的端口号可能是",[36,125056,125057],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[36,125060,125061],{},"videon",[36,125063,125064],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[36,125067,125061],{},"端口，绑定时需要关联的也是该接口。",[19,125070,125071,125072,125075,125076,125079,125080,125082,125083,125086,125087,125090,125091,125094,125095,125094,125098,125094,125101,29442],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[36,125073,125074],{},"KERNEL==\"ttyUSB*\"","修改为",[36,125077,125078],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[36,125081,125074],{},"修改为类似于",[36,125084,125085],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[36,125088,125089],{},"video[0,2,4,6]","表示可以绑定的端口为",[36,125092,125093],{},"video0","或",[36,125096,125097],{},"video2",[36,125099,125100],{},"video4",[36,125102,125103],{},"video6",[14,125105,125107],{"id":125106},"_75-挂载内网网页","7.5 挂载内网网页",[19,125109,125110],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125112,125113],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125115,125116],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125118,125119,125120],{},"Termux 下载地址（F-Droid）：",[46,125121,125122],{"href":125122,"rel":125123},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24921],[19,125125,125126],{},"首先打开app后，先更新软件缓存：",[29,125128,125130],{"className":118241,"code":125129,"language":118243,"meta":34,"style":34},"pkg update\n",[36,125131,125132],{"__ignoreMap":34},[39,125133,125134,125137],{"class":41,"line":42},[39,125135,125136],{"class":3021},"pkg",[39,125138,27299],{"class":1319},[19,125140,125141],{},"然后换源",[29,125143,125145],{"className":118241,"code":125144,"language":118243,"meta":34,"style":34},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[36,125146,125147],{"__ignoreMap":34},[39,125148,125149,125151,125154],{"class":41,"line":42},[39,125150,124019],{"class":3021},[39,125152,125153],{"class":45}," $PREFIX",[39,125155,125156],{"class":1319},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125158,125159],{},"将该文件内容替换为下面：",[29,125161,125163],{"className":118241,"code":125162,"language":118243,"meta":34,"style":34},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[36,125164,125165],{"__ignoreMap":34},[39,125166,125167,125170,125173,125176],{"class":41,"line":42},[39,125168,125169],{"class":3021},"deb",[39,125171,125172],{"class":1319}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[39,125174,125175],{"class":1319}," stable",[39,125177,125178],{"class":1319}," main\n",[2205,125180,125181,125208],{},[1174,125182,125183,125184,125186,125187],{},"如果你使用的是",[36,125185,124019],{},"编辑器：",[2205,125188,125189,125196,125202],{},[1174,125190,125191,125192,125195],{},"按 ",[36,125193,125194],{},"Ctrl+O"," 保存文件。",[1174,125197,125191,125198,125201],{},[36,125199,125200],{},"Enter"," 确认文件名。",[1174,125203,125191,125204,125207],{},[36,125205,125206],{},"Ctrl+X"," 退出编辑器。",[1174,125209,125183,125210,125186,125213],{},[36,125211,125212],{},"vim",[2205,125214,125215,125221],{},[1174,125216,125191,125217,125220],{},[36,125218,125219],{},"Esc"," 退出编辑模式。",[1174,125222,125223,125224,125226],{},"输入 ",[36,125225,120166],{}," 保存并退出。",[19,125228,125229],{},"接下来重新更新软件源：",[29,125231,125233],{"className":118241,"code":125232,"language":118243,"meta":34,"style":34},"pkg update && pkg upgrade\n",[36,125234,125235],{"__ignoreMap":34},[39,125236,125237,125239,125241,125243,125245],{"class":41,"line":42},[39,125238,125136],{"class":3021},[39,125240,118292],{"class":1319},[39,125242,27247],{"class":45},[39,125244,125136],{"class":3021},[39,125246,118278],{"class":1319},[19,125248,125249],{},"安装python：",[29,125251,125253],{"className":118241,"code":125252,"language":118243,"meta":34,"style":34},"pkg install python\n",[36,125254,125255],{"__ignoreMap":34},[39,125256,125257,125259,125261],{"class":41,"line":42},[39,125258,125136],{"class":3021},[39,125260,24890],{"class":1319},[39,125262,125263],{"class":1319}," python\n",[19,125265,125266,27530],{},[304,125267,125268],{},"通过Termux访问设备存储",[19,125270,125271],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[29,125273,125275],{"className":118241,"code":125274,"language":118243,"meta":34,"style":34},"termux-setup-storage\n",[36,125276,125277],{"__ignoreMap":34},[39,125278,125279],{"class":41,"line":42},[39,125280,125274],{"class":3021},[1171,125282,125283],{},[1174,125284,125285,27530,125288],{},[304,125286,125287],{},"进入HTML文件所在的目录",[1171,125289,125290],{},[1174,125291,125292,125293,125295],{},"使用",[36,125294,102221],{},"命令进入HTML文件所在的目录：",[29,125297,125299],{"className":118241,"code":125298,"language":118243,"meta":34,"style":34},"cd ~\u002Fyour_html_folder\n",[36,125300,125301],{"__ignoreMap":34},[39,125302,125303,125305],{"class":41,"line":42},[39,125304,102221],{"class":56},[39,125306,125307],{"class":1319}," ~\u002Fyour_html_folder\n",[1171,125309,125310],{"start":74},[1174,125311,125312,27530,125315,125320,125337],{},[304,125313,125314],{},"启动Python HTTP服务器",[1171,125316,125317],{},[1174,125318,125319],{},"运行以下命令启动一个简单的HTTP服务器：",[29,125321,125323],{"className":118241,"code":125322,"language":118243,"meta":34,"style":34},"python -m http.server 8000\n",[36,125324,125325],{"__ignoreMap":34},[39,125326,125327,125329,125331,125334],{"class":41,"line":42},[39,125328,33],{"class":3021},[39,125330,101827],{"class":56},[39,125332,125333],{"class":1319}," http.server",[39,125335,125336],{"class":56}," 8000\n",[1171,125338,125339],{"start":99},[1174,125340,125341,125342,125345],{},"这会在端口",[36,125343,125344],{},"8000","上启动一个Web服务器。",[2205,125347,125348],{},[1174,125349,125350],{},"启动服务器后，Termux会显示日志信息，例如：",[29,125352,125354],{"className":121761,"code":125353,"language":121763,"meta":121764,"style":34},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[36,125355,125356],{"__ignoreMap":34},[39,125357,125358],{"class":41,"line":42},[39,125359,125353],{},[2205,125361,125362],{},[1174,125363,125364],{},"这表示服务器已成功启动。",[19,125366,125367],{},[304,125368,125369],{},"在浏览器中访问HTML文件",[1171,125371,125372],{},[1174,125373,125374,27530,125377,125382],{},[304,125375,125376],{},"在同一设备上访问",[1171,125378,125379],{},[1174,125380,125381],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[29,125383,125386],{"className":125384,"code":125385,"language":72718,"meta":34,"style":34},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[36,125387,125388],{"__ignoreMap":34},[39,125389,125390,125393],{"class":41,"line":42},[39,125391,125392],{"class":45},"http:",[39,125394,125395],{"class":102},"\u002F\u002Flocalhost:8000\n",[2205,125397,125398],{},[1174,125399,125400,125401,125404],{},"如果HTML文件中有",[36,125402,125403],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125406,125408],{"id":125407},"_76-linux重点知识","7.6 Linux重点知识",[1188,125410,125412],{"id":125411},"_761-关于点的说明","7.6.1 关于点的说明",[19,125414,125415],{},[269,125416],{"alt":34,"src":125417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,125419,125420],{},"一点本目录，两点上目录",[1188,125422,125424],{"id":125423},"_762-目录","7.6.2 目录",[23054,125426,125428],{"id":125427},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,125430,125431],{},[304,125432,125433],{},"\u002Fboot:",[19,125435,125436],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125438,125439],{},[304,125440,125441],{},"\u002Fetc:",[19,125443,125444],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125446,125447],{},[304,125448,125449],{},"\u002Flib：",[19,125451,125452],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125454,125455],{},[304,125456,125457],{},"\u002Fsys:",[19,125459,125460],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23054,125462,125464],{"id":125463},"_7622-指令集合","7.6.2.2 指令集合",[19,125466,125467],{},[304,125468,125469],{},"\u002Fbin:",[19,125471,125472],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125474,125475],{},[304,125476,125477],{},"\u002Fsbin:",[19,125479,125480],{},"只有系统管理员才能使用的程序和指令",[23054,125482,125484],{"id":125483},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125486,125487],{},[304,125488,125489],{},"\u002Fdev:",[19,125491,125492],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125494,125495],{},[304,125496,125497],{},"\u002Fmedia:",[19,125499,125500],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125502,125503],{},[304,125504,125505],{},"\u002Fmnt:",[19,125507,125508],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23054,125510,125512],{"id":125511},"_7624-临时文件","7.6.2.4 临时文件",[19,125514,125515],{},[304,125516,125517],{},"\u002Frun:",[19,125519,125520],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,125522,125523],{},[304,125524,125525],{},"\u002Flost+found:",[19,125527,125528],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,125530,125531],{},[304,125532,125533],{},"\u002Ftmp:",[19,125535,125536],{},"这个目录是用来存放一些临时文件的",[23054,125538,125540],{"id":125539},"_7625-账户","7.6.2.5 账户",[19,125542,125543],{},[304,125544,125545],{},"\u002Froot：",[19,125547,125548],{},"系统管理员的用户主目录",[19,125550,125551,27530],{},[304,125552,125553],{},"\u002Fhome",[19,125555,125556],{},"用户的主目录，以用户的账号命名的",[19,125558,125559,27530],{},[304,125560,125561],{},"\u002Fusr",[19,125563,125564],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125566,125567],{},[304,125568,125569],{},"\u002Fusr\u002Fbin：",[19,125571,125572],{},"系统用户使用的应用程序与指令",[19,125574,125575],{},[304,125576,125577],{},"\u002Fusr\u002Fsbin：",[19,125579,125580],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,125582,125583],{},[304,125584,125585],{},"\u002Fusr\u002Fsrc：",[19,125587,125588],{},"内核源代码默认的放置目录",[23054,125590,125592],{"id":125591},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,125594,125595],{},[304,125596,125597],{},"\u002Fvar：",[19,125599,125600],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,125602,125603],{},[304,125604,125605],{},"\u002Fproc:",[19,125607,125608,125609,125612],{},"管理 ",[304,125610,125611],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23054,125614,125616],{"id":125615},"_7627-扩展用的","7.6.2.7 扩展用的",[19,125618,125619],{},[304,125620,125621],{},"\u002Fopt:",[19,125623,125624],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,125626,125627],{},[304,125628,125629],{},"\u002Fsrv:",[19,125631,125632],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[1188,125634,125636],{"id":125635},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,125638,125639],{},[269,125640],{"alt":34,"src":125641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,125643,125644],{},"windows-->linux:",[19,125646,125647],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,125649,125650],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,125652,125653],{},"linux传输文件到windows",[19,125655,125656],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[1188,125658,125660],{"id":125659},"_764-易忘知识","7.6.4 易忘知识",[19,125662,125663],{},"操作系统内核查看",[29,125665,125666],{"className":118241,"code":122235,"language":118243,"meta":34,"style":34},[36,125667,125668],{"__ignoreMap":34},[39,125669,125670,125672],{"class":41,"line":42},[39,125671,71258],{"class":3021},[39,125673,122244],{"class":56},[19,125675,125676],{},[269,125677],{"alt":34,"src":125678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,125680,125681],{},[269,125682],{"alt":34,"src":125683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[29,125685,125687],{"className":118241,"code":125686,"language":118243,"meta":34,"style":34},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[36,125688,125689,125701],{"__ignoreMap":34},[39,125690,125691,125693,125696,125699],{"class":41,"line":42},[39,125692,122452],{"class":3021},[39,125694,125695],{"class":1319}," mvtest",[39,125697,125698],{"class":1319}," mvtest2",[39,125700,3732],{"class":45},[39,125702,125703],{"class":41,"line":74},[39,125704,125705],{"class":3021},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,125707,125708],{},[269,125709],{"alt":34,"src":125710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,125712,125713],{},[269,125714],{"alt":34,"src":125715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,125717,125718,125719,125722],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[36,125720,125721],{},"du -a"," 可以快速查看磁盘使用细节。",[1188,125724,125726],{"id":125725},"_765-vim","7.6.5 Vim",[19,125728,125729],{},[269,125730],{"alt":34,"src":125731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,125733,125734],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,125736,125737],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,125739,125740],{},[304,125741,125742],{},"1.命令模式：",[19,125744,125745],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,125747,125748],{},"x 删除当前光标所在处的字符",[19,125750,125751],{},"：切换到底线命令模式，以在最底一行输入命令",[19,125753,125754],{},"a 进行插入模式，在光标下一个位置输入文本",[19,125756,125757],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,125759,125760],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,125762,125763],{},"dd 剪切当前行",[19,125765,125766],{},"yy 复制当前行",[19,125768,125769],{},"p 粘贴剪贴板内容到光标下方",[19,125771,125772],{},"P 粘贴剪贴板内容到光标上方",[19,125774,125775],{},"u 撤销上一次操作",[19,125777,125778],{},"ctrl+r 重做上一次操作",[19,125780,125781,125783],{},[1993,125782],{}," 保存文件",[19,125785,125786,125788],{},[1844,125787],{}," 退出Vim编辑器",[19,125790,125791,125793],{},[1844,125792],{},"! 强制退出Vim编辑器，不保存修改",[19,125795,125796],{},[304,125797,125798],{},"2.输入模式：",[19,125800,125801],{},[269,125802],{"alt":34,"src":125803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125805,125806],{},[304,125807,125808],{},"3.底线命令模式：",[19,125810,125811],{},[269,125812],{"alt":34,"src":125813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125815,125816],{},"按下esc可以退出底线命令模式",[1188,125818,125820],{"id":125819},"_766-apt","7.6.6 apt",[19,125822,125823],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[1188,125825,125827],{"id":125826},"_767-home与root的区别","7.6.7 home与root的区别",[19,125829,125830],{},[269,125831],{"alt":34,"src":125832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125834,125835],{},[269,125836],{"alt":34,"src":125837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125839,125840],{},[269,125841],{"alt":34,"src":125842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125844,125845],{},[269,125846],{"alt":34,"src":125847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[1188,125849,125851],{"id":125850},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125853,125854],{},[46,125855,125856],{"href":125856,"rel":125857},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24921],[1171,125859,125860,125863],{},[1174,125861,125862],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[1174,125864,125865],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125867,125868],{},[269,125869],{"alt":34,"src":125870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125872,125873],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125875,125876],{},[269,125877],{"alt":34,"src":125878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[29,125880,125882],{"className":121761,"code":125881,"language":121763,"meta":121764,"style":34},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[36,125883,125884,125889],{"__ignoreMap":34},[39,125885,125886],{"class":41,"line":42},[39,125887,125888],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[39,125890,125891],{"class":41,"line":74},[39,125892,125893],{},".\u002Fpycharm.sh\n",[19,125895,125896],{},"3️⃣创建.desktop文件",[19,125898,125899],{},[304,125900,125901],{},"原理：",[2205,125903,125904,125914],{},[1174,125905,125906,125907,125913],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[304,125908,125909,125912],{},[36,125910,125911],{},".desktop"," 文件"," 来识别应用。",[1174,125915,125916,125918,125919],{},[36,125917,125911],{}," 文件相当于一个“应用注册表”，告诉系统：",[2205,125920,125921,125924,125927,125930,125933],{},[1174,125922,125923],{},"应用名字（Name）",[1174,125925,125926],{},"图标（Icon）",[1174,125928,125929],{},"执行命令（Exec）",[1174,125931,125932],{},"分类（Categories）",[1174,125934,125935],{},"是否需要终端（Terminal）",[29,125937,125939],{"className":121761,"code":125938,"language":121763,"meta":121764,"style":34},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[36,125940,125941,125946],{"__ignoreMap":34},[39,125942,125943],{"class":41,"line":42},[39,125944,125945],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[39,125947,125948],{"class":41,"line":74},[39,125949,125950],{},"nano pycharm.desktop\n",[19,125952,125953],{},"nano是一个命令行下的编辑器，也可以使用vim",[29,125955,125957],{"className":121761,"code":125956,"language":121763,"meta":121764,"style":34},"[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",[36,125958,125959,125964,125969,125974,125979,125984,125989,125994,125999,126004],{"__ignoreMap":34},[39,125960,125961],{"class":41,"line":42},[39,125962,125963],{},"[Desktop Entry]\n",[39,125965,125966],{"class":41,"line":74},[39,125967,125968],{},"Version=1.0\n",[39,125970,125971],{"class":41,"line":99},[39,125972,125973],{},"Type=Application\n",[39,125975,125976],{"class":41,"line":106},[39,125977,125978],{},"Name=PyCharm\n",[39,125980,125981],{"class":41,"line":112},[39,125982,125983],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[39,125985,125986],{"class":41,"line":118},[39,125987,125988],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[39,125990,125991],{"class":41,"line":413},[39,125992,125993],{},"Comment=JetBrains PyCharm IDE\n",[39,125995,125996],{"class":41,"line":419},[39,125997,125998],{},"Categories=Development;IDE;\n",[39,126000,126001],{"class":41,"line":425},[39,126002,126003],{},"Terminal=false\n",[39,126005,126006],{"class":41,"line":443},[39,126007,126008],{},"StartupWMClass=jetbrains-pycharm\n",[2205,126010,126011,126017,126023,126029],{},[1174,126012,126013,126016],{},[36,126014,126015],{},"Exec"," → 点击图标时执行的命令",[1174,126018,126019,126022],{},[36,126020,126021],{},"Icon"," → 显示在菜单和桌面上的图标",[1174,126024,126025,126028],{},[36,126026,126027],{},"Terminal=false"," → 不打开终端",[1174,126030,126031,126034],{},[36,126032,126033],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126036,126037,126038],"blockquote",{},[19,126039,126040,126041,126043,126044],{},"可以理解成 ",[36,126042,125911],{}," 文件是 Linux 的 ",[304,126045,126046],{},"快捷方式配置文件",[19,126048,126049],{},"4️⃣设置可执行权限",[29,126051,126053],{"className":121761,"code":126052,"language":121763,"meta":121764,"style":34},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[36,126054,126055],{"__ignoreMap":34},[39,126056,126057],{"class":41,"line":42},[39,126058,126052],{},[19,126060,126061],{},"5️⃣桌面图标启动的话如下：",[29,126063,126065],{"className":121761,"code":126064,"language":121763,"meta":121764,"style":34},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[36,126066,126067,126072],{"__ignoreMap":34},[39,126068,126069],{"class":41,"line":42},[39,126070,126071],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[39,126073,126074],{"class":41,"line":74},[39,126075,126076],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[1171,126078,126079],{"start":99},[1174,126080,126081],{},"下载Appimage文件实现软件的安装",[19,126083,126084],{},"1️⃣先下载appimage",[19,126086,126087],{},[46,126088,126089],{"href":126089,"rel":126090},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24921],[19,126092,126093],{},[269,126094],{"alt":34,"src":126095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126097,126098],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126100,126101],{},[269,126102],{"alt":34,"src":126103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126105,126106],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126108,126109],{},[269,126110],{"alt":34,"src":126111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126113,126114],{},[269,126115],{"alt":34,"src":126116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126118,126119,126120,126123],{},"3️⃣给他们放在",[36,126121,126122],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126125,126126],{},"4️⃣给软件执行权限",[29,126128,126130],{"className":121761,"code":126129,"language":121763,"meta":121764,"style":34},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[36,126131,126132,126137],{"__ignoreMap":34},[39,126133,126134],{"class":41,"line":42},[39,126135,126136],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[39,126138,126139],{"class":41,"line":74},[39,126140,126141],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126143,126144],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[29,126146,126148],{"className":118241,"code":126147,"language":118243,"meta":34,"style":34},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[36,126149,126150,126157,126164,126170],{"__ignoreMap":34},[39,126151,126152,126154],{"class":41,"line":42},[39,126153,102221],{"class":56},[39,126155,126156],{"class":1319}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[39,126158,126159,126161],{"class":41,"line":74},[39,126160,102228],{"class":3021},[39,126162,126163],{"class":1319}," .\u002Fqqmusic.desktop\n",[39,126165,126166,126168],{"class":41,"line":99},[39,126167,125212],{"class":3021},[39,126169,126163],{"class":1319},[39,126171,126172,126174,126176,126178],{"class":41,"line":106},[39,126173,25633],{"class":3021},[39,126175,25636],{"class":1319},[39,126177,124078],{"class":1319},[39,126179,126163],{"class":1319},[19,126181,126182,126184],{},[36,126183,102228],{},"：一个 Linux 命令，主要功能是：",[2205,126186,126187,126190],{},[1174,126188,126189],{},"如果文件不存在，就创建一个新的空文件",[1174,126191,126192],{},"如果文件已存在，就更新该文件的最后修改时间",[29,126194,126196],{"className":121761,"code":126195,"language":121763,"meta":121764,"style":34},"[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",[36,126197,126198,126202,126207,126212,126217,126221,126226],{"__ignoreMap":34},[39,126199,126200],{"class":41,"line":42},[39,126201,125963],{},[39,126203,126204],{"class":41,"line":74},[39,126205,126206],{},"Name=QQ音乐\n",[39,126208,126209],{"class":41,"line":99},[39,126210,126211],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[39,126213,126214],{"class":41,"line":106},[39,126215,126216],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[39,126218,126219],{"class":41,"line":112},[39,126220,125973],{},[39,126222,126223],{"class":41,"line":118},[39,126224,126225],{},"Categories=Audio;Music;Player;\n",[39,126227,126228],{"class":41,"line":413},[39,126229,126230],{},"Comment=QQ Music Client for Linux\n",[19,126232,126233],{},"将文件复制进去",[19,126235,126236],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126238,126239],{},[269,126240],{"alt":34,"src":126241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126243,126244],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126246,126247],{},[269,126248],{"alt":34,"src":126249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126251,126252,126253,126256,126257,126260],{},"如果你用的不是KDE，那么也可以直接修改",[36,126254,126255],{},"qqmuic.desktop","：在exec的末尾加上",[36,126258,126259],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[29,126262,126264],{"className":121761,"code":126263,"language":121763,"meta":121764,"style":34},"[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",[36,126265,126266,126270,126274,126279,126283,126287,126291],{"__ignoreMap":34},[39,126267,126268],{"class":41,"line":42},[39,126269,125963],{},[39,126271,126272],{"class":41,"line":74},[39,126273,126206],{},[39,126275,126276],{"class":41,"line":99},[39,126277,126278],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[39,126280,126281],{"class":41,"line":106},[39,126282,126216],{},[39,126284,126285],{"class":41,"line":112},[39,126286,125973],{},[39,126288,126289],{"class":41,"line":118},[39,126290,126225],{},[39,126292,126293],{"class":41,"line":413},[39,126294,126230],{},[19,126296,126297],{},[269,126298],{"alt":34,"src":126299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126301,126302],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[29,126304,126306],{"className":121761,"code":126305,"language":121763,"meta":121764,"style":34},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[36,126307,126308],{"__ignoreMap":34},[39,126309,126310],{"class":41,"line":42},[39,126311,126305],{},[1171,126313,126314],{"start":106},[1174,126315,126316],{},"去Flathub上安装软件",[19,126318,126319],{},[46,126320,126321],{"href":126321,"rel":126322},"https:\u002F\u002Fflathub.org\u002F",[24921],[19,126324,126325],{},"1️⃣去上面的官网搜索软件+下载软件",[19,126327,126328],{},[269,126329],{"alt":34,"src":126330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[29,126332,126334],{"className":121761,"code":126333,"language":121763,"meta":121764,"style":34},"flatpak install flathub com.obsproject.Studio\n",[36,126335,126336],{"__ignoreMap":34},[39,126337,126338],{"class":41,"line":42},[39,126339,126333],{},[19,126341,126342],{},[269,126343],{"alt":34,"src":126344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,126346,126347],{},"2️⃣运行软件",[19,126349,126350],{},"a.官方方式：",[19,126352,126353],{},[269,126354],{"alt":34,"src":126355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[29,126357,126358],{"className":121761,"code":126333,"language":121763,"meta":121764,"style":34},[36,126359,126360],{"__ignoreMap":34},[39,126361,126362],{"class":41,"line":42},[39,126363,126333],{},[19,126365,126366],{},"b.当普通软件运行：",[19,126368,126369],{},[269,126370],{"alt":34,"src":126371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,126373,126374],{},[269,126375],{"alt":34,"src":126376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1133,126378,126379],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":34,"searchDepth":74,"depth":74,"links":126381},[126382,126383,126388,126389,126395,126396],{"id":123114,"depth":74,"text":123115},{"id":123456,"depth":74,"text":123457,"children":126384},[126385,126386,126387],{"id":123460,"depth":99,"text":123461},{"id":123527,"depth":99,"text":123528},{"id":123788,"depth":99,"text":123789},{"id":123941,"depth":74,"text":123942},{"id":124179,"depth":74,"text":124180,"children":126390},[126391,126392,126393,126394],{"id":124231,"depth":99,"text":124232},{"id":124517,"depth":99,"text":124518},{"id":124788,"depth":99,"text":124789},{"id":125047,"depth":99,"text":125048},{"id":125106,"depth":74,"text":125107},{"id":125407,"depth":74,"text":125408,"children":126397},[126398,126399,126400,126401,126402,126403,126404,126405],{"id":125411,"depth":99,"text":125412},{"id":125423,"depth":99,"text":125424},{"id":125635,"depth":99,"text":125636},{"id":125659,"depth":99,"text":125660},{"id":125725,"depth":99,"text":125726},{"id":125819,"depth":99,"text":125820},{"id":125826,"depth":99,"text":125827},{"id":125850,"depth":99,"text":125851},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123106,"description":1142},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126412,"title":126413,"body":126414,"description":1142,"extension":1143,"meta":126418,"navigation":1145,"path":126419,"seo":126420,"stem":126421,"__hash__":126422},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126415,"toc":126416},[],{"title":34,"searchDepth":74,"depth":74,"links":126417},[],{"category":31320},"\u002Fwiki\u002F2025-01-27-linux",{"title":126413,"description":1142},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126424,"title":126425,"body":126426,"description":126430,"extension":1143,"meta":126821,"navigation":1145,"path":126822,"seo":126823,"stem":126824,"__hash__":126825},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126427,"toc":126819},[126428,126431,126435,126452,126455,126508,126512,126514,126554,126563,126567,126570,126811,126816],[19,126429,126430],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126432,126434],{"id":126433},"_1ubuntu环境配置","1.Ubuntu环境配置",[1171,126436,126437,126440,126443,126446,126449],{},[1174,126438,126439],{},"ubuntu环境换源",[1174,126441,126442],{},"安装cuda",[1174,126444,126445],{},"安装miniconda",[1174,126447,126448],{},"安装pytorch",[1174,126450,126451],{},"安装genesis",[19,126453,126454],{},"参考链接：",[29,126456,126458],{"className":24878,"code":126457,"language":24880,"meta":34,"style":34},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[36,126459,126460],{"__ignoreMap":34},[39,126461,126462,126465,126468,126471,126473,126476,126479,126481,126484,126487,126489,126492,126495,126497,126500,126503,126505],{"class":41,"line":42},[39,126463,126464],{"class":3021},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[39,126466,126467],{"class":1319},"=blogdetail",[39,126469,126470],{"class":45},"&sharetype",[39,126472,50],{"class":49},[39,126474,126475],{"class":1319},"blogdetail",[39,126477,126478],{"class":45},"&sharerId",[39,126480,50],{"class":49},[39,126482,126483],{"class":1319},"144728092",[39,126485,126486],{"class":45},"&sharerefer",[39,126488,50],{"class":49},[39,126490,126491],{"class":1319},"PC",[39,126493,126494],{"class":45},"&sharesource",[39,126496,50],{"class":49},[39,126498,126499],{"class":1319},"qq_69379513",[39,126501,126502],{"class":45},"&sharefrom",[39,126504,50],{"class":49},[39,126506,126507],{"class":1319},"from_link\n",[10,126509,126511],{"id":126510},"_2genesis-报错issue","2.Genesis 报错issue",[19,126513,126454],{},[29,126515,126516],{"className":24878,"code":126457,"language":24880,"meta":34,"style":34},[36,126517,126518],{"__ignoreMap":34},[39,126519,126520,126522,126524,126526,126528,126530,126532,126534,126536,126538,126540,126542,126544,126546,126548,126550,126552],{"class":41,"line":42},[39,126521,126464],{"class":3021},[39,126523,126467],{"class":1319},[39,126525,126470],{"class":45},[39,126527,50],{"class":49},[39,126529,126475],{"class":1319},[39,126531,126478],{"class":45},[39,126533,50],{"class":49},[39,126535,126483],{"class":1319},[39,126537,126486],{"class":45},[39,126539,50],{"class":49},[39,126541,126491],{"class":1319},[39,126543,126494],{"class":45},[39,126545,50],{"class":49},[39,126547,126499],{"class":1319},[39,126549,126502],{"class":45},[39,126551,50],{"class":49},[39,126553,126507],{"class":1319},[29,126555,126557],{"className":24878,"code":126556,"language":24880,"meta":34,"style":34},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[36,126558,126559],{"__ignoreMap":34},[39,126560,126561],{"class":41,"line":42},[39,126562,126556],{"class":3021},[10,126564,126566],{"id":126565},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126568,126569],{},"hello_robot.py",[29,126571,126573],{"className":31,"code":126572,"language":33,"meta":34,"style":34},"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",[36,126574,126575,126581,126596,126600,126612,126624,126628,126641,126645,126664,126674,126684,126698,126702,126706,126711,126715,126725,126732,126746,126753,126763,126768,126772,126790,126795,126799,126806],{"__ignoreMap":34},[39,126576,126577,126579],{"class":41,"line":42},[39,126578,31447],{"class":49},[39,126580,46360],{"class":45},[39,126582,126583,126586,126589,126591,126593],{"class":41,"line":74},[39,126584,126585],{"class":45},"os.environ[",[39,126587,126588],{"class":1319},"'PYOPENGL_PLATFORM'",[39,126590,5501],{"class":45},[39,126592,50],{"class":49},[39,126594,126595],{"class":1319}," 'glx'\n",[39,126597,126598],{"class":41,"line":99},[39,126599,3458],{"emptyLinePlaceholder":1145},[39,126601,126602,126604,126607,126609],{"class":41,"line":106},[39,126603,31447],{"class":49},[39,126605,126606],{"class":45}," genesis ",[39,126608,32438],{"class":49},[39,126610,126611],{"class":45}," gs\n",[39,126613,126614,126616,126619,126621],{"class":41,"line":112},[39,126615,31792],{"class":49},[39,126617,126618],{"class":45}," pynput ",[39,126620,31447],{"class":49},[39,126622,126623],{"class":45}," keyboard\n",[39,126625,126626],{"class":41,"line":118},[39,126627,3458],{"emptyLinePlaceholder":1145},[39,126629,126630,126633,126636,126638],{"class":41,"line":413},[39,126631,126632],{"class":45},"gs.init(",[39,126634,126635],{"class":254},"backend",[39,126637,50],{"class":49},[39,126639,126640],{"class":45},"gs.gpu)\n",[39,126642,126643],{"class":41,"line":419},[39,126644,3458],{"emptyLinePlaceholder":1145},[39,126646,126647,126650,126652,126655,126658,126660,126662],{"class":41,"line":425},[39,126648,126649],{"class":45},"scene ",[39,126651,50],{"class":49},[39,126653,126654],{"class":45}," gs.Scene(",[39,126656,126657],{"class":254},"show_viewer",[39,126659,50],{"class":49},[39,126661,32531],{"class":56},[39,126663,209],{"class":45},[39,126665,126666,126669,126671],{"class":41,"line":443},[39,126667,126668],{"class":45},"plane ",[39,126670,50],{"class":49},[39,126672,126673],{"class":45}," scene.add_entity(gs.morphs.Plane())\n",[39,126675,126676,126679,126681],{"class":41,"line":449},[39,126677,126678],{"class":45},"franka ",[39,126680,50],{"class":49},[39,126682,126683],{"class":45}," scene.add_entity(\n",[39,126685,126686,126689,126691,126693,126696],{"class":41,"line":455},[39,126687,126688],{"class":45},"    gs.morphs.MJCF(",[39,126690,46409],{"class":254},[39,126692,50],{"class":49},[39,126694,126695],{"class":1319},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[39,126697,39102],{"class":45},[39,126699,126700],{"class":41,"line":461},[39,126701,209],{"class":45},[39,126703,126704],{"class":41,"line":475},[39,126705,3458],{"emptyLinePlaceholder":1145},[39,126707,126708],{"class":41,"line":665},[39,126709,126710],{"class":45},"scene.build()\n",[39,126712,126713],{"class":41,"line":671},[39,126714,3458],{"emptyLinePlaceholder":1145},[39,126716,126717,126719,126722],{"class":41,"line":684},[39,126718,33002],{"class":49},[39,126720,126721],{"class":3021}," on_press",[39,126723,126724],{"class":45},"(key):\n",[39,126726,126727,126730],{"class":41,"line":2732},[39,126728,126729],{"class":49},"    try",[39,126731,4797],{"class":45},[39,126733,126734,126736,126739,126741,126744],{"class":41,"line":2737},[39,126735,3555],{"class":49},[39,126737,126738],{"class":45}," key.char ",[39,126740,4007],{"class":49},[39,126742,126743],{"class":1319}," 'q'",[39,126745,4797],{"class":45},[39,126747,126748,126750],{"class":41,"line":2751},[39,126749,16788],{"class":49},[39,126751,126752],{"class":56}," False\n",[39,126754,126755,126758,126761],{"class":41,"line":2756},[39,126756,126757],{"class":49},"    except",[39,126759,126760],{"class":56}," AttributeError",[39,126762,4797],{"class":45},[39,126764,126765],{"class":41,"line":2785},[39,126766,126767],{"class":49},"        pass\n",[39,126769,126770],{"class":41,"line":2790},[39,126771,3458],{"emptyLinePlaceholder":1145},[39,126773,126774,126777,126779,126782,126785,126787],{"class":41,"line":2807},[39,126775,126776],{"class":45},"listener ",[39,126778,50],{"class":49},[39,126780,126781],{"class":45}," keyboard.Listener(",[39,126783,126784],{"class":254},"on_press",[39,126786,50],{"class":49},[39,126788,126789],{"class":45},"on_press)\n",[39,126791,126792],{"class":41,"line":2812},[39,126793,126794],{"class":45},"listener.start()\n",[39,126796,126797],{"class":41,"line":2817},[39,126798,3458],{"emptyLinePlaceholder":1145},[39,126800,126801,126803],{"class":41,"line":2822},[39,126802,109608],{"class":49},[39,126804,126805],{"class":45}," listener.running:\n",[39,126807,126808],{"class":41,"line":2836},[39,126809,126810],{"class":45},"    scene.step()\n",[19,126812,126813],{},[269,126814],{"alt":34,"src":126815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1133,126817,126818],{},"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":34,"searchDepth":74,"depth":74,"links":126820},[],{"category":24434},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126425,"description":126430},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126827,"title":126828,"body":126829,"description":1142,"extension":1143,"meta":126844,"navigation":1145,"path":126845,"seo":126846,"stem":126847,"__hash__":126848},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126830,"toc":126841},[126831,126834,126838],[10,126832,126828],{"id":126833},"_1-基础知识",[14,126835,126837],{"id":126836},"_11-js的组成","1.1 js的组成",[19,126839,126840],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":34,"searchDepth":74,"depth":74,"links":126842},[126843],{"id":126836,"depth":74,"text":126837},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126828,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126850,"title":126851,"body":126852,"description":1142,"extension":1143,"meta":126991,"navigation":1145,"path":126992,"seo":126993,"stem":126994,"__hash__":126995},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126853,"toc":126979},[126854,126857,126861,126864,126868,126878,126882,126885,126888,126891,126895,126902,126908,126912,126918,126929,126933,126936,126940,126943,126947,126950,126954,126957,126961,126964,126967,126970,126973,126976],[10,126855,126851],{"id":126856},"_2-vscode必备内容",[14,126858,126860],{"id":126859},"_21-标签分类","2.1 标签分类",[19,126862,126863],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126865,126867],{"id":126866},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126869,126870,126871,126873,126874,126877],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[36,126872,1438],{}," 然后按 ",[36,126875,126876],{},"Tab","，快速自动生成基本结构。",[14,126879,126881],{"id":126880},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126883,126884],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126886,126887],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126889,126890],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126892,126894],{"id":126893},"_24-视图缩放","2.4 视图缩放",[19,126896,126897,126898,126901],{},"缩放视图 ",[36,126899,126900],{},"ctrl+"," 可实现代码增大。",[19,126903,126904,126907],{},[36,126905,126906],{},"ctrl-"," 可实现代码减小。",[14,126909,126911],{"id":126910},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126913,126914,126915,29442],{},"VSCode 新建文件快捷键为 ",[36,126916,126917],{},"ctrl+N",[19,126919,126920,126921,126924,126925,126928],{},"保存快捷键为 ",[36,126922,126923],{},"ctrl+S","，将文本保存为 ",[36,126926,126927],{},".html"," 文件。",[14,126930,126932],{"id":126931},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126934,126935],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126937,126939],{"id":126938},"_27-vscode-icons","2.7 vscode-icons",[19,126941,126942],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126944,126946],{"id":126945},"_28-easy-less","2.8 Easy LESS",[19,126948,126949],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126951,126953],{"id":126952},"_29-会了吧插件","2.9 会了吧插件",[19,126955,126956],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126958,126960],{"id":126959},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126962,126963],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126965,126966],{},"②选定多个相同的单词:ctrl+D",[19,126968,126969],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126971,126972],{},"④全局替换某些单词:ctrl+h",[19,126974,126975],{},"⑤快速定位到某一行:ctrl+g",[19,126977,126978],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":34,"searchDepth":74,"depth":74,"links":126980},[126981,126982,126983,126984,126985,126986,126987,126988,126989,126990],{"id":126859,"depth":74,"text":126860},{"id":126866,"depth":74,"text":126867},{"id":126880,"depth":74,"text":126881},{"id":126893,"depth":74,"text":126894},{"id":126910,"depth":74,"text":126911},{"id":126931,"depth":74,"text":126932},{"id":126938,"depth":74,"text":126939},{"id":126945,"depth":74,"text":126946},{"id":126952,"depth":74,"text":126953},{"id":126959,"depth":74,"text":126960},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126851,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126997,"title":126998,"body":126999,"description":1142,"extension":1143,"meta":127158,"navigation":1145,"path":127159,"seo":127160,"stem":127161,"__hash__":127162},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127000,"toc":127150},[127001,127004,127008,127018,127024,127030,127034,127043,127047,127052,127055,127058,127062,127065,127075,127084,127093,127102,127112,127119,127124,127129,127142],[10,127002,126998],{"id":127003},"_3-html文本与容器标签",[14,127005,127007],{"id":127006},"_31-标题标签","3.1 标题标签",[19,127009,127010,127013,127014,127017],{},[36,127011,127012],{},"\u003Ch1>","我是一级标签",[36,127015,127016],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127019,127020,127013,127022],{},[36,127021,127012],{},[36,127023,127016],{},[19,127025,124280,127026,127029],{},[36,127027,127028],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127031,127033],{"id":127032},"_32-段落标签","3.2 段落标签",[19,127035,127036,127039,127040],{},[36,127037,127038],{},"\u003Cp>","....",[36,127041,127042],{},"\u003C\u002Fp>",[14,127044,127046],{"id":127045},"_33-换行标签","3.3 换行标签",[19,127048,127049],{},[36,127050,127051],{},"\u003Cbr \u002F>",[19,127053,127054],{},"具有强制换行的作用",[19,127056,127057],{},"单标签",[14,127059,127061],{"id":127060},"_34-文本格式化标签","3.4 文本格式化标签",[19,127063,127064],{},"提供粗体、斜体和下划线等效果",[19,127066,127067,127068,83593,127071,127074],{},"加粗：",[36,127069,127070],{},"\u003Cstrong>...\u003C\u002Fstrong>",[36,127072,127073],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127076,127077,127078,83593,127081,127074],{},"斜体：",[36,127079,127080],{},"\u003Cem>...\u003C\u002Fem>",[36,127082,127083],{},"\u003Ci>...\u003C\u002Fi>",[19,127085,127086,127087,83593,127090,127074],{},"删除线：",[36,127088,127089],{},"\u003Cdel>...\u003C\u002Fdel>",[36,127091,127092],{},"\u003Cs>...\u003C\u002Fs>",[19,127094,127095,127096,83593,127099,127074],{},"下划线：",[36,127097,127098],{},"\u003Cins>...\u003C\u002Fins>",[36,127100,127101],{},"\u003Cu>...\u003C\u002Fu>",[14,127103,127105,127106,19466,127109,103638],{"id":127104},"_35-div和span标签","3.5 ",[36,127107,127108],{},"\u003Cdiv>",[36,127110,127111],{},"\u003Cspan>",[19,127113,127114,101963,127116,127118],{},[36,127115,127108],{},[36,127117,127111],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127120,127121],{},[36,127122,127123],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127125,127126],{},[36,127127,127128],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127130,127131,127132,127134,127135,127137,127138,127141],{},"两者特点：①",[36,127133,127108],{}," 标签用来布局，但一行通常只放一个 ",[36,127136,127108],{},"。可以理解为一个大盒子，独占一行，在 ",[36,127139,127140],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127143,78303,127144,127146,127147,127149],{},[36,127145,127111],{}," 标签也可用于布局，一行可以放多个 ",[36,127148,127111],{},"，可理解为小盒子。",{"title":34,"searchDepth":74,"depth":74,"links":127151},[127152,127153,127154,127155,127156],{"id":127006,"depth":74,"text":127007},{"id":127032,"depth":74,"text":127033},{"id":127045,"depth":74,"text":127046},{"id":127060,"depth":74,"text":127061},{"id":127104,"depth":74,"text":127157},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126998,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127164,"title":127165,"body":127166,"description":1142,"extension":1143,"meta":127363,"navigation":1145,"path":127364,"seo":127365,"stem":127366,"__hash__":127367},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127167,"toc":127355},[127168,127171,127175,127178,127184,127191,127197,127203,127206,127209,127212,127215,127218,127221,127224,127228,127231,127234,127237,127243,127249,127255,127262,127266,127272,127278,127281,127284,127290,127296,127302,127305,127308,127312,127315,127325,127331,127335,127344,127348,127351],[10,127169,127165],{"id":127170},"_4-html图像与链接",[14,127172,127174],{"id":127173},"_41-图像标签","4.1 图像标签",[19,127176,127177],{},"（1）标签",[19,127179,127180,127183],{},[36,127181,127182],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127185,127186,127187,127190],{},"src是",[36,127188,127189],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127192,127193,127194],{},"alt:文本，替换文本。图像不能显示的文字 ",[36,127195,127196],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127198,127199,127200],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[36,127201,127202],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127204,127205],{},"width:像素，设置图像的宽度",[19,127207,127208],{},"height:像素，设置图像的高度",[19,127210,127211],{},"border：像素，设置图像的边框粗细",[19,127213,127214],{},"（2）图像标签属性的注意点：",[19,127216,127217],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127219,127220],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127222,127223],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127225,127227],{"id":127226},"_42-路径注意要点","4.2 路径注意要点：",[19,127229,127230],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127232,127233],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127235,127236],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127238,127239,127240],{},"①同一级路径：图像文件位于HTML文件同一级，如",[36,127241,127242],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127244,127245,127246],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[36,127247,127248],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127250,127251,127252],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[36,127253,127254],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127256,127257,127258,1462],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[46,127259,127260],{"href":127260,"rel":127261},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24921],[14,127263,127265],{"id":127264},"_43-超链接标签","4.3 超链接标签",[19,127267,127268,127271],{},[36,127269,127270],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127273,127274,127275],{},"①语法格式：",[36,127276,127277],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127279,127280],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127282,127283],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127285,127286,127287],{},"③链接分类：外部链接：",[36,127288,127289],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127291,127292,127293],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[36,127294,127295],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127297,127298,127299],{},"空链接：如果当时没有确定链接目标时，",[36,127300,127301],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127303,127304],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127306,127307],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127309,127311],{"id":127310},"_44-锚点链接","4.4 锚点链接",[19,127313,127314],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,127316,127317,127318,127321,127322],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[36,127319,127320],{},"\u003Ca href=\"#two\">","第二级",[36,127323,127324],{},"\u003C\u002Fa>",[19,127326,127327,127328],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[36,127329,127330],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127332,127334],{"id":127333},"_45-注释标签","4.5 注释标签",[19,127336,127337,127340,127341],{},[36,127338,127339],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[36,127342,127343],{},"ctrl+\u002F",[14,127345,127347],{"id":127346},"_46-特殊字符","4.6 特殊字符",[19,127349,127350],{},"可以实现添加多个空格",[269,127352],{"style":127353,"src":127354},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":34,"searchDepth":74,"depth":74,"links":127356},[127357,127358,127359,127360,127361,127362],{"id":127173,"depth":74,"text":127174},{"id":127226,"depth":74,"text":127227},{"id":127264,"depth":74,"text":127265},{"id":127310,"depth":74,"text":127311},{"id":127333,"depth":74,"text":127334},{"id":127346,"depth":74,"text":127347},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127165,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127369,"title":127370,"body":127371,"description":1142,"extension":1143,"meta":127664,"navigation":1145,"path":127665,"seo":127666,"stem":127667,"__hash__":127668},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127372,"toc":127655},[127373,127376,127380,127383,127386,127389,127392,127395,127398,127401,127404,127407,127427,127433,127437,127440,127443,127446,127449,127452,127455,127459,127462,127465,127468,127471,127484,127489,127492,127495,127510,127513,127516,127519,127522,127525,127529,127532,127539,127542,127545,127548,127551,127554,127560,127563,127566,127572,127575,127578,127581,127587,127590,127593,127607,127614,127617,127620,127627,127636,127639,127642,127645,127649,127652],[10,127374,127370],{"id":127375},"_5-html表格列表与表单",[14,127377,127379],{"id":127378},"_51-表格标签","5.1 表格标签",[19,127381,127382],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,127384,127385],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,127387,127388],{},"②表格基本语法：",[269,127390],{"style":127353,"src":127391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,127393,127394],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[269,127396],{"style":127353,"src":127397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,127399,127400],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[269,127402],{"style":127353,"src":127403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,127405,127406],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,127408,127409,127412,127413,127415,127416,127419,127420,127422,127423,127426],{},[36,127410,127411],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[36,127414,127411],{},"内部必须拥有",[36,127417,127418],{},"\u003Ctr>","标签，一般位于第一行，",[36,127421,127411],{},"比",[36,127424,127425],{},"\u003Cth>","范围广",[19,127428,127429,127432],{},[36,127430,127431],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127434,127436],{"id":127435},"_52-合并单元格","5.2 合并单元格",[19,127438,127439],{},"（1）合并单元格方式：",[19,127441,127442],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127444,127445],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127447,127448],{},"（2）目标单元格：",[19,127450,127451],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127453,127454],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127456,127458],{"id":127457},"_53-列表标签","5.3 列表标签",[19,127460,127461],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127463,127464],{},"①无序列表：",[269,127466],{"style":127353,"src":127467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127469,127470],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127472,127473,127476,127477,127480,127481,127483],{},[36,127474,127475],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[36,127478,127479],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[36,127482,127475],{},"中输入其他标签或文字是不对的",[19,127485,127486,127488],{},[36,127487,127479],{},"之间相当于一个容器，可以容纳所有元素",[19,127490,127491],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127493,127494],{},"在css中去除前边的小圆点采用如下代码:",[29,127496,127500],{"className":127497,"code":127498,"language":127499,"meta":34,"style":34},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[36,127501,127502],{"__ignoreMap":34},[39,127503,127504,127507],{"class":41,"line":42},[39,127505,127506],{"class":52354},"list-style",[39,127508,127509],{"class":45},": none;\n",[19,127511,127512],{},"②有序列表：",[269,127514],{"style":127353,"src":127515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,127517,127518],{},"③自定义列表：",[269,127520],{"style":127353,"src":127521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[269,127523],{"style":127353,"src":127524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127526,127528],{"id":127527},"_54-表单标签","5.4 表单标签",[19,127530,127531],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,127533,127534,127535,127538],{},"（1）表单域：包含单元素的区域，",[36,127536,127537],{},"\u003Cform>","标签可以实现信息的收集和传递。",[269,127540],{"style":127353,"src":127541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,127543,127544],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127546,127547],{},"表单元素提交必须有name属性",[19,127549,127550],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127552,127553],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127555,78280,127556,127559],{},[36,127557,127558],{},"\u003Cinput>","输入表单元素",[269,127561],{"style":127353,"src":127562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[269,127564],{"style":127353,"src":127565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127567,127568,127569],{},"单选按钮：",[36,127570,127571],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[269,127573],{"style":127353,"src":127574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127576,127577],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[269,127579],{"style":127353,"src":127580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,127582,127583,127586],{},[304,127584,127585],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,127588,127589],{},"②select下拉表单元素：可以节约页面控件",[269,127591],{"style":127353,"src":127592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,127594,127595,14851,127597,127600,127601,127603,127604,127606],{},[304,127596,1249],{},[36,127598,127599],{},"\u003Cselect>","中至少包含一对",[36,127602,103659],{},"；在",[36,127605,103659],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,127608,127609,127610,127613],{},"③",[36,127611,127612],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[269,127615],{"style":127353,"src":127616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,127618,127619],{},"3行20列",[14,127621,127623,127624,103638],{"id":127622},"_55-lable标签","5.5 ",[36,127625,127626],{},"\u003Clable>",[19,127628,127629,127630,127632,127633,127635],{},"它不是表单标签，但常常与表单标签搭配使用，",[36,127631,127626],{},"标签用于绑定一个表单标签，当点击",[36,127634,127626],{},"标签内的文本",[19,127637,127638],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[269,127640],{"style":127353,"src":127641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[269,127643],{"style":127353,"src":127644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,127646,127648],{"id":127647},"_56-实例","5.6 实例",[269,127650],{"style":127353,"src":127651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1133,127653,127654],{},"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":34,"searchDepth":74,"depth":74,"links":127656},[127657,127658,127659,127660,127661,127663],{"id":127378,"depth":74,"text":127379},{"id":127435,"depth":74,"text":127436},{"id":127457,"depth":74,"text":127458},{"id":127527,"depth":74,"text":127528},{"id":127622,"depth":74,"text":127662},"5.5 \u003Clable>标签",{"id":127647,"depth":74,"text":127648},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127370,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127670,"title":127671,"body":127672,"description":1142,"extension":1143,"meta":128221,"navigation":1145,"path":128222,"seo":128223,"stem":128224,"__hash__":128225},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127673,"toc":128196},[127674,127677,127681,127684,127687,127691,127694,127697,127700,127703,127706,127709,127712,127716,127719,127723,127726,127729,127732,127736,127739,127742,127745,127751,127754,127757,127760,127763,127766,127769,127772,127805,127809,127812,127815,127818,127822,127825,127828,127831,127834,127837,127841,127844,127847,127850,127854,127857,127861,127864,127868,127871,127876,127880,127883,127887,127890,127893,127896,127899,127926,127929,127933,127936,127939,127944,127947,127950,127954,127957,127962,127965,127968,127971,127975,127978,127981,127984,127988,127991,127994,127997,128001,128005,128008,128048,128051,128055,128062,128065,128069,128072,128118,128122,128125,128128,128131,128159,128163,128166,128193],[10,127675,127671],{"id":127676},"_6-css语法与文本样式",[14,127678,127680],{"id":127679},"_61-css语法规范","6.1 css语法规范",[19,127682,127683],{},"由两部分组成，选择器及一条或多条声明",[269,127685],{"style":127353,"src":127686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,127688,127689],{},[304,127690,1249],{},[19,127692,127693],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,127695,127696],{},"②属性与属性值以“键值对”的形式出现",[19,127698,127699],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,127701,127702],{},"④属性和属性值之间用英文“;”分开",[269,127704],{"style":127353,"src":127705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[269,127707],{"style":127353,"src":127708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[269,127710],{"style":127353,"src":127711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,127713,127715],{"id":127714},"_62-css选择器","6.2 css选择器",[19,127717,127718],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[1188,127720,127722],{"id":127721},"_621-标签选择器","6.2.1 标签选择器",[19,127724,127725],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,127727,127728],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[269,127730],{"style":127353,"src":127731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[1188,127733,127735],{"id":127734},"_622-类选择器","6.2.2 类选择器",[19,127737,127738],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,127740,127741],{},"②样例",[269,127743],{"style":127353,"src":127744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,127746,127747,127748,127750],{},"③ ",[304,127749,127585],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,127752,127753],{},"可以理解为给这个标签起了个名字，来表示；",[19,127755,127756],{},"长名称或词组可以使用横线来为选择器命名；",[19,127758,127759],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,127761,127762],{},"命名要有意义；",[269,127764],{"style":127353,"src":127765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,127767,127768],{},"类选择器也可以指定特殊的元素p.center{}",[19,127770,127771],{},"p.center和.center都对",[29,127773,127775],{"className":127497,"code":127774,"language":127499,"meta":34,"style":34},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[36,127776,127777,127782,127791,127801],{"__ignoreMap":34},[39,127778,127779],{"class":41,"line":42},[39,127780,127781],{"class":102},"\u002F* 类选择器指定特殊元素 *\u002F\n",[39,127783,127784,127786,127789],{"class":41,"line":74},[39,127785,19],{"class":52354},[39,127787,127788],{"class":3021},".center",[39,127790,16628],{"class":45},[39,127792,127793,127795,127797,127799],{"class":41,"line":99},[39,127794,71580],{"class":56},[39,127796,52491],{"class":45},[39,127798,52646],{"class":56},[39,127800,2359],{"class":45},[39,127802,127803],{"class":41,"line":106},[39,127804,2630],{"class":45},[1188,127806,127808],{"id":127807},"_623-多类名使用","6.2.3 多类名使用",[19,127810,127811],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[269,127813],{"style":127353,"src":127814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,127816,127817],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[1188,127819,127821],{"id":127820},"_624-id选择器","6.2.4 id选择器",[19,127823,127824],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,127826,127827],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[269,127829],{"style":127353,"src":127830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,127832,127833],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,127835,127836],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[1188,127838,127840],{"id":127839},"_625-通配符选择器","6.2.5 通配符选择器",[19,127842,127843],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,127845,127846],{},"* {",[19,127848,127849],{},"color=\"red\"}",[1188,127851,127853],{"id":127852},"_626-总结","6.2.6 总结",[269,127855],{"style":127353,"src":127856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127858,127860],{"id":127859},"_63-css字体属性","6.3 css字体属性",[19,127862,127863],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[1188,127865,127867],{"id":127866},"_631-字体系列","6.3.1 字体系列",[19,127869,127870],{},"font-family: '宋体';",[19,127872,127873,127875],{},[304,127874,1249],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[1188,127877,127879],{"id":127878},"_632-字体大小","6.3.2 字体大小",[19,127881,127882],{},"font-size: 20px",[19,127884,127885,27530],{},[304,127886,127585],{},[19,127888,127889],{},"①px（像素）大小是网页的最常用单位",[19,127891,127892],{},"②谷歌浏览器默认为16px",[19,127894,127895],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127897,127898],{},"④可以给body指定整个页面的大小：会自动引用",[29,127900,127902],{"className":127497,"code":127901,"language":127499,"meta":34,"style":34},"body {\n  font-size: 16px;\n}\n",[36,127903,127904,127910,127922],{"__ignoreMap":34},[39,127905,127906,127908],{"class":41,"line":42},[39,127907,52854],{"class":52354},[39,127909,16628],{"class":45},[39,127911,127912,127914,127916,127918,127920],{"class":41,"line":74},[39,127913,71680],{"class":56},[39,127915,52491],{"class":45},[39,127917,1801],{"class":56},[39,127919,52546],{"class":49},[39,127921,2359],{"class":45},[39,127923,127924],{"class":41,"line":99},[39,127925,2630],{"class":45},[19,127927,127928],{},"⑤标题标签比较特殊，需要单独指定大小",[1188,127930,127932],{"id":127931},"_633-字体粗细","6.3.3 字体粗细",[19,127934,127935],{},"font-weight: bold;",[19,127937,127938],{},"font-weight: 100；",[19,127940,127941,127943],{},[304,127942,1249],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127945,127946],{},"font-weight= 400;",[19,127948,127949],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[1188,127951,127953],{"id":127952},"_634-文字样式","6.3.4 文字样式",[19,127955,127956],{},"font-style: normal；",[19,127958,127959,27530],{},[304,127960,127961],{},"属性值",[19,127963,127964],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127966,127967],{},"②italic：浏览器会显示斜体的字体样式",[269,127969],{"style":127353,"src":127970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[1188,127972,127974],{"id":127973},"_635-字体符合属性","6.3.5 字体符合属性",[269,127976],{"style":127353,"src":127977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[269,127979],{"style":127353,"src":127980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127982,127983],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127985,127986,27530],{},[304,127987,127585],{},[19,127989,127990],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127992,127993],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127995,127996],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127998,128000],{"id":127999},"_64-css-test文本属性","6.4 css test文本属性",[1188,128002,128004],{"id":128003},"_641-文本颜色","6.4.1 文本颜色",[19,128006,128007],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[29,128009,128011],{"className":127497,"code":128010,"language":127499,"meta":34,"style":34},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[36,128012,128013,128018,128024,128034,128039,128044],{"__ignoreMap":34},[39,128014,128015],{"class":41,"line":42},[39,128016,128017],{"class":102},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[39,128019,128020,128022],{"class":41,"line":74},[39,128021,19],{"class":52354},[39,128023,16628],{"class":45},[39,128025,128026,128028,128030,128032],{"class":41,"line":99},[39,128027,71959],{"class":56},[39,128029,52491],{"class":45},[39,128031,58475],{"class":56},[39,128033,2359],{"class":45},[39,128035,128036],{"class":41,"line":106},[39,128037,128038],{"class":102},"  \u002F* color: #ff0000; *\u002F\n",[39,128040,128041],{"class":41,"line":112},[39,128042,128043],{"class":102},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[39,128045,128046],{"class":41,"line":118},[39,128047,2630],{"class":45},[269,128049],{"style":127353,"src":128050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[1188,128052,128054],{"id":128053},"_642-对齐文本","6.4.2 对齐文本",[19,128056,128057,128058,128061],{},"text-align属于用于设置元素内文本内容的 ",[304,128059,128060],{},"水平对齐"," 方式",[19,128063,128064],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[1188,128066,128068],{"id":128067},"_643-装饰文本","6.4.3 装饰文本",[19,128070,128071],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[29,128073,128075],{"className":127497,"code":128074,"language":127499,"meta":34,"style":34},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[36,128076,128077,128083,128093,128097,128103,128114],{"__ignoreMap":34},[39,128078,128079,128081],{"class":41,"line":42},[39,128080,46],{"class":52354},[39,128082,16628],{"class":45},[39,128084,128085,128087,128089,128091],{"class":41,"line":74},[39,128086,71556],{"class":56},[39,128088,52491],{"class":45},[39,128090,55791],{"class":56},[39,128092,2359],{"class":45},[39,128094,128095],{"class":41,"line":99},[39,128096,2630],{"class":45},[39,128098,128099,128101],{"class":41,"line":106},[39,128100,19],{"class":52354},[39,128102,16628],{"class":45},[39,128104,128105,128107,128109,128112],{"class":41,"line":112},[39,128106,71556],{"class":56},[39,128108,52491],{"class":45},[39,128110,128111],{"class":56},"underline",[39,128113,2359],{"class":45},[39,128115,128116],{"class":41,"line":118},[39,128117,2630],{"class":45},[1188,128119,128121],{"id":128120},"_644-文本缩进","6.4.4 文本缩进",[19,128123,128124],{},"实现文本的第一行首行缩进自己指定的距离",[19,128126,128127],{},"20px往右边走；-20px往左边走",[19,128129,128130],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[29,128132,128134],{"className":127497,"code":128133,"language":127499,"meta":34,"style":34},"p {\n  text-indent: 2em;\n}\n",[36,128135,128136,128142,128155],{"__ignoreMap":34},[39,128137,128138,128140],{"class":41,"line":42},[39,128139,19],{"class":52354},[39,128141,16628],{"class":45},[39,128143,128144,128147,128149,128151,128153],{"class":41,"line":74},[39,128145,128146],{"class":56},"  text-indent",[39,128148,52491],{"class":45},[39,128150,63],{"class":56},[39,128152,24609],{"class":49},[39,128154,2359],{"class":45},[39,128156,128157],{"class":41,"line":99},[39,128158,2630],{"class":45},[1188,128160,128162],{"id":128161},"_645-行间距","6.4.5 行间距",[19,128164,128165],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[29,128167,128169],{"className":127497,"code":128168,"language":127499,"meta":34,"style":34},"p {\n  line-height: 1.6;\n}\n",[36,128170,128171,128177,128189],{"__ignoreMap":34},[39,128172,128173,128175],{"class":41,"line":42},[39,128174,19],{"class":52354},[39,128176,16628],{"class":45},[39,128178,128179,128182,128184,128187],{"class":41,"line":74},[39,128180,128181],{"class":56},"  line-height",[39,128183,52491],{"class":45},[39,128185,128186],{"class":56},"1.6",[39,128188,2359],{"class":45},[39,128190,128191],{"class":41,"line":99},[39,128192,2630],{"class":45},[1133,128194,128195],{},"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":34,"searchDepth":74,"depth":74,"links":128197},[128198,128199,128207,128214],{"id":127679,"depth":74,"text":127680},{"id":127714,"depth":74,"text":127715,"children":128200},[128201,128202,128203,128204,128205,128206],{"id":127721,"depth":99,"text":127722},{"id":127734,"depth":99,"text":127735},{"id":127807,"depth":99,"text":127808},{"id":127820,"depth":99,"text":127821},{"id":127839,"depth":99,"text":127840},{"id":127852,"depth":99,"text":127853},{"id":127859,"depth":74,"text":127860,"children":128208},[128209,128210,128211,128212,128213],{"id":127866,"depth":99,"text":127867},{"id":127878,"depth":99,"text":127879},{"id":127931,"depth":99,"text":127932},{"id":127952,"depth":99,"text":127953},{"id":127973,"depth":99,"text":127974},{"id":127999,"depth":74,"text":128000,"children":128215},[128216,128217,128218,128219,128220],{"id":128003,"depth":99,"text":128004},{"id":128053,"depth":99,"text":128054},{"id":128067,"depth":99,"text":128068},{"id":128120,"depth":99,"text":128121},{"id":128161,"depth":99,"text":128162},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127671,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128227,"title":128228,"body":128229,"description":1142,"extension":1143,"meta":128878,"navigation":1145,"path":128879,"seo":128880,"stem":128881,"__hash__":128882},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128230,"toc":128859},[128231,128234,128238,128242,128302,128306,128316,128319,128322,128326,128351,128355,128358,128361,128364,128367,128370,128374,128377,128380,128422,128425,128451,128457,128460,128464,128468,128474,128477,128480,128483,128486,128489,128492,128537,128541,128544,128547,128551,128555,128584,128587,128592,128595,128598,128601,128604,128608,128612,128615,128617,128620,128624,128627,128631,128634,128637,128640,128644,128648,128654,128664,128667,128670,128673,128676,128679,128802,128810,128818,128856],[10,128232,128228],{"id":128233},"_7-css引入方式与选择器进阶",[14,128235,128237],{"id":128236},"_71-css引入方式","7.1 css引入方式",[1188,128239,128241],{"id":128240},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[29,128243,128247],{"className":128244,"code":128245,"language":128246,"meta":34,"style":34},"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",[36,128248,128249,128257,128264,128276,128289,128294],{"__ignoreMap":34},[39,128250,128251,128253,128255],{"class":41,"line":42},[39,128252,2108],{"class":45},[39,128254,1133],{"class":52354},[39,128256,52361],{"class":45},[39,128258,128259,128262],{"class":41,"line":74},[39,128260,128261],{"class":52354},"  h1",[39,128263,16628],{"class":45},[39,128265,128266,128269,128271,128274],{"class":41,"line":99},[39,128267,128268],{"class":56},"    color",[39,128270,52491],{"class":45},[39,128272,128273],{"class":56},"blue",[39,128275,2359],{"class":45},[39,128277,128278,128281,128283,128285,128287],{"class":41,"line":106},[39,128279,128280],{"class":56},"    font-size",[39,128282,52491],{"class":45},[39,128284,1998],{"class":56},[39,128286,52546],{"class":49},[39,128288,2359],{"class":45},[39,128290,128291],{"class":41,"line":112},[39,128292,128293],{"class":45},"  }\n",[39,128295,128296,128298,128300],{"class":41,"line":118},[39,128297,52839],{"class":45},[39,128299,1133],{"class":52354},[39,128301,52361],{"class":45},[19,128303,128304,27530],{},[304,128305,127585],{},[19,128307,78280,128308,128311,128312,128315],{},[36,128309,128310],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[36,128313,128314],{},"\u003Chead>","标签中",[19,128317,128318],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,128320,128321],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[1188,128323,128325],{"id":128324},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[29,128327,128329],{"className":128244,"code":128328,"language":128246,"meta":34,"style":34},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[36,128330,128331],{"__ignoreMap":34},[39,128332,128333,128335,128337,128339,128341,128344,128347,128349],{"class":41,"line":42},[39,128334,2108],{"class":45},[39,128336,19],{"class":52354},[39,128338,63680],{"class":3021},[39,128340,50],{"class":45},[39,128342,128343],{"class":1319},"\"color: red; font-size: 16px;\"",[39,128345,128346],{"class":45},">这是一个段落\u003C\u002F",[39,128348,19],{"class":52354},[39,128350,52361],{"class":45},[19,128352,128353,27530],{},[304,128354,127585],{},[19,128356,128357],{},"①style其实就是标签的属性",[19,128359,128360],{},"②在双引号中间，写法要符合css规范",[19,128362,128363],{},"③可以控制当前的标签设置样式",[19,128365,128366],{},"④书写繁琐，简单时才用",[19,128368,128369],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[1188,128371,128373],{"id":128372},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,128375,128376],{},"使用最多，单独建一个css文件，然后html引用",[19,128378,128379],{},"①css文件部分： style.css",[29,128381,128383],{"className":127497,"code":128382,"language":127499,"meta":34,"style":34},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[36,128384,128385,128390,128396,128406,128418],{"__ignoreMap":34},[39,128386,128387],{"class":41,"line":42},[39,128388,128389],{"class":102},"\u002F* style.css *\u002F\n",[39,128391,128392,128394],{"class":41,"line":74},[39,128393,10],{"class":52354},[39,128395,16628],{"class":45},[39,128397,128398,128400,128402,128404],{"class":41,"line":99},[39,128399,71959],{"class":56},[39,128401,52491],{"class":45},[39,128403,128273],{"class":56},[39,128405,2359],{"class":45},[39,128407,128408,128410,128412,128414,128416],{"class":41,"line":106},[39,128409,71680],{"class":56},[39,128411,52491],{"class":45},[39,128413,1998],{"class":56},[39,128415,52546],{"class":49},[39,128417,2359],{"class":45},[39,128419,128420],{"class":41,"line":112},[39,128421,2630],{"class":45},[19,128423,128424],{},"②html部分",[29,128426,128428],{"className":128244,"code":128427,"language":128246,"meta":34,"style":34},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[36,128429,128430],{"__ignoreMap":34},[39,128431,128432,128434,128436,128438,128440,128442,128444,128446,128449],{"class":41,"line":42},[39,128433,2108],{"class":45},[39,128435,70059],{"class":52354},[39,128437,70062],{"class":3021},[39,128439,50],{"class":45},[39,128441,70067],{"class":1319},[39,128443,62111],{"class":3021},[39,128445,50],{"class":45},[39,128447,128448],{"class":1319},"\"style.css\"",[39,128450,52361],{"class":45},[19,128452,128453,128456],{},[36,128454,128455],{},"\u003Chr>","水平线标签（但是不常用！）",[19,128458,128459],{},"ctrl+0回到页面原来大小",[14,128461,128463],{"id":128462},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[1188,128465,128467],{"id":128466},"_721-快速生成html","7.2.1 快速生成html",[19,128469,128470,128471],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[36,128472,128473],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,128475,128476],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,128478,128479],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,128481,128482],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,128484,128485],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,128487,128488],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,128490,128491],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[29,128493,128495],{"className":128244,"code":128494,"language":128246,"meta":34,"style":34},"\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",[36,128496,128497,128502,128507,128512,128517,128522,128527,128532],{"__ignoreMap":34},[39,128498,128499],{"class":41,"line":42},[39,128500,128501],{"class":102},"\u003C!-- Emmet 语法示例 -->\n",[39,128503,128504],{"class":41,"line":74},[39,128505,128506],{"class":102},"\u003C!-- div*3        → 生成3个div -->\n",[39,128508,128509],{"class":41,"line":99},[39,128510,128511],{"class":102},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[39,128513,128514],{"class":41,"line":106},[39,128515,128516],{"class":102},"\u003C!-- div+p        → 兄弟div和p -->\n",[39,128518,128519],{"class":41,"line":112},[39,128520,128521],{"class":102},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[39,128523,128524],{"class":41,"line":118},[39,128525,128526],{"class":102},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[39,128528,128529],{"class":41,"line":413},[39,128530,128531],{"class":102},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[39,128533,128534],{"class":41,"line":419},[39,128535,128536],{"class":102},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[1188,128538,128540],{"id":128539},"_722-快速生成css","7.2.2 快速生成css",[19,128542,128543],{},"简写开头",[19,128545,128546],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128548,128550],{"id":128549},"_73-css复合选择器","7.3 css复合选择器",[1188,128552,128554],{"id":128553},"_731-后代选择器","7.3.1 后代选择器",[29,128556,128558],{"className":127497,"code":128557,"language":127499,"meta":34,"style":34},".parent .child {\n  color: blue;\n}\n",[36,128559,128560,128570,128580],{"__ignoreMap":34},[39,128561,128562,128565,128568],{"class":41,"line":42},[39,128563,128564],{"class":3021},".parent",[39,128566,128567],{"class":3021}," .child",[39,128569,16628],{"class":45},[39,128571,128572,128574,128576,128578],{"class":41,"line":74},[39,128573,71959],{"class":56},[39,128575,52491],{"class":45},[39,128577,128273],{"class":56},[39,128579,2359],{"class":45},[39,128581,128582],{"class":41,"line":99},[39,128583,2630],{"class":45},[19,128585,128586],{},"元素1 元素2 {样式声明}",[19,128588,128589],{},[304,128590,128591],{},"注意点:",[19,128593,128594],{},"①元素1和元素2中间用空格隔开",[19,128596,128597],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,128599,128600],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,128602,128603],{},"④元素1和元素2可以是任意基础选择器",[1188,128605,128607],{"id":128606},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,128609,128610],{},[304,128611,128591],{},[19,128613,128614],{},"①元素1和元素2中间用大于号隔开",[19,128616,128597],{},[19,128618,128619],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[1188,128621,128623],{"id":128622},"_733-并集选择器","7.3.3 并集选择器",[19,128625,128626],{},"元素1，元素2 {样式声明}",[19,128628,128629],{},[304,128630,128591],{},[19,128632,128633],{},"①元素1和元素2中间用逗号隔开",[19,128635,128636],{},"②逗号可以理解为和的意思",[19,128638,128639],{},"③并集选择器通常用于集体声明",[1188,128641,128643],{"id":128642},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,128645,128646],{},[304,128647,128591],{},[19,128649,128650,128651,128653],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70059,128652],{},"－:visited－:hover－:active。",[19,128655,128656,128657,128660,128661,26797],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128658,128659],"hover",{}," 、 ",[128662,128663],"first-child",{},[19,128665,128666],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,128668,128669],{},"link对没访问的进行设置",[19,128671,128672],{},"vistied对已访问的进行改变",[19,128674,128675],{},"hover鼠标经过就会变",[19,128677,128678],{},"active常按(点)就会变",[29,128680,128682],{"className":127497,"code":128681,"language":127499,"meta":34,"style":34},"\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",[36,128683,128684,128689,128698,128708,128718,128722,128731,128742,128746,128754,128764,128774,128778,128787,128798],{"__ignoreMap":34},[39,128685,128686],{"class":41,"line":42},[39,128687,128688],{"class":102},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[39,128690,128691,128693,128696],{"class":41,"line":74},[39,128692,46],{"class":52354},[39,128694,128695],{"class":3021},":link",[39,128697,16628],{"class":45},[39,128699,128700,128702,128704,128706],{"class":41,"line":99},[39,128701,71959],{"class":56},[39,128703,52491],{"class":45},[39,128705,63423],{"class":56},[39,128707,2359],{"class":45},[39,128709,128710,128712,128714,128716],{"class":41,"line":106},[39,128711,71556],{"class":56},[39,128713,52491],{"class":45},[39,128715,55791],{"class":56},[39,128717,2359],{"class":45},[39,128719,128720],{"class":41,"line":112},[39,128721,2630],{"class":45},[39,128723,128724,128726,128729],{"class":41,"line":118},[39,128725,46],{"class":52354},[39,128727,128728],{"class":3021},":visited",[39,128730,16628],{"class":45},[39,128732,128733,128735,128737,128740],{"class":41,"line":413},[39,128734,71959],{"class":56},[39,128736,52491],{"class":45},[39,128738,128739],{"class":56},"purple",[39,128741,2359],{"class":45},[39,128743,128744],{"class":41,"line":419},[39,128745,2630],{"class":45},[39,128747,128748,128750,128752],{"class":41,"line":425},[39,128749,46],{"class":52354},[39,128751,61994],{"class":3021},[39,128753,16628],{"class":45},[39,128755,128756,128758,128760,128762],{"class":41,"line":443},[39,128757,71959],{"class":56},[39,128759,52491],{"class":45},[39,128761,55943],{"class":56},[39,128763,2359],{"class":45},[39,128765,128766,128768,128770,128772],{"class":41,"line":449},[39,128767,71556],{"class":56},[39,128769,52491],{"class":45},[39,128771,128111],{"class":56},[39,128773,2359],{"class":45},[39,128775,128776],{"class":41,"line":455},[39,128777,2630],{"class":45},[39,128779,128780,128782,128785],{"class":41,"line":461},[39,128781,46],{"class":52354},[39,128783,128784],{"class":3021},":active",[39,128786,16628],{"class":45},[39,128788,128789,128791,128793,128796],{"class":41,"line":475},[39,128790,71959],{"class":56},[39,128792,52491],{"class":45},[39,128794,128795],{"class":56},"green",[39,128797,2359],{"class":45},[39,128799,128800],{"class":41,"line":665},[39,128801,2630],{"class":45},[1188,128803,128805,128806,128809],{"id":128804},"_735-伪类选择器","7.3.5 ",[128807,128808],"focus",{},"伪类选择器",[19,128811,128812,128814,128815,128817],{},[128807,128813],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[36,128816,127558],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[29,128819,128821],{"className":127497,"code":128820,"language":127499,"meta":34,"style":34},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[36,128822,128823,128831,128842,128852],{"__ignoreMap":34},[39,128824,128825,128827,128829],{"class":41,"line":42},[39,128826,54875],{"class":52354},[39,128828,62954],{"class":3021},[39,128830,16628],{"class":45},[39,128832,128833,128836,128838,128840],{"class":41,"line":74},[39,128834,128835],{"class":56},"  border-color",[39,128837,52491],{"class":45},[39,128839,55943],{"class":56},[39,128841,2359],{"class":45},[39,128843,128844,128846,128848,128850],{"class":41,"line":99},[39,128845,71852],{"class":56},[39,128847,52491],{"class":45},[39,128849,55791],{"class":56},[39,128851,2359],{"class":45},[39,128853,128854],{"class":41,"line":106},[39,128855,2630],{"class":45},[1133,128857,128858],{},"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":34,"searchDepth":74,"depth":74,"links":128860},[128861,128866,128870],{"id":128236,"depth":74,"text":128237,"children":128862},[128863,128864,128865],{"id":128240,"depth":99,"text":128241},{"id":128324,"depth":99,"text":128325},{"id":128372,"depth":99,"text":128373},{"id":128462,"depth":74,"text":128463,"children":128867},[128868,128869],{"id":128466,"depth":99,"text":128467},{"id":128539,"depth":99,"text":128540},{"id":128549,"depth":74,"text":128550,"children":128871},[128872,128873,128874,128875,128876],{"id":128553,"depth":99,"text":128554},{"id":128606,"depth":99,"text":128607},{"id":128622,"depth":99,"text":128623},{"id":128642,"depth":99,"text":128643},{"id":128804,"depth":99,"text":128877},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128228,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128884,"title":128885,"body":128886,"description":1142,"extension":1143,"meta":130809,"navigation":1145,"path":130810,"seo":130811,"stem":130812,"__hash__":130813},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128887,"toc":130783},[128888,128891,128895,128904,128908,128934,128939,128942,128945,128948,128951,128955,128958,128968,128976,128980,129015,129020,129023,129026,129029,129032,129036,129039,129048,129052,129065,129070,129073,129076,129079,129083,129086,129090,129093,129148,129151,129182,129185,129239,129243,129246,129412,129535,129538,129541,129544,129547,129551,129554,129558,129561,129564,129568,129571,129602,129629,129657,129660,129664,129690,129733,129737,129831,129834,129861,129864,129867,129870,129873,129876,129879,129882,129885,129888,129892,129949,129976,129980,130028,130032,130073,130075,130078,130081,130084,130087,130091,130183,130186,130189,130192,130196,130319,130520,130524,130528,130531,130534,130537,130541,130544,130547,130572,130575,130578,130581,130584,130587,130591,130599,130661,130664,130722,130725,130728,130731,130734,130737,130740,130743,130780],[10,128889,128885],{"id":128890},"_8-css显示模式与背景特性",[14,128892,128894],{"id":128893},"_81-css元素显示模式","8.1 css元素显示模式",[19,128896,128897,128898,128900,128901,128903],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[36,128899,127108],{},"自己占一行，比如一行可以放多个",[36,128902,127111],{},"，HTML 元素一般分为块元素和行内元素两种类型",[1188,128905,128907],{"id":128906},"_811-块元素","8.1.1 块元素",[19,128909,128910,128911,128913,128914,1425,128917,1425,128919,1425,128921,1425,128924,1425,128927,128930,128931,128933],{},"常见的块元素有",[36,128912,127012],{},"~",[36,128915,128916],{},"\u003Ch6>",[36,128918,127038],{},[36,128920,127108],{},[36,128922,128923],{},"\u003Cul>",[36,128925,128926],{},"\u003Col>",[36,128928,128929],{},"\u003Cli>","等，其中 ",[36,128932,127108],{}," 标签是最典型的块元素",[19,128935,128936],{},[304,128937,128938],{},"块级元素的特点：",[19,128940,128941],{},"① 比较霸道，自己独占一行。",[19,128943,128944],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128946,128947],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128949,128950],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128952,128953],{},[304,128954,1249],{},[19,128956,128957],{},"①文字类的元素内不能使用块级元素",[19,128959,78303,128960,128962,128963,128965,128966],{},[36,128961,127038],{}," 标签主要用于存放文字，因此 ",[36,128964,127038],{}," 里面不能放块级元素，特别是不能放",[36,128967,127108],{},[19,128969,128970,128971,128913,128973,128975],{},"⑥同理， ",[36,128972,127012],{},[36,128974,128916],{},"等都是文字类块级标签，里面也不能放其他块级元素",[1188,128977,128979],{"id":128978},"_812-行内元素","8.1.2 行内元素",[19,128981,128982,128983,1425,128985,1425,128988,1425,128991,1425,128994,1425,128997,1425,129000,1425,129003,1425,129006,1425,129009,129011,129012,129014],{},"常见的行内元素有 ",[36,128984,127270],{},[36,128986,128987],{},"\u003Cstrong>",[36,128989,128990],{},"\u003Cb>",[36,128992,128993],{},"\u003Cem>",[36,128995,128996],{},"\u003Ci>",[36,128998,128999],{},"\u003Cdel>",[36,129001,129002],{},"\u003Cs>",[36,129004,129005],{},"\u003Cins>",[36,129007,129008],{},"\u003Cu>",[36,129010,127111],{}," 等，其中 ",[36,129013,127111],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129016,129017],{},[304,129018,129019],{},"特点：",[19,129021,129022],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129024,129025],{},"② 高、宽直接设置是无效的。",[19,129027,129028],{},"③ 默认宽度就是它本身内容的宽度。",[19,129030,129031],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129033,129034],{},[304,129035,1249],{},[19,129037,129038],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129040,129041,129042,129044,129045,129047],{},"②特殊情况链接 ",[36,129043,127270],{}," 里面可以放块级元素，但是给 ",[36,129046,127270],{}," 转换一下块级模式最安全",[1188,129049,129051],{"id":129050},"_813-行内块元素","8.1.3 行内块元素",[19,129053,129054,129055,1425,129058,1425,129061,129064],{},"在行内元素中有几个特殊的标签 —— ",[36,129056,129057],{},"\u003Cimg \u002F>",[36,129059,129060],{},"\u003Cinput \u002F>",[36,129062,129063],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129066,129067],{},[304,129068,129069],{},"行内块元素的特点：",[19,129071,129072],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129074,129075],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129077,129078],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[1188,129080,129082],{"id":129081},"_814-总结","8.1.4 总结",[269,129084],{"style":127353,"src":129085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[1188,129087,129089],{"id":129088},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129091,129092],{},"①转换为块元素：display:block;",[29,129094,129096],{"className":127497,"code":129095,"language":127499,"meta":34,"style":34},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[36,129097,129098,129103,129109,129120,129132,129144],{"__ignoreMap":34},[39,129099,129100],{"class":41,"line":42},[39,129101,129102],{"class":102},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[39,129104,129105,129107],{"class":41,"line":74},[39,129106,46],{"class":52354},[39,129108,16628],{"class":45},[39,129110,129111,129114,129116,129118],{"class":41,"line":99},[39,129112,129113],{"class":56},"  display",[39,129115,52491],{"class":45},[39,129117,61923],{"class":56},[39,129119,2359],{"class":45},[39,129121,129122,129124,129126,129128,129130],{"class":41,"line":106},[39,129123,71622],{"class":56},[39,129125,52491],{"class":45},[39,129127,1519],{"class":56},[39,129129,52546],{"class":49},[39,129131,2359],{"class":45},[39,129133,129134,129136,129138,129140,129142],{"class":41,"line":112},[39,129135,71842],{"class":56},[39,129137,52491],{"class":45},[39,129139,1604],{"class":56},[39,129141,52546],{"class":49},[39,129143,2359],{"class":45},[39,129145,129146],{"class":41,"line":118},[39,129147,2630],{"class":45},[19,129149,129150],{},"②转换为行内元素：display:inline;",[29,129152,129154],{"className":127497,"code":129153,"language":127499,"meta":34,"style":34},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[36,129155,129156,129161,129167,129178],{"__ignoreMap":34},[39,129157,129158],{"class":41,"line":42},[39,129159,129160],{"class":102},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[39,129162,129163,129165],{"class":41,"line":74},[39,129164,52665],{"class":52354},[39,129166,16628],{"class":45},[39,129168,129169,129171,129173,129176],{"class":41,"line":99},[39,129170,129113],{"class":56},[39,129172,52491],{"class":45},[39,129174,129175],{"class":56},"inline",[39,129177,2359],{"class":45},[39,129179,129180],{"class":41,"line":106},[39,129181,2630],{"class":45},[19,129183,129184],{},"③转换为行内块：display:inline-block;",[29,129186,129188],{"className":127497,"code":129187,"language":127499,"meta":34,"style":34},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[36,129189,129190,129195,129201,129211,129223,129235],{"__ignoreMap":34},[39,129191,129192],{"class":41,"line":42},[39,129193,129194],{"class":102},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[39,129196,129197,129199],{"class":41,"line":74},[39,129198,39],{"class":52354},[39,129200,16628],{"class":45},[39,129202,129203,129205,129207,129209],{"class":41,"line":99},[39,129204,129113],{"class":56},[39,129206,52491],{"class":45},[39,129208,73437],{"class":56},[39,129210,2359],{"class":45},[39,129212,129213,129215,129217,129219,129221],{"class":41,"line":106},[39,129214,71622],{"class":56},[39,129216,52491],{"class":45},[39,129218,1812],{"class":56},[39,129220,52546],{"class":49},[39,129222,2359],{"class":45},[39,129224,129225,129227,129229,129231,129233],{"class":41,"line":112},[39,129226,71842],{"class":56},[39,129228,52491],{"class":45},[39,129230,2149],{"class":56},[39,129232,52546],{"class":49},[39,129234,2359],{"class":45},[39,129236,129237],{"class":41,"line":118},[39,129238,2630],{"class":45},[1188,129240,129242],{"id":129241},"_816-小米侧边栏","8.1.6 小米侧边栏",[269,129244],{"style":127353,"src":129245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[29,129247,129249],{"className":128244,"code":129248,"language":128246,"meta":34,"style":34},"\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",[36,129250,129251,129256,129271,129290,129309,129328,129347,129366,129385,129404],{"__ignoreMap":34},[39,129252,129253],{"class":41,"line":42},[39,129254,129255],{"class":102},"\u003C!-- 小米侧边栏案例 -->\n",[39,129257,129258,129260,129262,129264,129266,129269],{"class":41,"line":74},[39,129259,2108],{"class":45},[39,129261,52665],{"class":52354},[39,129263,54540],{"class":3021},[39,129265,50],{"class":45},[39,129267,129268],{"class":1319},"\"sidebar\"",[39,129270,52361],{"class":45},[39,129272,129273,129275,129277,129279,129281,129283,129286,129288],{"class":41,"line":99},[39,129274,53198],{"class":45},[39,129276,46],{"class":52354},[39,129278,62111],{"class":3021},[39,129280,50],{"class":45},[39,129282,62116],{"class":1319},[39,129284,129285],{"class":45},">手机 电话卡\u003C\u002F",[39,129287,46],{"class":52354},[39,129289,52361],{"class":45},[39,129291,129292,129294,129296,129298,129300,129302,129305,129307],{"class":41,"line":106},[39,129293,53198],{"class":45},[39,129295,46],{"class":52354},[39,129297,62111],{"class":3021},[39,129299,50],{"class":45},[39,129301,62116],{"class":1319},[39,129303,129304],{"class":45},">电视 盒子\u003C\u002F",[39,129306,46],{"class":52354},[39,129308,52361],{"class":45},[39,129310,129311,129313,129315,129317,129319,129321,129324,129326],{"class":41,"line":112},[39,129312,53198],{"class":45},[39,129314,46],{"class":52354},[39,129316,62111],{"class":3021},[39,129318,50],{"class":45},[39,129320,62116],{"class":1319},[39,129322,129323],{"class":45},">笔记本 平板\u003C\u002F",[39,129325,46],{"class":52354},[39,129327,52361],{"class":45},[39,129329,129330,129332,129334,129336,129338,129340,129343,129345],{"class":41,"line":118},[39,129331,53198],{"class":45},[39,129333,46],{"class":52354},[39,129335,62111],{"class":3021},[39,129337,50],{"class":45},[39,129339,62116],{"class":1319},[39,129341,129342],{"class":45},">出行 穿戴\u003C\u002F",[39,129344,46],{"class":52354},[39,129346,52361],{"class":45},[39,129348,129349,129351,129353,129355,129357,129359,129362,129364],{"class":41,"line":413},[39,129350,53198],{"class":45},[39,129352,46],{"class":52354},[39,129354,62111],{"class":3021},[39,129356,50],{"class":45},[39,129358,62116],{"class":1319},[39,129360,129361],{"class":45},">智能 路由器\u003C\u002F",[39,129363,46],{"class":52354},[39,129365,52361],{"class":45},[39,129367,129368,129370,129372,129374,129376,129378,129381,129383],{"class":41,"line":419},[39,129369,53198],{"class":45},[39,129371,46],{"class":52354},[39,129373,62111],{"class":3021},[39,129375,50],{"class":45},[39,129377,62116],{"class":1319},[39,129379,129380],{"class":45},">健康 儿童\u003C\u002F",[39,129382,46],{"class":52354},[39,129384,52361],{"class":45},[39,129386,129387,129389,129391,129393,129395,129397,129400,129402],{"class":41,"line":425},[39,129388,53198],{"class":45},[39,129390,46],{"class":52354},[39,129392,62111],{"class":3021},[39,129394,50],{"class":45},[39,129396,62116],{"class":1319},[39,129398,129399],{"class":45},">耳机 音响\u003C\u002F",[39,129401,46],{"class":52354},[39,129403,52361],{"class":45},[39,129405,129406,129408,129410],{"class":41,"line":443},[39,129407,52839],{"class":45},[39,129409,52665],{"class":52354},[39,129411,52361],{"class":45},[29,129413,129415],{"className":127497,"code":129414,"language":127499,"meta":34,"style":34},".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",[36,129416,129417,129426,129436,129449,129461,129473,129485,129495,129506,129510,129520,129531],{"__ignoreMap":34},[39,129418,129419,129422,129424],{"class":41,"line":42},[39,129420,129421],{"class":3021},".sidebar",[39,129423,2464],{"class":52354},[39,129425,16628],{"class":45},[39,129427,129428,129430,129432,129434],{"class":41,"line":74},[39,129429,129113],{"class":56},[39,129431,52491],{"class":45},[39,129433,61923],{"class":56},[39,129435,2359],{"class":45},[39,129437,129438,129440,129442,129445,129447],{"class":41,"line":99},[39,129439,71622],{"class":56},[39,129441,52491],{"class":45},[39,129443,129444],{"class":56},"234",[39,129446,52546],{"class":49},[39,129448,2359],{"class":45},[39,129450,129451,129453,129455,129457,129459],{"class":41,"line":106},[39,129452,71842],{"class":56},[39,129454,52491],{"class":45},[39,129456,1654],{"class":56},[39,129458,52546],{"class":49},[39,129460,2359],{"class":45},[39,129462,129463,129465,129467,129469,129471],{"class":41,"line":112},[39,129464,128181],{"class":56},[39,129466,52491],{"class":45},[39,129468,1654],{"class":56},[39,129470,52546],{"class":49},[39,129472,2359],{"class":45},[39,129474,129475,129477,129479,129481,129483],{"class":41,"line":118},[39,129476,71877],{"class":56},[39,129478,52491],{"class":45},[39,129480,2149],{"class":56},[39,129482,52546],{"class":49},[39,129484,2359],{"class":45},[39,129486,129487,129489,129491,129493],{"class":41,"line":413},[39,129488,71959],{"class":56},[39,129490,52491],{"class":45},[39,129492,61896],{"class":56},[39,129494,2359],{"class":45},[39,129496,129497,129499,129501,129504],{"class":41,"line":419},[39,129498,71932],{"class":56},[39,129500,52491],{"class":45},[39,129502,129503],{"class":56},"#55585a",[39,129505,2359],{"class":45},[39,129507,129508],{"class":41,"line":425},[39,129509,2630],{"class":45},[39,129511,129512,129514,129516,129518],{"class":41,"line":443},[39,129513,129421],{"class":3021},[39,129515,2464],{"class":52354},[39,129517,61994],{"class":3021},[39,129519,16628],{"class":45},[39,129521,129522,129524,129526,129529],{"class":41,"line":449},[39,129523,71932],{"class":56},[39,129525,52491],{"class":45},[39,129527,129528],{"class":56},"#ff6700",[39,129530,2359],{"class":45},[39,129532,129533],{"class":41,"line":455},[39,129534,2630],{"class":45},[269,129536],{"style":127353,"src":129537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,129539,129540],{},"行高=盒子高度：实现文字的垂直居中",[19,129542,129543],{},"原理讲解：",[269,129545],{"style":127353,"src":129546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129548,129550],{"id":129549},"_82-css背景","8.2 css背景",[19,129552,129553],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[1188,129555,129557],{"id":129556},"_821-背景颜色","8.2.1 背景颜色",[19,129559,129560],{},"background-color:颜色值;",[19,129562,129563],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[1188,129565,129567],{"id":129566},"_822-背景图片","8.2.2 背景图片",[19,129569,129570],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[29,129572,129574],{"className":127497,"code":129573,"language":127499,"meta":34,"style":34},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[36,129575,129576,129582,129598],{"__ignoreMap":34},[39,129577,129578,129580],{"class":41,"line":42},[39,129579,52665],{"class":52354},[39,129581,16628],{"class":45},[39,129583,129584,129587,129589,129591,129593,129596],{"class":41,"line":74},[39,129585,129586],{"class":56},"  background-image",[39,129588,52491],{"class":45},[39,129590,62780],{"class":56},[39,129592,1221],{"class":45},[39,129594,129595],{"class":254},"images\u002Fbg.png",[39,129597,3777],{"class":45},[39,129599,129600],{"class":41,"line":99},[39,129601,2630],{"class":45},[1352,129603,129604,129613],{},[1355,129605,129606],{},[1358,129607,129608,129611],{},[1361,129609,129610],{"align":24792},"参数值",[1361,129612,103641],{"align":24792},[1398,129614,129615,129622],{},[1358,129616,129617,129619],{},[1403,129618,55791],{"align":24792},[1403,129620,129621],{"align":24792},"无背景图（默认的）",[1358,129623,129624,129626],{},[1403,129625,62780],{"align":24792},[1403,129627,129628],{"align":24792},"使用绝对或相对地址指定背景图像",[29,129630,129631],{"className":127497,"code":129573,"language":127499,"meta":34,"style":34},[36,129632,129633,129639,129653],{"__ignoreMap":34},[39,129634,129635,129637],{"class":41,"line":42},[39,129636,52665],{"class":52354},[39,129638,16628],{"class":45},[39,129640,129641,129643,129645,129647,129649,129651],{"class":41,"line":74},[39,129642,129586],{"class":56},[39,129644,52491],{"class":45},[39,129646,62780],{"class":56},[39,129648,1221],{"class":45},[39,129650,129595],{"class":254},[39,129652,3777],{"class":45},[39,129654,129655],{"class":41,"line":99},[39,129656,2630],{"class":45},[19,129658,129659],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[1188,129661,129663],{"id":129662},"_823-背景平铺","8.2.3 背景平铺",[29,129665,129667],{"className":127497,"code":129666,"language":127499,"meta":34,"style":34},"div {\n  background-repeat: no-repeat;\n}\n",[36,129668,129669,129675,129686],{"__ignoreMap":34},[39,129670,129671,129673],{"class":41,"line":42},[39,129672,52665],{"class":52354},[39,129674,16628],{"class":45},[39,129676,129677,129680,129682,129684],{"class":41,"line":74},[39,129678,129679],{"class":56},"  background-repeat",[39,129681,52491],{"class":45},[39,129683,62790],{"class":56},[39,129685,2359],{"class":45},[39,129687,129688],{"class":41,"line":99},[39,129689,2630],{"class":45},[1352,129691,129692,129700],{},[1355,129693,129694],{},[1358,129695,129696,129698],{},[1361,129697,129610],{"align":24792},[1361,129699,103641],{"align":24792},[1398,129701,129702,129710,129717,129725],{},[1358,129703,129704,129707],{},[1403,129705,129706],{"align":24792},"repeat",[1403,129708,129709],{"align":24792},"背景图像在纵向和横向上平铺（默认的）",[1358,129711,129712,129714],{},[1403,129713,62790],{"align":24792},[1403,129715,129716],{"align":24792},"背景图像不平铺",[1358,129718,129719,129722],{},[1403,129720,129721],{"align":24792},"repeat-x",[1403,129723,129724],{"align":24792},"背景图像在横向上平铺",[1358,129726,129727,129730],{},[1403,129728,129729],{"align":24792},"repeat-y",[1403,129731,129732],{"align":24792},"背景图像在纵向平铺",[1188,129734,129736],{"id":129735},"_824-背景图片位置","8.2.4 背景图片位置",[29,129738,129740],{"className":127497,"code":129739,"language":127499,"meta":34,"style":34},"\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",[36,129741,129742,129747,129753,129767,129771,129776,129782,129798,129802,129807,129813,129827],{"__ignoreMap":34},[39,129743,129744],{"class":41,"line":42},[39,129745,129746],{"class":102},"\u002F* 方位名词 *\u002F\n",[39,129748,129749,129751],{"class":41,"line":74},[39,129750,52665],{"class":52354},[39,129752,16628],{"class":45},[39,129754,129755,129758,129760,129762,129765],{"class":41,"line":99},[39,129756,129757],{"class":56},"  background-position",[39,129759,52491],{"class":45},[39,129761,52646],{"class":56},[39,129763,129764],{"class":56}," top",[39,129766,2359],{"class":45},[39,129768,129769],{"class":41,"line":106},[39,129770,2630],{"class":45},[39,129772,129773],{"class":41,"line":112},[39,129774,129775],{"class":102},"\u002F* 精确单位 *\u002F\n",[39,129777,129778,129780],{"class":41,"line":118},[39,129779,52665],{"class":52354},[39,129781,16628],{"class":45},[39,129783,129784,129786,129788,129790,129792,129794,129796],{"class":41,"line":413},[39,129785,129757],{"class":56},[39,129787,52491],{"class":45},[39,129789,1898],{"class":56},[39,129791,52546],{"class":49},[39,129793,58558],{"class":56},[39,129795,52546],{"class":49},[39,129797,2359],{"class":45},[39,129799,129800],{"class":41,"line":419},[39,129801,2630],{"class":45},[39,129803,129804],{"class":41,"line":425},[39,129805,129806],{"class":102},"\u002F* 混合单位 *\u002F\n",[39,129808,129809,129811],{"class":41,"line":443},[39,129810,52665],{"class":52354},[39,129812,16628],{"class":45},[39,129814,129815,129817,129819,129821,129823,129825],{"class":41,"line":449},[39,129816,129757],{"class":56},[39,129818,52491],{"class":45},[39,129820,1898],{"class":56},[39,129822,52546],{"class":49},[39,129824,18200],{"class":56},[39,129826,2359],{"class":45},[39,129828,129829],{"class":41,"line":455},[39,129830,2630],{"class":45},[19,129832,129833],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[1352,129835,129836,129844],{},[1355,129837,129838],{},[1358,129839,129840,129842],{},[1361,129841,129610],{"align":24792},[1361,129843,26926],{"align":24792},[1398,129845,129846,129853],{},[1358,129847,129848,129850],{},[1403,129849,53022],{"align":24792},[1403,129851,129852],{"align":24792},"百分数|由浮点数和单位标识符组成的长度值",[1358,129854,129855,129858],{},[1403,129856,129857],{"align":24792},"position",[1403,129859,129860],{"align":24792},"top|center|bottom|left|center|right 方位名词",[19,129862,129863],{},"其他说明：",[19,129865,129866],{},"①参数是方位名词",[19,129868,129869],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129871,129872],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129874,129875],{},"②参数是精确单位",[19,129877,129878],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129880,129881],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129883,129884],{},"③参数是混合单位",[19,129886,129887],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[1188,129889,129891],{"id":129890},"_825-背景图片固定","8.2.5 背景图片固定",[29,129893,129895],{"className":127497,"code":129894,"language":127499,"meta":34,"style":34},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[36,129896,129897,129902,129908,129920,129924,129929,129935,129945],{"__ignoreMap":34},[39,129898,129899],{"class":41,"line":42},[39,129900,129901],{"class":102},"\u002F* 背景滚动（默认） *\u002F\n",[39,129903,129904,129906],{"class":41,"line":74},[39,129905,52665],{"class":52354},[39,129907,16628],{"class":45},[39,129909,129910,129913,129915,129918],{"class":41,"line":99},[39,129911,129912],{"class":56},"  background-attachment",[39,129914,52491],{"class":45},[39,129916,129917],{"class":56},"scroll",[39,129919,2359],{"class":45},[39,129921,129922],{"class":41,"line":106},[39,129923,2630],{"class":45},[39,129925,129926],{"class":41,"line":112},[39,129927,129928],{"class":102},"\u002F* 背景固定 *\u002F\n",[39,129930,129931,129933],{"class":41,"line":118},[39,129932,52665],{"class":52354},[39,129934,16628],{"class":45},[39,129936,129937,129939,129941,129943],{"class":41,"line":413},[39,129938,129912],{"class":56},[39,129940,52491],{"class":45},[39,129942,87287],{"class":56},[39,129944,2359],{"class":45},[39,129946,129947],{"class":41,"line":419},[39,129948,2630],{"class":45},[1352,129950,129951,129960],{},[1355,129952,129953],{},[1358,129954,129955,129958],{},[1361,129956,129957],{"align":24792},"参数",[1361,129959,103641],{"align":24792},[1398,129961,129962,129969],{},[1358,129963,129964,129966],{},[1403,129965,129917],{"align":24792},[1403,129967,129968],{"align":24792},"背景图像是随对象内容滚动",[1358,129970,129971,129973],{},[1403,129972,87287],{"align":24792},[1403,129974,129975],{"align":24792},"背景图像固定",[1188,129977,129979],{"id":129978},"_826-背景样式合写","8.2.6 背景样式合写",[29,129981,129983],{"className":127497,"code":129982,"language":127499,"meta":34,"style":34},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[36,129984,129985,129990,129996,130024],{"__ignoreMap":34},[39,129986,129987],{"class":41,"line":42},[39,129988,129989],{"class":102},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[39,129991,129992,129994],{"class":41,"line":74},[39,129993,52665],{"class":52354},[39,129995,16628],{"class":45},[39,129997,129998,130000,130002,130004,130007,130009,130011,130013,130015,130018,130020,130022],{"class":41,"line":99},[39,129999,71665],{"class":56},[39,130001,52491],{"class":45},[39,130003,61896],{"class":56},[39,130005,130006],{"class":56}," url",[39,130008,1221],{"class":45},[39,130010,129595],{"class":254},[39,130012,14770],{"class":45},[39,130014,62790],{"class":56},[39,130016,130017],{"class":56}," fixed",[39,130019,18200],{"class":56},[39,130021,129764],{"class":56},[39,130023,2359],{"class":45},[39,130025,130026],{"class":41,"line":106},[39,130027,2630],{"class":45},[1188,130029,130031],{"id":130030},"_827-背景色半透明","8.2.7 背景色半透明",[29,130033,130035],{"className":127497,"code":130034,"language":127499,"meta":34,"style":34},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[36,130036,130037,130043,130069],{"__ignoreMap":34},[39,130038,130039,130041],{"class":41,"line":42},[39,130040,52665],{"class":52354},[39,130042,16628],{"class":45},[39,130044,130045,130047,130049,130051,130053,130055,130057,130059,130061,130063,130065,130067],{"class":41,"line":74},[39,130046,71665],{"class":56},[39,130048,52491],{"class":45},[39,130050,56164],{"class":56},[39,130052,1221],{"class":45},[39,130054,260],{"class":56},[39,130056,13491],{"class":45},[39,130058,260],{"class":56},[39,130060,13491],{"class":45},[39,130062,260],{"class":56},[39,130064,13491],{"class":45},[39,130066,101466],{"class":56},[39,130068,3777],{"class":45},[39,130070,130071],{"class":41,"line":99},[39,130072,2630],{"class":45},[19,130074,100341],{},[19,130076,130077],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130079,130080],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130082,130083],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130085,130086],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[1188,130088,130090],{"id":130089},"_828-总结","8.2.8 总结",[1352,130092,130093,130104],{},[1355,130094,130095],{},[1358,130096,130097,130100,130102],{},[1361,130098,130099],{"align":24792},"属性",[1361,130101,103641],{"align":24792},[1361,130103,1366],{"align":24792},[1398,130105,130106,130117,130128,130139,130150,130161,130172],{},[1358,130107,130108,130111,130114],{},[1403,130109,130110],{"align":24792},"background-color",[1403,130112,130113],{"align":24792},"背景颜色",[1403,130115,130116],{"align":24792},"预定义的颜色值\u002F十六进制\u002FRGB代码",[1358,130118,130119,130122,130125],{},[1403,130120,130121],{"align":24792},"background-image",[1403,130123,130124],{"align":24792},"背景图片",[1403,130126,130127],{"align":24792},"url(图片路径)",[1358,130129,130130,130133,130136],{},[1403,130131,130132],{"align":24792},"background-repeat",[1403,130134,130135],{"align":24792},"是否平铺",[1403,130137,130138],{"align":24792},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[1358,130140,130141,130144,130147],{},[1403,130142,130143],{"align":24792},"background-position",[1403,130145,130146],{"align":24792},"背景位置",[1403,130148,130149],{"align":24792},"length\u002Fposition 分别是x和y坐标",[1358,130151,130152,130155,130158],{},[1403,130153,130154],{"align":24792},"background-attachment",[1403,130156,130157],{"align":24792},"背景附着",[1403,130159,130160],{"align":24792},"scroll(背景滚动) \u002Ffixed (背景固定)",[1358,130162,130163,130166,130169],{},[1403,130164,130165],{"align":24792},"背景简写",[1403,130167,130168],{"align":24792},"书写更简单",[1403,130170,130171],{"align":24792},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[1358,130173,130174,130177,130180],{},[1403,130175,130176],{"align":24792},"背景半透明",[1403,130178,130179],{"align":24792},"背景颜色半透明",[1403,130181,130182],{"align":24792},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130184,130185],{},"颜色渐变：",[269,130187],{"style":127353,"src":130188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[269,130190],{"style":127353,"src":130191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[1188,130193,130195],{"id":130194},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[29,130197,130199],{"className":128244,"code":130198,"language":128246,"meta":34,"style":34},"\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",[36,130200,130201,130216,130235,130254,130273,130292,130311],{"__ignoreMap":34},[39,130202,130203,130205,130207,130209,130211,130214],{"class":41,"line":42},[39,130204,2108],{"class":45},[39,130206,52665],{"class":52354},[39,130208,54540],{"class":3021},[39,130210,50],{"class":45},[39,130212,130213],{"class":1319},"\"nav\"",[39,130215,52361],{"class":45},[39,130217,130218,130220,130222,130224,130226,130228,130231,130233],{"class":41,"line":74},[39,130219,53198],{"class":45},[39,130221,46],{"class":52354},[39,130223,62111],{"class":3021},[39,130225,50],{"class":45},[39,130227,62116],{"class":1319},[39,130229,130230],{"class":45},">五彩导航1\u003C\u002F",[39,130232,46],{"class":52354},[39,130234,52361],{"class":45},[39,130236,130237,130239,130241,130243,130245,130247,130250,130252],{"class":41,"line":99},[39,130238,53198],{"class":45},[39,130240,46],{"class":52354},[39,130242,62111],{"class":3021},[39,130244,50],{"class":45},[39,130246,62116],{"class":1319},[39,130248,130249],{"class":45},">五彩导航2\u003C\u002F",[39,130251,46],{"class":52354},[39,130253,52361],{"class":45},[39,130255,130256,130258,130260,130262,130264,130266,130269,130271],{"class":41,"line":106},[39,130257,53198],{"class":45},[39,130259,46],{"class":52354},[39,130261,62111],{"class":3021},[39,130263,50],{"class":45},[39,130265,62116],{"class":1319},[39,130267,130268],{"class":45},">五彩导航3\u003C\u002F",[39,130270,46],{"class":52354},[39,130272,52361],{"class":45},[39,130274,130275,130277,130279,130281,130283,130285,130288,130290],{"class":41,"line":112},[39,130276,53198],{"class":45},[39,130278,46],{"class":52354},[39,130280,62111],{"class":3021},[39,130282,50],{"class":45},[39,130284,62116],{"class":1319},[39,130286,130287],{"class":45},">五彩导航4\u003C\u002F",[39,130289,46],{"class":52354},[39,130291,52361],{"class":45},[39,130293,130294,130296,130298,130300,130302,130304,130307,130309],{"class":41,"line":118},[39,130295,53198],{"class":45},[39,130297,46],{"class":52354},[39,130299,62111],{"class":3021},[39,130301,50],{"class":45},[39,130303,62116],{"class":1319},[39,130305,130306],{"class":45},">五彩导航5\u003C\u002F",[39,130308,46],{"class":52354},[39,130310,52361],{"class":45},[39,130312,130313,130315,130317],{"class":41,"line":413},[39,130314,52839],{"class":45},[39,130316,52665],{"class":52354},[39,130318,52361],{"class":45},[29,130320,130322],{"className":127497,"code":130321,"language":127499,"meta":34,"style":34},".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",[36,130323,130324,130333,130343,130355,130367,130377,130389,130399,130403,130428,130451,130474,130497],{"__ignoreMap":34},[39,130325,130326,130329,130331],{"class":41,"line":42},[39,130327,130328],{"class":3021},".nav",[39,130330,2464],{"class":52354},[39,130332,16628],{"class":45},[39,130334,130335,130337,130339,130341],{"class":41,"line":74},[39,130336,129113],{"class":56},[39,130338,52491],{"class":45},[39,130340,73437],{"class":56},[39,130342,2359],{"class":45},[39,130344,130345,130347,130349,130351,130353],{"class":41,"line":99},[39,130346,71622],{"class":56},[39,130348,52491],{"class":45},[39,130350,2015],{"class":56},[39,130352,52546],{"class":49},[39,130354,2359],{"class":45},[39,130356,130357,130359,130361,130363,130365],{"class":41,"line":106},[39,130358,71842],{"class":56},[39,130360,52491],{"class":45},[39,130362,2054],{"class":56},[39,130364,52546],{"class":49},[39,130366,2359],{"class":45},[39,130368,130369,130371,130373,130375],{"class":41,"line":112},[39,130370,71580],{"class":56},[39,130372,52491],{"class":45},[39,130374,52646],{"class":56},[39,130376,2359],{"class":45},[39,130378,130379,130381,130383,130385,130387],{"class":41,"line":118},[39,130380,128181],{"class":56},[39,130382,52491],{"class":45},[39,130384,2054],{"class":56},[39,130386,52546],{"class":49},[39,130388,2359],{"class":45},[39,130390,130391,130393,130395,130397],{"class":41,"line":413},[39,130392,71959],{"class":56},[39,130394,52491],{"class":45},[39,130396,61896],{"class":56},[39,130398,2359],{"class":45},[39,130400,130401],{"class":41,"line":419},[39,130402,2630],{"class":45},[39,130404,130405,130407,130409,130412,130414,130416,130419,130421,130423,130425],{"class":41,"line":425},[39,130406,130328],{"class":3021},[39,130408,2464],{"class":52354},[39,130410,130411],{"class":3021},":nth-child",[39,130413,1221],{"class":45},[39,130415,57],{"class":56},[39,130417,130418],{"class":45},") { ",[39,130420,130110],{"class":56},[39,130422,52491],{"class":45},[39,130424,129528],{"class":56},[39,130426,130427],{"class":45},"; }\n",[39,130429,130430,130432,130434,130436,130438,130440,130442,130444,130446,130449],{"class":41,"line":443},[39,130431,130328],{"class":3021},[39,130433,2464],{"class":52354},[39,130435,130411],{"class":3021},[39,130437,1221],{"class":45},[39,130439,63],{"class":56},[39,130441,130418],{"class":45},[39,130443,130110],{"class":56},[39,130445,52491],{"class":45},[39,130447,130448],{"class":56},"#ff0000",[39,130450,130427],{"class":45},[39,130452,130453,130455,130457,130459,130461,130463,130465,130467,130469,130472],{"class":41,"line":449},[39,130454,130328],{"class":3021},[39,130456,2464],{"class":52354},[39,130458,130411],{"class":3021},[39,130460,1221],{"class":45},[39,130462,68],{"class":56},[39,130464,130418],{"class":45},[39,130466,130110],{"class":56},[39,130468,52491],{"class":45},[39,130470,130471],{"class":56},"#00a4ff",[39,130473,130427],{"class":45},[39,130475,130476,130478,130480,130482,130484,130486,130488,130490,130492,130495],{"class":41,"line":455},[39,130477,130328],{"class":3021},[39,130479,2464],{"class":52354},[39,130481,130411],{"class":3021},[39,130483,1221],{"class":45},[39,130485,84],{"class":56},[39,130487,130418],{"class":45},[39,130489,130110],{"class":56},[39,130491,52491],{"class":45},[39,130493,130494],{"class":56},"#ff00ff",[39,130496,130427],{"class":45},[39,130498,130499,130501,130503,130505,130507,130509,130511,130513,130515,130518],{"class":41,"line":461},[39,130500,130328],{"class":3021},[39,130502,2464],{"class":52354},[39,130504,130411],{"class":3021},[39,130506,1221],{"class":45},[39,130508,89],{"class":56},[39,130510,130418],{"class":45},[39,130512,130110],{"class":56},[39,130514,52491],{"class":45},[39,130516,130517],{"class":56},"#00ff00",[39,130519,130427],{"class":45},[14,130521,130523],{"id":130522},"_83-css三大特性","8.3 css三大特性",[1188,130525,130527],{"id":130526},"_831-层叠性","8.3.1 层叠性",[19,130529,130530],{},"为了解决样式冲突问题",[19,130532,130533],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,130535,130536],{},"   ②样式不冲突，不会层叠",[1188,130538,130540],{"id":130539},"_832-继承性","8.3.2 继承性",[19,130542,130543],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,130545,130546],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[29,130548,130550],{"className":127497,"code":130549,"language":127499,"meta":34,"style":34},"p {\n  color: #333;\n}\n",[36,130551,130552,130558,130568],{"__ignoreMap":34},[39,130553,130554,130556],{"class":41,"line":42},[39,130555,19],{"class":52354},[39,130557,16628],{"class":45},[39,130559,130560,130562,130564,130566],{"class":41,"line":74},[39,130561,71959],{"class":56},[39,130563,52491],{"class":45},[39,130565,63423],{"class":56},[39,130567,2359],{"class":45},[39,130569,130570],{"class":41,"line":99},[39,130571,2630],{"class":45},[269,130573],{"style":127353,"src":130574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130576,130577],{},"解释：①行高可以跟单位也可以不跟单位",[19,130579,130580],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,130582,130583],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,130585,130586],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[1188,130588,130590],{"id":130589},"_833-优先级","8.3.3 优先级",[1171,130592,130593,130596],{},[1174,130594,130595],{},"选择器相同，则执行层叠性",[1174,130597,130598],{},"选择器不同，则根据选择器权重执行",[1352,130600,130601,130611],{},[1355,130602,130603],{},[1358,130604,130605,130608],{},[1361,130606,130607],{"align":24792},"选择器",[1361,130609,130610],{"align":24792},"选择器权重",[1398,130612,130613,130621,130629,130637,130645,130653],{},[1358,130614,130615,130618],{},[1403,130616,130617],{"align":24792},"继承 或者*",[1403,130619,130620],{"align":24792},"0，0，0，0",[1358,130622,130623,130626],{},[1403,130624,130625],{"align":24792},"标签选择器",[1403,130627,130628],{"align":24792},"0，0，0，1",[1358,130630,130631,130634],{},[1403,130632,130633],{"align":24792},"类选择器，伪类选择器",[1403,130635,130636],{"align":24792},"0，0，1，0",[1358,130638,130639,130642],{},[1403,130640,130641],{"align":24792},"ID选择器",[1403,130643,130644],{"align":24792},"0，1，0，0",[1358,130646,130647,130650],{},[1403,130648,130649],{"align":24792},"行内样式",[1403,130651,130652],{"align":24792},"1，0，0，0",[1358,130654,130655,130658],{},[1403,130656,130657],{"align":24792},"！important",[1403,130659,130660],{"align":24792},"无穷大",[19,130662,130663],{},"! important用法：",[29,130665,130667],{"className":127497,"code":130666,"language":127499,"meta":34,"style":34},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[36,130668,130669,130674,130680,130693,130697,130702,130708,130718],{"__ignoreMap":34},[39,130670,130671],{"class":41,"line":42},[39,130672,130673],{"class":102},"\u002F* !important 拥有最高优先级 *\u002F\n",[39,130675,130676,130678],{"class":41,"line":74},[39,130677,52665],{"class":52354},[39,130679,16628],{"class":45},[39,130681,130682,130684,130686,130688,130691],{"class":41,"line":99},[39,130683,71959],{"class":56},[39,130685,52491],{"class":45},[39,130687,52699],{"class":56},[39,130689,130690],{"class":49}," !important",[39,130692,2359],{"class":45},[39,130694,130695],{"class":41,"line":106},[39,130696,2630],{"class":45},[39,130698,130699],{"class":41,"line":112},[39,130700,130701],{"class":102},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[39,130703,130704,130706],{"class":41,"line":118},[39,130705,52665],{"class":52354},[39,130707,16628],{"class":45},[39,130709,130710,130712,130714,130716],{"class":41,"line":413},[39,130711,71959],{"class":56},[39,130713,52491],{"class":45},[39,130715,58475],{"class":56},[39,130717,2359],{"class":45},[39,130719,130720],{"class":41,"line":419},[39,130721,2630],{"class":45},[19,130723,130724],{},"优先级注意点：",[19,130726,130727],{},"①权重是有4组数字组成,但是不会有进位",[19,130729,130730],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,130732,130733],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,130735,130736],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,130738,130739],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,130741,130742],{},"⑥复合选择器",[1352,130744,130745,130755],{},[1355,130746,130747],{},[1358,130748,130749,130752],{},[1361,130750,130751],{"align":24792},"div ul li",[1361,130753,130754],{"align":24792},"0,0,0,3",[1398,130756,130757,130765,130773],{},[1358,130758,130759,130762],{},[1403,130760,130761],{"align":24792},".nav ul li",[1403,130763,130764],{"align":24792},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[1358,130766,130767,130770],{},[1403,130768,130769],{"align":24792},"a:hover",[1403,130771,130772],{"align":24792},"0,0,1,1",[1358,130774,130775,130778],{},[1403,130776,130777],{"align":24792},".nav a",[1403,130779,130772],{"align":24792},[1133,130781,130782],{},"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":34,"searchDepth":74,"depth":74,"links":130784},[130785,130793,130804],{"id":128893,"depth":74,"text":128894,"children":130786},[130787,130788,130789,130790,130791,130792],{"id":128906,"depth":99,"text":128907},{"id":128978,"depth":99,"text":128979},{"id":129050,"depth":99,"text":129051},{"id":129081,"depth":99,"text":129082},{"id":129088,"depth":99,"text":129089},{"id":129241,"depth":99,"text":129242},{"id":129549,"depth":74,"text":129550,"children":130794},[130795,130796,130797,130798,130799,130800,130801,130802,130803],{"id":129556,"depth":99,"text":129557},{"id":129566,"depth":99,"text":129567},{"id":129662,"depth":99,"text":129663},{"id":129735,"depth":99,"text":129736},{"id":129890,"depth":99,"text":129891},{"id":129978,"depth":99,"text":129979},{"id":130030,"depth":99,"text":130031},{"id":130089,"depth":99,"text":130090},{"id":130194,"depth":99,"text":130195},{"id":130522,"depth":74,"text":130523,"children":130805},[130806,130807,130808],{"id":130526,"depth":99,"text":130527},{"id":130539,"depth":99,"text":130540},{"id":130589,"depth":99,"text":130590},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128885,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130815,"title":130816,"body":130817,"description":1142,"extension":1143,"meta":132407,"navigation":1145,"path":132408,"seo":132409,"stem":132410,"__hash__":132411},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130818,"toc":132386},[130819,130822,130826,130829,130832,130835,130838,130841,130844,130847,130851,130859,130896,130932,130935,130949,130954,130988,130991,131084,131089,131092,131122,131125,131130,131138,131142,131149,131195,131239,131244,131247,131250,131253,131256,131259,131262,131264,131267,131271,131276,131320,131325,131328,131331,131368,131373,131376,131379,131382,131385,131417,131420,131423,131426,131458,131461,131464,131467,131471,131474,131506,131509,131513,131533,131536,131544,131547,131551,131556,131559,131591,131596,131599,131637,131641,131646,131649,131652,131683,131686,131703,131708,131760,131820,131825,131879,131917,131921,131925,131928,131932,131940,131943,131945,131956,131961,132009,132043,132046,132049,132052,132055,132099,132102,132105,132108,132111,132114,132117,132161,132164,132167,132170,132173,132176,132179,132185,132188,132232,132235,132238,132241,132244,132247,132291,132294,132296,132299,132303,132307,132345,132349,132352,132355,132359,132367,132371,132374,132377,132380,132383],[10,130820,130816],{"id":130821},"_9-css盒模型浮动与切图",[14,130823,130825],{"id":130824},"_91-盒子模型","9.1 盒子模型",[19,130827,130828],{},"利用盒子来设计网页",[19,130830,130831],{},"盒子包含：边框、外边距、内边距、实际内容",[19,130833,130834],{},"网页布局设置：",[19,130836,130837],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,130839,130840],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,130842,130843],{},"③往盒子里装内容",[269,130845],{"style":127353,"src":130846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[1188,130848,130850],{"id":130849},"_911-边框border","9.1.1 边框（border）",[1171,130852,130853,130856],{},[1174,130854,130855],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[1174,130857,130858],{},"语法",[29,130860,130862],{"className":127497,"code":130861,"language":127499,"meta":34,"style":34},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[36,130863,130864,130869,130875,130892],{"__ignoreMap":34},[39,130865,130866],{"class":41,"line":42},[39,130867,130868],{"class":102},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[39,130870,130871,130873],{"class":41,"line":74},[39,130872,52665],{"class":52354},[39,130874,16628],{"class":45},[39,130876,130877,130879,130881,130883,130885,130887,130890],{"class":41,"line":99},[39,130878,71950],{"class":56},[39,130880,52491],{"class":45},[39,130882,57],{"class":56},[39,130884,52546],{"class":49},[39,130886,52575],{"class":56},[39,130888,130889],{"class":56}," #ccc",[39,130891,2359],{"class":45},[39,130893,130894],{"class":41,"line":106},[39,130895,2630],{"class":45},[1352,130897,130898,130906],{},[1355,130899,130900],{},[1358,130901,130902,130904],{},[1361,130903,130099],{"align":24792},[1361,130905,103641],{"align":24792},[1398,130907,130908,130916,130924],{},[1358,130909,130910,130913],{},[1403,130911,130912],{"align":24792},"border-width",[1403,130914,130915],{"align":24792},"定义边框粗细，单位是px",[1358,130917,130918,130921],{},[1403,130919,130920],{"align":24792},"border-style",[1403,130922,130923],{"align":24792},"边框的样式",[1358,130925,130926,130929],{},[1403,130927,130928],{"align":24792},"border-color",[1403,130930,130931],{"align":24792},"边框的颜色",[19,130933,130934],{},"边框样式 border-style 可以设置如下值：",[2205,130936,130937,130940,130943,130946],{},[1174,130938,130939],{},"none：没有边框即忽略所有边框的宽度（默认值）",[1174,130941,130942],{},"solid：边框为单实线(最为常用的)",[1174,130944,130945],{},"dashed：边框为虚线",[1174,130947,130948],{},"dotted：边框为点线",[1171,130950,130951],{"start":99},[1174,130952,130953],{},"边框的合写分写",[29,130955,130956],{"className":127497,"code":130861,"language":127499,"meta":34,"style":34},[36,130957,130958,130962,130968,130984],{"__ignoreMap":34},[39,130959,130960],{"class":41,"line":42},[39,130961,130868],{"class":102},[39,130963,130964,130966],{"class":41,"line":74},[39,130965,52665],{"class":52354},[39,130967,16628],{"class":45},[39,130969,130970,130972,130974,130976,130978,130980,130982],{"class":41,"line":99},[39,130971,71950],{"class":56},[39,130973,52491],{"class":45},[39,130975,57],{"class":56},[39,130977,52546],{"class":49},[39,130979,52575],{"class":56},[39,130981,130889],{"class":56},[39,130983,2359],{"class":45},[39,130985,130986],{"class":41,"line":106},[39,130987,2630],{"class":45},[19,130989,130990],{},"边框分开写法：",[29,130992,130994],{"className":127497,"code":130993,"language":127499,"meta":34,"style":34},"\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",[36,130995,130996,131001,131007,131025,131043,131062,131080],{"__ignoreMap":34},[39,130997,130998],{"class":41,"line":42},[39,130999,131000],{"class":102},"\u002F* 边框分开写法 *\u002F\n",[39,131002,131003,131005],{"class":41,"line":74},[39,131004,52665],{"class":52354},[39,131006,16628],{"class":45},[39,131008,131009,131012,131014,131016,131018,131020,131023],{"class":41,"line":99},[39,131010,131011],{"class":56},"  border-top",[39,131013,52491],{"class":45},[39,131015,57],{"class":56},[39,131017,52546],{"class":49},[39,131019,52575],{"class":56},[39,131021,131022],{"class":56}," #000",[39,131024,2359],{"class":45},[39,131026,131027,131030,131032,131034,131036,131038,131041],{"class":41,"line":106},[39,131028,131029],{"class":56},"  border-right",[39,131031,52491],{"class":45},[39,131033,63],{"class":56},[39,131035,52546],{"class":49},[39,131037,63295],{"class":56},[39,131039,131040],{"class":56}," #333",[39,131042,2359],{"class":45},[39,131044,131045,131048,131050,131052,131054,131057,131060],{"class":41,"line":112},[39,131046,131047],{"class":56},"  border-bottom",[39,131049,52491],{"class":45},[39,131051,68],{"class":56},[39,131053,52546],{"class":49},[39,131055,131056],{"class":56}," dotted",[39,131058,131059],{"class":56}," #666",[39,131061,2359],{"class":45},[39,131063,131064,131067,131069,131071,131073,131075,131078],{"class":41,"line":118},[39,131065,131066],{"class":56},"  border-left",[39,131068,52491],{"class":45},[39,131070,57],{"class":56},[39,131072,52546],{"class":49},[39,131074,52575],{"class":56},[39,131076,131077],{"class":56}," #999",[39,131079,2359],{"class":45},[39,131081,131082],{"class":41,"line":413},[39,131083,2630],{"class":45},[1171,131085,131086],{"start":106},[1174,131087,131088],{},"表格的细线边框",[19,131090,131091],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[29,131093,131095],{"className":127497,"code":131094,"language":127499,"meta":34,"style":34},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[36,131096,131097,131102,131108,131118],{"__ignoreMap":34},[39,131098,131099],{"class":41,"line":42},[39,131100,131101],{"class":102},"\u002F* 表格细线边框合并 *\u002F\n",[39,131103,131104,131106],{"class":41,"line":74},[39,131105,1352],{"class":52354},[39,131107,16628],{"class":45},[39,131109,131110,131112,131114,131116],{"class":41,"line":99},[39,131111,71632],{"class":56},[39,131113,52491],{"class":45},[39,131115,66089],{"class":56},[39,131117,2359],{"class":45},[39,131119,131120],{"class":41,"line":106},[39,131121,2630],{"class":45},[19,131123,131124],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[1171,131126,131127],{"start":112},[1174,131128,131129],{},"解决边框额外增加盒子的实际大小的方法：",[2205,131131,131132,131135],{},[1174,131133,131134],{},"测量盒子大小的时候,不量边框",[1174,131136,131137],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[1188,131139,131141],{"id":131140},"_912-内边距","9.1.2 内边距",[1171,131143,131144,131147],{},[1174,131145,131146],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[1174,131148,130858],{},[1352,131150,131151,131161],{},[1355,131152,131153],{},[1358,131154,131155,131158],{},[1361,131156,131157],{"align":24792},"值的个数",[1361,131159,131160],{"align":24792},"表达意思",[1398,131162,131163,131171,131179,131187],{},[1358,131164,131165,131168],{},[1403,131166,131167],{"align":24792},"padding: 5px;",[1403,131169,131170],{"align":24792},"1个值，代表上下左右都有5个元素",[1358,131172,131173,131176],{},[1403,131174,131175],{"align":24792},"padding: 5px 10px;",[1403,131177,131178],{"align":24792},"2个值，代表上下内边距为5像素，左右内边距为10像素",[1358,131180,131181,131184],{},[1403,131182,131183],{"align":24792},"padding: 5px 10px 20px;",[1403,131185,131186],{"align":24792},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[1358,131188,131189,131192],{},[1403,131190,131191],{"align":24792},"padding: 5px 10px 20px 30px;",[1403,131193,131194],{"align":24792},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[1352,131196,131197,131205],{},[1355,131198,131199],{},[1358,131200,131201,131203],{},[1361,131202,130099],{"align":24792},[1361,131204,103641],{"align":24792},[1398,131206,131207,131215,131223,131231],{},[1358,131208,131209,131212],{},[1403,131210,131211],{"align":24792},"padding-left",[1403,131213,131214],{"align":24792},"左内边距",[1358,131216,131217,131220],{},[1403,131218,131219],{"align":24792},"padding-right",[1403,131221,131222],{"align":24792},"右内边距",[1358,131224,131225,131228],{},[1403,131226,131227],{"align":24792},"padding-top",[1403,131229,131230],{"align":24792},"上内边距",[1358,131232,131233,131236],{},[1403,131234,131235],{"align":24792},"padding-bottom",[1403,131237,131238],{"align":24792},"下内边距",[1171,131240,131241],{"start":99},[1174,131242,131243],{},"内边距会影响盒子的实际大小",[19,131245,131246],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131248,131249],{},"①内容和边框有了距离，添加了内边距",[19,131251,131252],{},"②padding影响了盒子实际大小",[19,131254,131255],{},"内边距对盒子大小的影响：",[19,131257,131258],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131260,131261],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131263,96270],{},[19,131265,131266],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[1188,131268,131270],{"id":131269},"_913-外边距","9.1.3 外边距",[1171,131272,131273],{},[1174,131274,131275],{},"控制盒子与盒子之间的距离",[1352,131277,131278,131286],{},[1355,131279,131280],{},[1358,131281,131282,131284],{},[1361,131283,130099],{"align":24792},[1361,131285,103641],{"align":24792},[1398,131287,131288,131296,131304,131312],{},[1358,131289,131290,131293],{},[1403,131291,131292],{"align":24792},"margin-left",[1403,131294,131295],{"align":24792},"左外边距",[1358,131297,131298,131301],{},[1403,131299,131300],{"align":24792},"margin-right",[1403,131302,131303],{"align":24792},"右外边距",[1358,131305,131306,131309],{},[1403,131307,131308],{"align":24792},"margin-top",[1403,131310,131311],{"align":24792},"上外边距",[1358,131313,131314,131317],{},[1403,131315,131316],{"align":24792},"margin-bottom",[1403,131318,131319],{"align":24792},"下外边距",[1171,131321,131322],{"start":74},[1174,131323,131324],{},"外边距可以让块级盒子水平居中的两个条件：",[19,131326,131327],{},"①盒子必须指定了宽度（width）",[19,131329,131330],{},"②盒子左右的外边距都设置为 auto",[29,131332,131334],{"className":127497,"code":131333,"language":127499,"meta":34,"style":34},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[36,131335,131336,131341,131348,131364],{"__ignoreMap":34},[39,131337,131338],{"class":41,"line":42},[39,131339,131340],{"class":102},"\u002F* margin 复合写法（同上） *\u002F\n",[39,131342,131343,131346],{"class":41,"line":74},[39,131344,131345],{"class":3021},".box",[39,131347,16628],{"class":45},[39,131349,131350,131352,131354,131356,131358,131361],{"class":41,"line":99},[39,131351,71524],{"class":56},[39,131353,52491],{"class":45},[39,131355,260],{"class":56},[39,131357,52610],{"class":56},[39,131359,131360],{"class":45},";  ",[39,131362,131363],{"class":102},"\u002F* 块级盒子水平居中 *\u002F\n",[39,131365,131366],{"class":41,"line":106},[39,131367,2630],{"class":45},[1171,131369,131370],{"start":99},[1174,131371,131372],{},"外边距塌陷问题",[19,131374,131375],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[269,131377],{"style":127353,"src":131378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,131380,131381],{},"解决方案：",[19,131383,131384],{},"①可以为父亲元素定义上边距",[29,131386,131387],{"className":127497,"code":131333,"language":127499,"meta":34,"style":34},[36,131388,131389,131393,131399,131413],{"__ignoreMap":34},[39,131390,131391],{"class":41,"line":42},[39,131392,131340],{"class":102},[39,131394,131395,131397],{"class":41,"line":74},[39,131396,131345],{"class":3021},[39,131398,16628],{"class":45},[39,131400,131401,131403,131405,131407,131409,131411],{"class":41,"line":99},[39,131402,71524],{"class":56},[39,131404,52491],{"class":45},[39,131406,260],{"class":56},[39,131408,52610],{"class":56},[39,131410,131360],{"class":45},[39,131412,131363],{"class":102},[39,131414,131415],{"class":41,"line":106},[39,131416,2630],{"class":45},[19,131418,131419],{},"②可以为父亲元素定义上内边距",[19,131421,131422],{},"③可以为父亲元素添加overflow:hidden",[269,131424],{"style":127353,"src":131425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[29,131427,131428],{"className":127497,"code":131333,"language":127499,"meta":34,"style":34},[36,131429,131430,131434,131440,131454],{"__ignoreMap":34},[39,131431,131432],{"class":41,"line":42},[39,131433,131340],{"class":102},[39,131435,131436,131438],{"class":41,"line":74},[39,131437,131345],{"class":3021},[39,131439,16628],{"class":45},[39,131441,131442,131444,131446,131448,131450,131452],{"class":41,"line":99},[39,131443,71524],{"class":56},[39,131445,52491],{"class":45},[39,131447,260],{"class":56},[39,131449,52610],{"class":56},[39,131451,131360],{"class":45},[39,131453,131363],{"class":102},[39,131455,131456],{"class":41,"line":106},[39,131457,2630],{"class":45},[269,131459],{"style":127353,"src":131460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,131462,131463],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,131465,131466],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[1188,131468,131470],{"id":131469},"_914-清除内外边距","9.1.4 清除内外边距",[19,131472,131473],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[29,131475,131476],{"className":127497,"code":131333,"language":127499,"meta":34,"style":34},[36,131477,131478,131482,131488,131502],{"__ignoreMap":34},[39,131479,131480],{"class":41,"line":42},[39,131481,131340],{"class":102},[39,131483,131484,131486],{"class":41,"line":74},[39,131485,131345],{"class":3021},[39,131487,16628],{"class":45},[39,131489,131490,131492,131494,131496,131498,131500],{"class":41,"line":99},[39,131491,71524],{"class":56},[39,131493,52491],{"class":45},[39,131495,260],{"class":56},[39,131497,52610],{"class":56},[39,131499,131360],{"class":45},[39,131501,131363],{"class":102},[39,131503,131504],{"class":41,"line":106},[39,131505,2630],{"class":45},[19,131507,131508],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[1188,131510,131512],{"id":131511},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[2205,131514,131515,131518,131521,131524,131527,131530],{},[1174,131516,131517],{},"文件→打开 ：可以打开我们要测量的图片",[1174,131519,131520],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[1174,131522,131523],{},"右击标尺，把里面的单位改为像素",[1174,131525,131526],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[1174,131528,131529],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[1174,131531,131532],{},"用选区拖动 可以测量大小",[269,131534],{"style":127353,"src":131535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[2205,131537,131538,131541],{},[1174,131539,131540],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[1174,131542,131543],{},"吸管取色工具",[269,131545],{"style":127353,"src":131546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[1188,131548,131550],{"id":131549},"_916-案例","9.1.6 案例",[1171,131552,131553],{},[1174,131554,131555],{},"小米商品",[269,131557],{"style":127353,"src":131558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[29,131560,131561],{"className":127497,"code":131333,"language":127499,"meta":34,"style":34},[36,131562,131563,131567,131573,131587],{"__ignoreMap":34},[39,131564,131565],{"class":41,"line":42},[39,131566,131340],{"class":102},[39,131568,131569,131571],{"class":41,"line":74},[39,131570,131345],{"class":3021},[39,131572,16628],{"class":45},[39,131574,131575,131577,131579,131581,131583,131585],{"class":41,"line":99},[39,131576,71524],{"class":56},[39,131578,52491],{"class":45},[39,131580,260],{"class":56},[39,131582,52610],{"class":56},[39,131584,131360],{"class":45},[39,131586,131363],{"class":102},[39,131588,131589],{"class":41,"line":106},[39,131590,2630],{"class":45},[1171,131592,131593],{"start":74},[1174,131594,131595],{},"快报模块",[269,131597],{"style":127353,"src":131598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[29,131600,131602],{"className":128244,"code":131601,"language":128246,"meta":34,"style":34},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[36,131603,131604,131609,131624,131629],{"__ignoreMap":34},[39,131605,131606],{"class":41,"line":42},[39,131607,131608],{"class":102},"\u003C!-- HTML 代码示例 -->\n",[39,131610,131611,131613,131615,131617,131619,131622],{"class":41,"line":74},[39,131612,2108],{"class":45},[39,131614,52665],{"class":52354},[39,131616,54540],{"class":3021},[39,131618,50],{"class":45},[39,131620,131621],{"class":1319},"\"example\"",[39,131623,52361],{"class":45},[39,131625,131626],{"class":41,"line":99},[39,131627,131628],{"class":45},"  示例内容\n",[39,131630,131631,131633,131635],{"class":41,"line":106},[39,131632,52839],{"class":45},[39,131634,52665],{"class":52354},[39,131636,52361],{"class":45},[1188,131638,131640],{"id":131639},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[1171,131642,131643],{},[1174,131644,131645],{},"圆角边框",[19,131647,131648],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[269,131650],{"style":127353,"src":131651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[29,131653,131655],{"className":127497,"code":131654,"language":127499,"meta":34,"style":34},"div {\n  border: 1px solid #ccc;\n}\n",[36,131656,131657,131663,131679],{"__ignoreMap":34},[39,131658,131659,131661],{"class":41,"line":42},[39,131660,52665],{"class":52354},[39,131662,16628],{"class":45},[39,131664,131665,131667,131669,131671,131673,131675,131677],{"class":41,"line":74},[39,131666,71950],{"class":56},[39,131668,52491],{"class":45},[39,131670,57],{"class":56},[39,131672,52546],{"class":49},[39,131674,52575],{"class":56},[39,131676,130889],{"class":56},[39,131678,2359],{"class":45},[39,131680,131681],{"class":41,"line":99},[39,131682,2630],{"class":45},[19,131684,131685],{},"解释:",[2205,131687,131688,131691,131694,131697,131700],{},[1174,131689,131690],{},"参数值可以为数值或百分比的形式",[1174,131692,131693],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[1174,131695,131696],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[1174,131698,131699],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[1174,131701,131702],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[1171,131704,131705],{"start":74},[1174,131706,131707],{},"盒子阴影",[29,131709,131711],{"className":127497,"code":131710,"language":127499,"meta":34,"style":34},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[36,131712,131713,131719,131756],{"__ignoreMap":34},[39,131714,131715,131717],{"class":41,"line":42},[39,131716,52665],{"class":52354},[39,131718,16628],{"class":45},[39,131720,131721,131724,131726,131728,131730,131732,131734,131736,131738,131740,131742,131744,131746,131748,131750,131752,131754],{"class":41,"line":74},[39,131722,131723],{"class":56},"  box-shadow",[39,131725,52491],{"class":45},[39,131727,260],{"class":56},[39,131729,15811],{"class":56},[39,131731,52546],{"class":49},[39,131733,3096],{"class":56},[39,131735,52546],{"class":49},[39,131737,79821],{"class":56},[39,131739,1221],{"class":45},[39,131741,260],{"class":56},[39,131743,13491],{"class":45},[39,131745,260],{"class":56},[39,131747,13491],{"class":45},[39,131749,260],{"class":56},[39,131751,13491],{"class":45},[39,131753,87264],{"class":56},[39,131755,3777],{"class":45},[39,131757,131758],{"class":41,"line":99},[39,131759,2630],{"class":45},[1352,131761,131762,131770],{},[1355,131763,131764],{},[1358,131765,131766,131768],{},[1361,131767,1366],{"align":24792},[1361,131769,28546],{"align":24792},[1398,131771,131772,131780,131788,131796,131804,131812],{},[1358,131773,131774,131777],{},[1403,131775,131776],{"align":24792},"h-shadow",[1403,131778,131779],{"align":24792},"必需,水平阴影的位置,允许负值",[1358,131781,131782,131785],{},[1403,131783,131784],{"align":24792},"v-shadow",[1403,131786,131787],{"align":24792},"必需,垂直阴影的位置,允许负值",[1358,131789,131790,131793],{},[1403,131791,131792],{"align":24792},"blur",[1403,131794,131795],{"align":24792},"可选,模糊距离,就是影子的虚实",[1358,131797,131798,131801],{},[1403,131799,131800],{"align":24792},"spread",[1403,131802,131803],{"align":24792},"可选,阴影尺寸",[1358,131805,131806,131809],{},[1403,131807,131808],{"align":24792},"color",[1403,131810,131811],{"align":24792},"可选,阴影的颜色",[1358,131813,131814,131817],{},[1403,131815,131816],{"align":24792},"inset",[1403,131818,131819],{"align":24792},"可选,将外部阴影(outset)改为内部阴影",[1171,131821,131822],{"start":99},[1174,131823,131824],{},"文字阴影",[29,131826,131828],{"className":127497,"code":131827,"language":127499,"meta":34,"style":34},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[36,131829,131830,131836,131875],{"__ignoreMap":34},[39,131831,131832,131834],{"class":41,"line":42},[39,131833,19],{"class":52354},[39,131835,16628],{"class":45},[39,131837,131838,131841,131843,131845,131847,131849,131851,131853,131855,131857,131859,131861,131863,131865,131867,131869,131871,131873],{"class":41,"line":74},[39,131839,131840],{"class":56},"  text-shadow",[39,131842,52491],{"class":45},[39,131844,57],{"class":56},[39,131846,52546],{"class":49},[39,131848,26175],{"class":56},[39,131850,52546],{"class":49},[39,131852,15811],{"class":56},[39,131854,52546],{"class":49},[39,131856,79821],{"class":56},[39,131858,1221],{"class":45},[39,131860,260],{"class":56},[39,131862,13491],{"class":45},[39,131864,260],{"class":56},[39,131866,13491],{"class":45},[39,131868,260],{"class":56},[39,131870,13491],{"class":45},[39,131872,101466],{"class":56},[39,131874,3777],{"class":45},[39,131876,131877],{"class":41,"line":99},[39,131878,2630],{"class":45},[1352,131880,131881,131889],{},[1355,131882,131883],{},[1358,131884,131885,131887],{},[1361,131886,1366],{"align":24792},[1361,131888,28546],{"align":24792},[1398,131890,131891,131897,131904,131911],{},[1358,131892,131893,131895],{},[1403,131894,131776],{"align":24792},[1403,131896,131779],{"align":24792},[1358,131898,131899,131901],{},[1403,131900,131784],{"align":24792},[1403,131902,131903],{"align":24792},"必需,垂直阴影位置,允许负值",[1358,131905,131906,131908],{},[1403,131907,131792],{"align":24792},[1403,131909,131910],{"align":24792},"可选,模糊的距离",[1358,131912,131913,131915],{},[1403,131914,131808],{"align":24792},[1403,131916,131811],{"align":24792},[14,131918,131920],{"id":131919},"_92-浮动","9.2 浮动",[1188,131922,131924],{"id":131923},"_921-浮动介绍","9.2.1 浮动介绍",[19,131926,131927],{},"在16.2中详细介绍",[1188,131929,131931],{"id":131930},"_922-清除浮动","9.2.2 清除浮动",[1171,131933,131934,131937],{},[1174,131935,131936],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[1174,131938,131939],{},"清除浮动的本质",[19,131941,131942],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131944,10081],{},[2205,131946,131947,131950,131953],{},[1174,131948,131949],{},"如果父盒子本身有高度，则不需要清除浮动",[1174,131951,131952],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[1174,131954,131955],{},"父级有了高度，就不会影响下面的标准流了",[1171,131957,131958],{"start":99},[1174,131959,131960],{},"清除浮动样式",[29,131962,131964],{"className":127497,"code":131963,"language":127499,"meta":34,"style":34},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[36,131965,131966,131973,131984,131988,131995,132005],{"__ignoreMap":34},[39,131967,131968,131971],{"class":41,"line":42},[39,131969,131970],{"class":3021},".left",[39,131972,16628],{"class":45},[39,131974,131975,131978,131980,131982],{"class":41,"line":74},[39,131976,131977],{"class":56},"  float",[39,131979,52491],{"class":45},[39,131981,24792],{"class":56},[39,131983,2359],{"class":45},[39,131985,131986],{"class":41,"line":99},[39,131987,2630],{"class":45},[39,131989,131990,131993],{"class":41,"line":106},[39,131991,131992],{"class":3021},".right",[39,131994,16628],{"class":45},[39,131996,131997,131999,132001,132003],{"class":41,"line":112},[39,131998,131977],{"class":56},[39,132000,52491],{"class":45},[39,132002,73576],{"class":56},[39,132004,2359],{"class":45},[39,132006,132007],{"class":41,"line":118},[39,132008,2630],{"class":45},[1352,132010,132011,132019],{},[1355,132012,132013],{},[1358,132014,132015,132017],{},[1361,132016,127961],{"align":24792},[1361,132018,28546],{"align":24792},[1398,132020,132021,132028,132035],{},[1358,132022,132023,132025],{},[1403,132024,24792],{"align":24792},[1403,132026,132027],{"align":24792},"不允许左侧有浮动元素（清除左侧浮动的影响）",[1358,132029,132030,132032],{},[1403,132031,73576],{"align":24792},[1403,132033,132034],{"align":24792},"不允许右侧有浮动元素（清除右侧浮动的影响）",[1358,132036,132037,132040],{},[1403,132038,132039],{"align":24792},"both",[1403,132041,132042],{"align":24792},"同时清除左右侧浮动的影响",[19,132044,132045],{},"法一",[19,132047,132048],{},"额外标签法也称为隔墙法",[19,132050,132051],{},"使用方式：",[19,132053,132054],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[29,132056,132057],{"className":127497,"code":131963,"language":127499,"meta":34,"style":34},[36,132058,132059,132065,132075,132079,132085,132095],{"__ignoreMap":34},[39,132060,132061,132063],{"class":41,"line":42},[39,132062,131970],{"class":3021},[39,132064,16628],{"class":45},[39,132066,132067,132069,132071,132073],{"class":41,"line":74},[39,132068,131977],{"class":56},[39,132070,52491],{"class":45},[39,132072,24792],{"class":56},[39,132074,2359],{"class":45},[39,132076,132077],{"class":41,"line":99},[39,132078,2630],{"class":45},[39,132080,132081,132083],{"class":41,"line":106},[39,132082,131992],{"class":3021},[39,132084,16628],{"class":45},[39,132086,132087,132089,132091,132093],{"class":41,"line":112},[39,132088,131977],{"class":56},[39,132090,52491],{"class":45},[39,132092,73576],{"class":56},[39,132094,2359],{"class":45},[39,132096,132097],{"class":41,"line":118},[39,132098,2630],{"class":45},[19,132100,132101],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132103,132104],{},"优点： 通俗易懂，书写方便",[19,132106,132107],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132109,132110],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132112,132113],{},"法二",[19,132115,132116],{},"父级添加overflow属性",[29,132118,132119],{"className":127497,"code":131963,"language":127499,"meta":34,"style":34},[36,132120,132121,132127,132137,132141,132147,132157],{"__ignoreMap":34},[39,132122,132123,132125],{"class":41,"line":42},[39,132124,131970],{"class":3021},[39,132126,16628],{"class":45},[39,132128,132129,132131,132133,132135],{"class":41,"line":74},[39,132130,131977],{"class":56},[39,132132,52491],{"class":45},[39,132134,24792],{"class":56},[39,132136,2359],{"class":45},[39,132138,132139],{"class":41,"line":99},[39,132140,2630],{"class":45},[39,132142,132143,132145],{"class":41,"line":106},[39,132144,131992],{"class":3021},[39,132146,16628],{"class":45},[39,132148,132149,132151,132153,132155],{"class":41,"line":112},[39,132150,131977],{"class":56},[39,132152,52491],{"class":45},[39,132154,73576],{"class":56},[39,132156,2359],{"class":45},[39,132158,132159],{"class":41,"line":118},[39,132160,2630],{"class":45},[19,132162,132163],{},"overflow: hidden;",[19,132165,132166],{},"优点：代码简洁",[19,132168,132169],{},"缺点：无法显示溢出的部分",[19,132171,132172],{},"注意：是给父元素添加代码",[19,132174,132175],{},"法三",[19,132177,132178],{},"父级添加after伪元素",[19,132180,132181,132184],{},[132182,132183],"after",{}," 方式是额外标签法的升级版",[19,132186,132187],{},"使用的时候复制就可以",[29,132189,132190],{"className":127497,"code":131963,"language":127499,"meta":34,"style":34},[36,132191,132192,132198,132208,132212,132218,132228],{"__ignoreMap":34},[39,132193,132194,132196],{"class":41,"line":42},[39,132195,131970],{"class":3021},[39,132197,16628],{"class":45},[39,132199,132200,132202,132204,132206],{"class":41,"line":74},[39,132201,131977],{"class":56},[39,132203,52491],{"class":45},[39,132205,24792],{"class":56},[39,132207,2359],{"class":45},[39,132209,132210],{"class":41,"line":99},[39,132211,2630],{"class":45},[39,132213,132214,132216],{"class":41,"line":106},[39,132215,131992],{"class":3021},[39,132217,16628],{"class":45},[39,132219,132220,132222,132224,132226],{"class":41,"line":112},[39,132221,131977],{"class":56},[39,132223,52491],{"class":45},[39,132225,73576],{"class":56},[39,132227,2359],{"class":45},[39,132229,132230],{"class":41,"line":118},[39,132231,2630],{"class":45},[19,132233,132234],{},"优点：没有增加标签，结构更简单",[19,132236,132237],{},"缺点：照顾低版本浏览器",[19,132239,132240],{},"代表网站： 百度、淘宝网、网易等",[19,132242,132243],{},"法四",[19,132245,132246],{},"父级添加双伪元素",[29,132248,132249],{"className":127497,"code":131963,"language":127499,"meta":34,"style":34},[36,132250,132251,132257,132267,132271,132277,132287],{"__ignoreMap":34},[39,132252,132253,132255],{"class":41,"line":42},[39,132254,131970],{"class":3021},[39,132256,16628],{"class":45},[39,132258,132259,132261,132263,132265],{"class":41,"line":74},[39,132260,131977],{"class":56},[39,132262,52491],{"class":45},[39,132264,24792],{"class":56},[39,132266,2359],{"class":45},[39,132268,132269],{"class":41,"line":99},[39,132270,2630],{"class":45},[39,132272,132273,132275],{"class":41,"line":106},[39,132274,131992],{"class":3021},[39,132276,16628],{"class":45},[39,132278,132279,132281,132283,132285],{"class":41,"line":112},[39,132280,131977],{"class":56},[39,132282,52491],{"class":45},[39,132284,73576],{"class":56},[39,132286,2359],{"class":45},[39,132288,132289],{"class":41,"line":118},[39,132290,2630],{"class":45},[19,132292,132293],{},"优点：代码更简洁",[19,132295,132237],{},[19,132297,132298],{},"代表网站：小米、腾讯等",[14,132300,132302],{"id":132301},"_93-ps切图","9.3 PS切图",[1188,132304,132306],{"id":132305},"_931-常见图片格式","9.3.1 常见图片格式",[1352,132308,132309,132319],{},[1355,132310,132311],{},[1358,132312,132313,132316],{},[1361,132314,132315],{"align":24792},"jpg图像格式",[1361,132317,132318],{"align":24792},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[1398,132320,132321,132329,132337],{},[1358,132322,132323,132326],{},[1403,132324,132325],{"align":24792},"gif图像格式",[1403,132327,132328],{"align":24792},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[1358,132330,132331,132334],{},[1403,132332,132333],{"align":24792},"png图像格式",[1403,132335,132336],{"align":24792},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[1358,132338,132339,132342],{},[1403,132340,132341],{"align":24792},"PSD图像格式",[1403,132343,132344],{"align":24792},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[1188,132346,132348],{"id":132347},"_932-图层切图","9.3.2 图层切图",[19,132350,132351],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,132353,132354],{},"按住shift选中两个图层->图层菜单->合并图层",[1188,132356,132358],{"id":132357},"_933-切片切图","9.3.3 切片切图",[2205,132360,132361,132364],{},[1174,132362,132363],{},"利用切片工具手动划出",[1174,132365,132366],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[1188,132368,132370],{"id":132369},"_934-切图步骤","9.3.4 切图步骤",[19,132372,132373],{},"用切片工具选中：",[269,132375],{"style":127353,"src":132376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,132378,132379],{},"文件 -> 导出",[269,132381],{"style":127353,"src":132382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1133,132384,132385],{},"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":34,"searchDepth":74,"depth":74,"links":132387},[132388,132397,132401],{"id":130824,"depth":74,"text":130825,"children":132389},[132390,132391,132392,132393,132394,132395,132396],{"id":130849,"depth":99,"text":130850},{"id":131140,"depth":99,"text":131141},{"id":131269,"depth":99,"text":131270},{"id":131469,"depth":99,"text":131470},{"id":131511,"depth":99,"text":131512},{"id":131549,"depth":99,"text":131550},{"id":131639,"depth":99,"text":131640},{"id":131919,"depth":74,"text":131920,"children":132398},[132399,132400],{"id":131923,"depth":99,"text":131924},{"id":131930,"depth":99,"text":131931},{"id":132301,"depth":74,"text":132302,"children":132402},[132403,132404,132405,132406],{"id":132305,"depth":99,"text":132306},{"id":132347,"depth":99,"text":132348},{"id":132357,"depth":99,"text":132358},{"id":132369,"depth":99,"text":132370},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130816,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132413,"title":132414,"body":132415,"description":1142,"extension":1143,"meta":133056,"navigation":1145,"path":133057,"seo":133058,"stem":133059,"__hash__":133060},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132416,"toc":133044},[132417,132420,132424,132450,132484,132488,132492,132495,132537,132544,132554,132562,132564,132567,132570,132573,132580,132594,132598,132601,132630,132634,132637,132651,132655,132658,132686,132690,132693,132719,132723,132728,132761,132766,132794,132798,132815,132861,132866,132910,132927,133034,133042],[10,132418,132414],{"id":132419},"_10-css规范与学成在线案例",[14,132421,132423],{"id":132422},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[1171,132425,132426,132432,132438,132444],{},[1174,132427,132428,132431],{},[304,132429,132430],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[1174,132433,132434,132437],{},[304,132435,132436],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[1174,132439,132440,132443],{},[304,132441,132442],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[1174,132445,132446,132449],{},[304,132447,132448],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[29,132451,132452],{"className":127497,"code":130861,"language":127499,"meta":34,"style":34},[36,132453,132454,132458,132464,132480],{"__ignoreMap":34},[39,132455,132456],{"class":41,"line":42},[39,132457,130868],{"class":102},[39,132459,132460,132462],{"class":41,"line":74},[39,132461,52665],{"class":52354},[39,132463,16628],{"class":45},[39,132465,132466,132468,132470,132472,132474,132476,132478],{"class":41,"line":99},[39,132467,71950],{"class":56},[39,132469,52491],{"class":45},[39,132471,57],{"class":56},[39,132473,52546],{"class":49},[39,132475,52575],{"class":56},[39,132477,130889],{"class":56},[39,132479,2359],{"class":45},[39,132481,132482],{"class":41,"line":106},[39,132483,2630],{"class":45},[14,132485,132487],{"id":132486},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[1188,132489,132491],{"id":132490},"_1021-header头部制作","10.2.1 header头部制作",[269,132493],{"style":127353,"src":132494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[2205,132496,132497,132504,132511,132517,132524,132531],{},[1174,132498,132499,132500,132503],{},"1号是版心盒子 ",[304,132501,132502],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[1174,132505,132506,132507,132510],{},"版心盒子 里面包含 2号盒子 ",[304,132508,132509],{},"logo"," 图标",[1174,132512,132513,132514,132516],{},"版心盒子 里面包含 3号盒子 ",[304,132515,54767],{}," 导航栏",[1174,132518,132519,132520,132523],{},"版心盒子 里面包含 4号盒子 ",[304,132521,132522],{},"search"," 搜索框",[1174,132525,132526,132527,132530],{},"版心盒子 里面包含 5号盒子 ",[304,132528,132529],{},"user"," 个人信息",[1174,132532,132533,132534],{},"注意，要求里面的 ",[304,132535,132536],{},"4个子盒子 必须都浮动",[1171,132538,132539],{},[1174,132540,132541],{},[304,132542,132543],{},"导航栏注意点:",[19,132545,132546,132547,132550,132551],{},"实际开发中， ",[304,132548,132549],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[304,132552,132553],{},"用 li 包含链接(li+a)的做法",[2205,132555,132556,132559],{},[1174,132557,132558],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[1174,132560,132561],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132563,10081],{},[19,132565,132566],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132568,132569],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132571,132572],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[1171,132574,132575],{"start":74},[1174,132576,132577],{},[304,132578,132579],{},"4号盒子search的细节：",[2205,132581,132582,132585,132588],{},[1174,132583,132584],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[1174,132586,132587],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[1174,132589,132590,132593],{},[36,132591,132592],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[1188,132595,132597],{"id":132596},"_1022-banner制作","10.2.2 banner制作",[269,132599],{"style":127353,"src":132600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[2205,132602,132603,132610,132616,132623],{},[1174,132604,132605,132606,132609],{},"1号盒子是通栏的大盒子 ",[304,132607,132608],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[1174,132611,132612,132613,132615],{},"2号盒子是版心 ",[304,132614,1993],{}," ， 要水平居中对齐",[1174,132617,132618,132619,132622],{},"3号盒子版心内，左对齐 ",[304,132620,132621],{},"subnav"," 侧导航栏",[1174,132624,132625,132626,132629],{},"4号盒子版心内，右对齐 ",[304,132627,132628],{},"course"," 课程",[1188,132631,132633],{"id":132632},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[269,132635],{"style":127353,"src":132636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[2205,132638,132639,132642,132645,132648],{},[1174,132640,132641],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[1174,132643,132644],{},"1号盒子是标题 H3 左侧浮动",[1174,132646,132647],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[1174,132649,132650],{},"3号盒子 右浮动 mod 修改",[1188,132652,132654],{"id":132653},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[269,132656],{"style":127353,"src":132657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[2205,132659,132660,132666,132673,132680,132683],{},[1174,132661,132662,132663,132665],{},"1号盒子为最大的盒子 ",[304,132664,54768],{}," 版心水平居中对齐",[1174,132667,132668,132669,132672],{},"2号盒子为上面部分 ",[304,132670,132671],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[1174,132674,132675,132676,132679],{},"3号盒子为底下部分 ",[304,132677,132678],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[1174,132681,132682],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[1174,132684,132685],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[1188,132687,132689],{"id":132688},"_1025-底部模块制作","10.2.5 底部模块制作",[269,132691],{"style":127353,"src":132692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[2205,132694,132695,132702,132705,132712],{},[1174,132696,132697,132698,132701],{},"1号盒子通栏大盒子 底部 ",[304,132699,132700],{},"footer"," 给高度 底色是白色",[1174,132703,132704],{},"2号盒子版心水平居中",[1174,132706,132707,132708,132711],{},"3号盒子版权 ",[304,132709,132710],{},"copyright"," 左对齐",[1174,132713,132714,132715,132718],{},"4号盒子 链接组 ",[304,132716,132717],{},"links"," 右对齐",[1188,132720,132722],{"id":132721},"_1026-代码模块","10.2.6 代码模块",[1171,132724,132725],{},[1174,132726,132727],{},"html部分",[29,132729,132731],{"className":128244,"code":132730,"language":128246,"meta":34,"style":34},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[36,132732,132733],{"__ignoreMap":34},[39,132734,132735,132737,132739,132741,132743,132746,132749,132751,132754,132757,132759],{"class":41,"line":42},[39,132736,2108],{"class":45},[39,132738,46],{"class":52354},[39,132740,62111],{"class":3021},[39,132742,50],{"class":45},[39,132744,132745],{"class":1319},"\"https:\u002F\u002Fexample.com\"",[39,132747,132748],{"class":3021}," target",[39,132750,50],{"class":45},[39,132752,132753],{"class":1319},"\"_blank\"",[39,132755,132756],{"class":45},">链接文字\u003C\u002F",[39,132758,46],{"class":52354},[39,132760,52361],{"class":45},[1171,132762,132763],{"start":74},[1174,132764,132765],{},"css部分",[29,132767,132768],{"className":128244,"code":132730,"language":128246,"meta":34,"style":34},[36,132769,132770],{"__ignoreMap":34},[39,132771,132772,132774,132776,132778,132780,132782,132784,132786,132788,132790,132792],{"class":41,"line":42},[39,132773,2108],{"class":45},[39,132775,46],{"class":52354},[39,132777,62111],{"class":3021},[39,132779,50],{"class":45},[39,132781,132745],{"class":1319},[39,132783,132748],{"class":3021},[39,132785,50],{"class":45},[39,132787,132753],{"class":1319},[39,132789,132756],{"class":45},[39,132791,46],{"class":52354},[39,132793,52361],{"class":45},[1188,132795,132797],{"id":132796},"_1027-收获","10.2.7 收获",[1171,132799,132800,132803,132806,132809,132812],{},[1174,132801,132802],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[1174,132804,132805],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[1174,132807,132808],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[1174,132810,132811],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[1174,132813,132814],{},"遗忘代码",[29,132816,132818],{"className":127497,"code":132817,"language":127499,"meta":34,"style":34},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[36,132819,132820,132842,132847,132857],{"__ignoreMap":34},[39,132821,132822,132824,132826,132828,132830,132832,132834,132836,132838,132840],{"class":41,"line":42},[39,132823,52665],{"class":52354},[39,132825,13491],{"class":45},[39,132827,19],{"class":52354},[39,132829,13491],{"class":45},[39,132831,10],{"class":52354},[39,132833,13491],{"class":45},[39,132835,2205],{"class":52354},[39,132837,13491],{"class":45},[39,132839,1174],{"class":52354},[39,132841,16628],{"class":45},[39,132843,132844],{"class":41,"line":74},[39,132845,132846],{"class":102},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[39,132848,132849,132851,132853,132855],{"class":41,"line":99},[39,132850,129113],{"class":56},[39,132852,52491],{"class":45},[39,132854,61923],{"class":56},[39,132856,2359],{"class":45},[39,132858,132859],{"class":41,"line":106},[39,132860,2630],{"class":45},[1171,132862,132863],{"start":118},[1174,132864,132865],{},"html引css的程序",[29,132867,132868],{"className":127497,"code":132817,"language":127499,"meta":34,"style":34},[36,132869,132870,132892,132896,132906],{"__ignoreMap":34},[39,132871,132872,132874,132876,132878,132880,132882,132884,132886,132888,132890],{"class":41,"line":42},[39,132873,52665],{"class":52354},[39,132875,13491],{"class":45},[39,132877,19],{"class":52354},[39,132879,13491],{"class":45},[39,132881,10],{"class":52354},[39,132883,13491],{"class":45},[39,132885,2205],{"class":52354},[39,132887,13491],{"class":45},[39,132889,1174],{"class":52354},[39,132891,16628],{"class":45},[39,132893,132894],{"class":41,"line":74},[39,132895,132846],{"class":102},[39,132897,132898,132900,132902,132904],{"class":41,"line":99},[39,132899,129113],{"class":56},[39,132901,52491],{"class":45},[39,132903,61923],{"class":56},[39,132905,2359],{"class":45},[39,132907,132908],{"class":41,"line":106},[39,132909,2630],{"class":45},[1171,132911,132912,132915,132918,132921,132924],{"start":413},[1174,132913,132914],{},"浮动的盒子不会有外边距合并问题",[1174,132916,132917],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[1174,132919,132920],{},"ctrl+g快速定位行；shift+alt多个光标",[1174,132922,132923],{},"学习上方各个模块的选择器起名方法，以后就这样用",[1174,132925,132926],{},"在写选择器时尽量写全一些，例如",[29,132928,132930],{"className":127497,"code":132929,"language":127499,"meta":34,"style":34},"\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",[36,132931,132932,132937,132953,132958,132973,132978,132993,132998,133013,133018],{"__ignoreMap":34},[39,132933,132934],{"class":41,"line":42},[39,132935,132936],{"class":102},"\u002F* 静态定位（默认） *\u002F\n",[39,132938,132939,132942,132944,132946,132948,132951],{"class":41,"line":74},[39,132940,132941],{"class":3021},".static",[39,132943,80861],{"class":45},[39,132945,129857],{"class":56},[39,132947,52491],{"class":45},[39,132949,132950],{"class":56},"static",[39,132952,130427],{"class":45},[39,132954,132955],{"class":41,"line":99},[39,132956,132957],{"class":102},"\u002F* 相对定位 *\u002F\n",[39,132959,132960,132963,132965,132967,132969,132971],{"class":41,"line":106},[39,132961,132962],{"class":3021},".relative",[39,132964,80861],{"class":45},[39,132966,129857],{"class":56},[39,132968,52491],{"class":45},[39,132970,55818],{"class":56},[39,132972,130427],{"class":45},[39,132974,132975],{"class":41,"line":112},[39,132976,132977],{"class":102},"\u002F* 绝对定位 *\u002F\n",[39,132979,132980,132983,132985,132987,132989,132991],{"class":41,"line":118},[39,132981,132982],{"class":3021},".absolute",[39,132984,80861],{"class":45},[39,132986,129857],{"class":56},[39,132988,52491],{"class":45},[39,132990,55885],{"class":56},[39,132992,130427],{"class":45},[39,132994,132995],{"class":41,"line":413},[39,132996,132997],{"class":102},"\u002F* 固定定位 *\u002F\n",[39,132999,133000,133003,133005,133007,133009,133011],{"class":41,"line":419},[39,133001,133002],{"class":3021},".fixed",[39,133004,80861],{"class":45},[39,133006,129857],{"class":56},[39,133008,52491],{"class":45},[39,133010,87287],{"class":56},[39,133012,130427],{"class":45},[39,133014,133015],{"class":41,"line":425},[39,133016,133017],{"class":102},"\u002F* 粘性定位 *\u002F\n",[39,133019,133020,133023,133025,133027,133029,133032],{"class":41,"line":443},[39,133021,133022],{"class":3021},".sticky",[39,133024,80861],{"class":45},[39,133026,129857],{"class":56},[39,133028,52491],{"class":45},[39,133030,133031],{"class":56},"sticky",[39,133033,130427],{"class":45},[1171,133035,133036,133039],{"start":455},[1174,133037,133038],{},"一定要用好注释",[1174,133040,133041],{},"浮动的盒子不会有外边距合并的问题",[1133,133043,132385],{},{"title":34,"searchDepth":74,"depth":74,"links":133045},[133046,133047],{"id":132422,"depth":74,"text":132423},{"id":132486,"depth":74,"text":132487,"children":133048},[133049,133050,133051,133052,133053,133054,133055],{"id":132490,"depth":99,"text":132491},{"id":132596,"depth":99,"text":132597},{"id":132632,"depth":99,"text":132633},{"id":132653,"depth":99,"text":132654},{"id":132688,"depth":99,"text":132689},{"id":132721,"depth":99,"text":132722},{"id":132796,"depth":99,"text":132797},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132414,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133062,"title":133063,"body":133064,"description":1142,"extension":1143,"meta":134550,"navigation":1145,"path":134551,"seo":134552,"stem":134553,"__hash__":134554},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133065,"toc":134542},[133066,133069,133073,133077,133088,133092,133109,133153,133186,133189,133206,133209,133212,133256,133260,133264,133267,133270,133274,133277,133288,133351,133392,133395,133410,133464,133472,133475,133486,133540,133566,133569,133582,133636,133668,133722,133745,133799,133802,133805,133812,133866,133887,133941,133944,133947,134032,134040,134097,134120,134124,134127,134145,134149,134168,134222,134260,134264,134267,134270,134292,134296,134304,134307,134312,134323,134326,134330,134344,134388,134391,134395,134398,134403,134429,134434,134511,134514,134518,134521,134524,134527,134530,134533,134536,134539],[10,133067,133063],{"id":133068},"_11-传统布局与定位体系",[14,133070,133072],{"id":133071},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[1188,133074,133076],{"id":133075},"_1111-普通流标准流","11.1.1 普通流（标准流）",[2205,133078,133079,133082,133085],{},[1174,133080,133081],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[1174,133083,133084],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[1174,133086,133087],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[1188,133089,133091],{"id":133090},"_1112-浮动","11.1.2 浮动",[2205,133093,133094,133097,133100,133103,133106],{},[1174,133095,133096],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[1174,133098,133099],{},"浮动可以改变元素标签默认的排列方式",[1174,133101,133102],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[1174,133104,133105],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[1174,133107,133108],{},"在使用行内块转换时盒子之间是有空隙的",[29,133110,133111],{"className":127497,"code":131963,"language":127499,"meta":34,"style":34},[36,133112,133113,133119,133129,133133,133139,133149],{"__ignoreMap":34},[39,133114,133115,133117],{"class":41,"line":42},[39,133116,131970],{"class":3021},[39,133118,16628],{"class":45},[39,133120,133121,133123,133125,133127],{"class":41,"line":74},[39,133122,131977],{"class":56},[39,133124,52491],{"class":45},[39,133126,24792],{"class":56},[39,133128,2359],{"class":45},[39,133130,133131],{"class":41,"line":99},[39,133132,2630],{"class":45},[39,133134,133135,133137],{"class":41,"line":106},[39,133136,131992],{"class":3021},[39,133138,16628],{"class":45},[39,133140,133141,133143,133145,133147],{"class":41,"line":112},[39,133142,131977],{"class":56},[39,133144,52491],{"class":45},[39,133146,73576],{"class":56},[39,133148,2359],{"class":45},[39,133150,133151],{"class":41,"line":118},[39,133152,2630],{"class":45},[1352,133154,133155,133163],{},[1355,133156,133157],{},[1358,133158,133159,133161],{},[1361,133160,127961],{"align":24792},[1361,133162,28546],{"align":24792},[1398,133164,133165,133172,133179],{},[1358,133166,133167,133169],{},[1403,133168,55791],{"align":24792},[1403,133170,133171],{"align":24792},"元素不浮动（默认值）",[1358,133173,133174,133176],{},[1403,133175,24792],{"align":24792},[1403,133177,133178],{"align":24792},"元素向左浮动",[1358,133180,133181,133183],{},[1403,133182,73576],{"align":24792},[1403,133184,133185],{"align":24792},"元素向右浮动",[19,133187,133188],{},"浮动重点：",[2205,133190,133191,133194,133197,133200,133203],{},[1174,133192,133193],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[1174,133195,133196],{},"浮动的元素会一行内显示并且元素顶部对齐",[1174,133198,133199],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[1174,133201,133202],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[1174,133204,133205],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133207,133208],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133210,133211],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[29,133213,133214],{"className":127497,"code":131963,"language":127499,"meta":34,"style":34},[36,133215,133216,133222,133232,133236,133242,133252],{"__ignoreMap":34},[39,133217,133218,133220],{"class":41,"line":42},[39,133219,131970],{"class":3021},[39,133221,16628],{"class":45},[39,133223,133224,133226,133228,133230],{"class":41,"line":74},[39,133225,131977],{"class":56},[39,133227,52491],{"class":45},[39,133229,24792],{"class":56},[39,133231,2359],{"class":45},[39,133233,133234],{"class":41,"line":99},[39,133235,2630],{"class":45},[39,133237,133238,133240],{"class":41,"line":106},[39,133239,131992],{"class":3021},[39,133241,16628],{"class":45},[39,133243,133244,133246,133248,133250],{"class":41,"line":112},[39,133245,131977],{"class":56},[39,133247,52491],{"class":45},[39,133249,73576],{"class":56},[39,133251,2359],{"class":45},[39,133253,133254],{"class":41,"line":118},[39,133255,2630],{"class":45},[1188,133257,133259],{"id":133258},"_1113-定位","11.1.3 定位",[23054,133261,133263],{"id":133262},"_11131-使用场景","11.1.3.1 使用场景",[19,133265,133266],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133268,133269],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23054,133271,133273],{"id":133272},"_11132-定位组成","11.1.3.2 定位组成",[19,133275,133276],{},"定位 = 定位模式 + 边偏移",[1171,133278,133279],{},[1174,133280,133281,133284,133285],{},[304,133282,133283],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[304,133286,133287],{},"定位模式",[29,133289,133291],{"className":127497,"code":133290,"language":127499,"meta":34,"style":34},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[36,133292,133293,133299,133313,133330,133347],{"__ignoreMap":34},[39,133294,133295,133297],{"class":41,"line":42},[39,133296,131345],{"class":3021},[39,133298,16628],{"class":45},[39,133300,133301,133304,133306,133308,133310],{"class":41,"line":74},[39,133302,133303],{"class":56},"  position",[39,133305,52491],{"class":45},[39,133307,55818],{"class":56},[39,133309,131360],{"class":45},[39,133311,133312],{"class":102},"\u002F* 定位模式 *\u002F\n",[39,133314,133315,133318,133320,133322,133324,133327],{"class":41,"line":99},[39,133316,133317],{"class":56},"  top",[39,133319,52491],{"class":45},[39,133321,146],{"class":56},[39,133323,52546],{"class":49},[39,133325,133326],{"class":45},";           ",[39,133328,133329],{"class":102},"\u002F* 边偏移：上 *\u002F\n",[39,133331,133332,133335,133337,133339,133341,133344],{"class":41,"line":106},[39,133333,133334],{"class":56},"  left",[39,133336,52491],{"class":45},[39,133338,1898],{"class":56},[39,133340,52546],{"class":49},[39,133342,133343],{"class":45},";          ",[39,133345,133346],{"class":102},"\u002F* 边偏移：左 *\u002F\n",[39,133348,133349],{"class":41,"line":112},[39,133350,2630],{"class":45},[1352,133352,133353,133362],{},[1355,133354,133355],{},[1358,133356,133357,133359],{},[1361,133358,1366],{"align":24792},[1361,133360,133361],{"align":24792},"语义",[1398,133363,133364,133371,133378,133385],{},[1358,133365,133366,133368],{},[1403,133367,132950],{"align":24792},[1403,133369,133370],{"align":24792},"静态定位",[1358,133372,133373,133375],{},[1403,133374,55818],{"align":24792},[1403,133376,133377],{"align":24792},"相对定位",[1358,133379,133380,133382],{},[1403,133381,55885],{"align":24792},[1403,133383,133384],{"align":24792},"绝对定位",[1358,133386,133387,133389],{},[1403,133388,87287],{"align":24792},[1403,133390,133391],{"align":24792},"固定定位",[19,133393,133394],{},"（1）静态定位：",[2205,133396,133397,133408],{},[1174,133398,133399,133400,133403,133404,133407],{},"静态定位是元素的 ",[304,133401,133402],{},"默认定位方式"," ， ",[304,133405,133406],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[1174,133409,6238],{},[29,133411,133412],{"className":127497,"code":133290,"language":127499,"meta":34,"style":34},[36,133413,133414,133420,133432,133446,133460],{"__ignoreMap":34},[39,133415,133416,133418],{"class":41,"line":42},[39,133417,131345],{"class":3021},[39,133419,16628],{"class":45},[39,133421,133422,133424,133426,133428,133430],{"class":41,"line":74},[39,133423,133303],{"class":56},[39,133425,52491],{"class":45},[39,133427,55818],{"class":56},[39,133429,131360],{"class":45},[39,133431,133312],{"class":102},[39,133433,133434,133436,133438,133440,133442,133444],{"class":41,"line":99},[39,133435,133317],{"class":56},[39,133437,52491],{"class":45},[39,133439,146],{"class":56},[39,133441,52546],{"class":49},[39,133443,133326],{"class":45},[39,133445,133329],{"class":102},[39,133447,133448,133450,133452,133454,133456,133458],{"class":41,"line":106},[39,133449,133334],{"class":56},[39,133451,52491],{"class":45},[39,133453,1898],{"class":56},[39,133455,52546],{"class":49},[39,133457,133343],{"class":45},[39,133459,133346],{"class":102},[39,133461,133462],{"class":41,"line":112},[39,133463,2630],{"class":45},[2205,133465,133466,133469],{},[1174,133467,133468],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[1174,133470,133471],{},"静态定位在布局时我们几乎不用的",[19,133473,133474],{},"（2）相对定位",[2205,133476,133477,133484],{},[1174,133478,133479,133480,133483],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[304,133481,133482],{},"原来的位置"," 来说的（自恋型）",[1174,133485,6238],{},[29,133487,133488],{"className":127497,"code":133290,"language":127499,"meta":34,"style":34},[36,133489,133490,133496,133508,133522,133536],{"__ignoreMap":34},[39,133491,133492,133494],{"class":41,"line":42},[39,133493,131345],{"class":3021},[39,133495,16628],{"class":45},[39,133497,133498,133500,133502,133504,133506],{"class":41,"line":74},[39,133499,133303],{"class":56},[39,133501,52491],{"class":45},[39,133503,55818],{"class":56},[39,133505,131360],{"class":45},[39,133507,133312],{"class":102},[39,133509,133510,133512,133514,133516,133518,133520],{"class":41,"line":99},[39,133511,133317],{"class":56},[39,133513,52491],{"class":45},[39,133515,146],{"class":56},[39,133517,52546],{"class":49},[39,133519,133326],{"class":45},[39,133521,133329],{"class":102},[39,133523,133524,133526,133528,133530,133532,133534],{"class":41,"line":106},[39,133525,133334],{"class":56},[39,133527,52491],{"class":45},[39,133529,1898],{"class":56},[39,133531,52546],{"class":49},[39,133533,133343],{"class":45},[39,133535,133346],{"class":102},[39,133537,133538],{"class":41,"line":112},[39,133539,2630],{"class":45},[2205,133541,133542],{},[1174,133543,133544,133545,133547,133548,133550,133551,133554,133555,133558,133559,133561,133562,133565],{},"相对定位的特点：",[54770,133546],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54770,133549],{},"  ② ",[304,133552,133553],{},"原来"," 在标准流的 ",[304,133556,133557],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54770,133560],{},"  ③因此， ",[304,133563,133564],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133567,133568],{},"（3）绝对定位",[2205,133570,133571,133580],{},[1174,133572,133573,133575,133576,133579],{},[304,133574,133384],{}," 是元素在移动位置的时候，是相对于它 ",[304,133577,133578],{},"祖先元素"," 来说的（拼爹型）",[1174,133581,6238],{},[29,133583,133584],{"className":127497,"code":133290,"language":127499,"meta":34,"style":34},[36,133585,133586,133592,133604,133618,133632],{"__ignoreMap":34},[39,133587,133588,133590],{"class":41,"line":42},[39,133589,131345],{"class":3021},[39,133591,16628],{"class":45},[39,133593,133594,133596,133598,133600,133602],{"class":41,"line":74},[39,133595,133303],{"class":56},[39,133597,52491],{"class":45},[39,133599,55818],{"class":56},[39,133601,131360],{"class":45},[39,133603,133312],{"class":102},[39,133605,133606,133608,133610,133612,133614,133616],{"class":41,"line":99},[39,133607,133317],{"class":56},[39,133609,52491],{"class":45},[39,133611,146],{"class":56},[39,133613,52546],{"class":49},[39,133615,133326],{"class":45},[39,133617,133329],{"class":102},[39,133619,133620,133622,133624,133626,133628,133630],{"class":41,"line":106},[39,133621,133334],{"class":56},[39,133623,52491],{"class":45},[39,133625,1898],{"class":56},[39,133627,52546],{"class":49},[39,133629,133343],{"class":45},[39,133631,133346],{"class":102},[39,133633,133634],{"class":41,"line":112},[39,133635,2630],{"class":45},[2205,133637,133638,133653,133662,133665],{},[1174,133639,133640,133641,133643,133644,133646,133647,133649,133650,133652],{},"绝对定位的特点：",[54770,133642],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54770,133645],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54770,133648],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54770,133651],{},"  (4)固定定位",[1174,133654,133655,133657,133658,133661],{},[304,133656,133391],{}," 是元素 ",[304,133659,133660],{},"固定于浏览器可视区的位置"," 。（认死理型）",[1174,133663,133664],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[1174,133666,133667],{},"语法:",[29,133669,133670],{"className":127497,"code":133290,"language":127499,"meta":34,"style":34},[36,133671,133672,133678,133690,133704,133718],{"__ignoreMap":34},[39,133673,133674,133676],{"class":41,"line":42},[39,133675,131345],{"class":3021},[39,133677,16628],{"class":45},[39,133679,133680,133682,133684,133686,133688],{"class":41,"line":74},[39,133681,133303],{"class":56},[39,133683,52491],{"class":45},[39,133685,55818],{"class":56},[39,133687,131360],{"class":45},[39,133689,133312],{"class":102},[39,133691,133692,133694,133696,133698,133700,133702],{"class":41,"line":99},[39,133693,133317],{"class":56},[39,133695,52491],{"class":45},[39,133697,146],{"class":56},[39,133699,52546],{"class":49},[39,133701,133326],{"class":45},[39,133703,133329],{"class":102},[39,133705,133706,133708,133710,133712,133714,133716],{"class":41,"line":106},[39,133707,133334],{"class":56},[39,133709,52491],{"class":45},[39,133711,1898],{"class":56},[39,133713,52546],{"class":49},[39,133715,133343],{"class":45},[39,133717,133346],{"class":102},[39,133719,133720],{"class":41,"line":112},[39,133721,2630],{"class":45},[2205,133723,133724,133733],{},[1174,133725,133726,133727,133729,133730,133732],{},"特点:",[54770,133728],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54770,133731],{},"  ②固定定位不再占有原先的位置,完全脱标",[1174,133734,133735,133736,133738,133739,133741,133742,133744],{},"固定在版心位置的方法:",[54770,133737],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54770,133740],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54770,133743],{},"  实例：",[29,133746,133747],{"className":127497,"code":133290,"language":127499,"meta":34,"style":34},[36,133748,133749,133755,133767,133781,133795],{"__ignoreMap":34},[39,133750,133751,133753],{"class":41,"line":42},[39,133752,131345],{"class":3021},[39,133754,16628],{"class":45},[39,133756,133757,133759,133761,133763,133765],{"class":41,"line":74},[39,133758,133303],{"class":56},[39,133760,52491],{"class":45},[39,133762,55818],{"class":56},[39,133764,131360],{"class":45},[39,133766,133312],{"class":102},[39,133768,133769,133771,133773,133775,133777,133779],{"class":41,"line":99},[39,133770,133317],{"class":56},[39,133772,52491],{"class":45},[39,133774,146],{"class":56},[39,133776,52546],{"class":49},[39,133778,133326],{"class":45},[39,133780,133329],{"class":102},[39,133782,133783,133785,133787,133789,133791,133793],{"class":41,"line":106},[39,133784,133334],{"class":56},[39,133786,52491],{"class":45},[39,133788,1898],{"class":56},[39,133790,52546],{"class":49},[39,133792,133343],{"class":45},[39,133794,133346],{"class":102},[39,133796,133797],{"class":41,"line":112},[39,133798,2630],{"class":45},[269,133800],{"style":127353,"src":133801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,133803,133804],{},"(5)粘性定位",[2205,133806,133807,133810],{},[1174,133808,133809],{},"粘性定位可以被认为是相对定位和固定定位的混合",[1174,133811,6238],{},[29,133813,133814],{"className":127497,"code":133290,"language":127499,"meta":34,"style":34},[36,133815,133816,133822,133834,133848,133862],{"__ignoreMap":34},[39,133817,133818,133820],{"class":41,"line":42},[39,133819,131345],{"class":3021},[39,133821,16628],{"class":45},[39,133823,133824,133826,133828,133830,133832],{"class":41,"line":74},[39,133825,133303],{"class":56},[39,133827,52491],{"class":45},[39,133829,55818],{"class":56},[39,133831,131360],{"class":45},[39,133833,133312],{"class":102},[39,133835,133836,133838,133840,133842,133844,133846],{"class":41,"line":99},[39,133837,133317],{"class":56},[39,133839,52491],{"class":45},[39,133841,146],{"class":56},[39,133843,52546],{"class":49},[39,133845,133326],{"class":45},[39,133847,133329],{"class":102},[39,133849,133850,133852,133854,133856,133858,133860],{"class":41,"line":106},[39,133851,133334],{"class":56},[39,133853,52491],{"class":45},[39,133855,1898],{"class":56},[39,133857,52546],{"class":49},[39,133859,133343],{"class":45},[39,133861,133346],{"class":102},[39,133863,133864],{"class":41,"line":112},[39,133865,2630],{"class":45},[2205,133867,133868],{},[1174,133869,133870,133871,133873,133874,133876,133877,133879,133880,133883,133884,133886],{},"粘性定位的特点：",[54770,133872],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54770,133875],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54770,133878],{},"  ③必须添加 top 、left、right、bottom ",[304,133881,133882],{},"其中一个"," 才有效",[54770,133885],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[29,133888,133889],{"className":127497,"code":133290,"language":127499,"meta":34,"style":34},[36,133890,133891,133897,133909,133923,133937],{"__ignoreMap":34},[39,133892,133893,133895],{"class":41,"line":42},[39,133894,131345],{"class":3021},[39,133896,16628],{"class":45},[39,133898,133899,133901,133903,133905,133907],{"class":41,"line":74},[39,133900,133303],{"class":56},[39,133902,52491],{"class":45},[39,133904,55818],{"class":56},[39,133906,131360],{"class":45},[39,133908,133312],{"class":102},[39,133910,133911,133913,133915,133917,133919,133921],{"class":41,"line":99},[39,133912,133317],{"class":56},[39,133914,52491],{"class":45},[39,133916,146],{"class":56},[39,133918,52546],{"class":49},[39,133920,133326],{"class":45},[39,133922,133329],{"class":102},[39,133924,133925,133927,133929,133931,133933,133935],{"class":41,"line":106},[39,133926,133334],{"class":56},[39,133928,52491],{"class":45},[39,133930,1898],{"class":56},[39,133932,52546],{"class":49},[39,133934,133343],{"class":45},[39,133936,133346],{"class":102},[39,133938,133939],{"class":41,"line":112},[39,133940,2630],{"class":45},[269,133942],{"style":127353,"src":133943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133945,133946],{},"(6)总结",[1352,133948,133949,133964],{},[1355,133950,133951],{},[1358,133952,133953,133955,133958,133961],{},[1361,133954,133287],{"align":24792},[1361,133956,133957],{"align":24792},"是否脱标",[1361,133959,133960],{"align":24792},"移动位置",[1361,133962,133963],{"align":24792},"是否常用",[1398,133965,133966,133979,133993,134007,134020],{},[1358,133967,133968,133971,133973,133976],{},[1403,133969,133970],{"align":24792},"Static 静态定位",[1403,133972,105623],{"align":24792},[1403,133974,133975],{"align":24792},"不能使用边偏移",[1403,133977,133978],{"align":24792},"很少",[1358,133980,133981,133984,133987,133990],{},[1403,133982,133983],{"align":24792},"Relative 相对定位",[1403,133985,133986],{"align":24792},"否(占有位置)",[1403,133988,133989],{"align":24792},"相对于自身位置移动",[1403,133991,133992],{"align":24792},"基本单独使用",[1358,133994,133995,133998,134001,134004],{},[1403,133996,133997],{"align":24792},"Absolute 绝对定位",[1403,133999,134000],{"align":24792},"是(不占有位置)",[1403,134002,134003],{"align":24792},"带有定位的父级",[1403,134005,134006],{"align":24792},"要和定位父级元素搭配使用",[1358,134008,134009,134012,134014,134017],{},[1403,134010,134011],{"align":24792},"Fixed 固定定位",[1403,134013,134000],{"align":24792},[1403,134015,134016],{"align":24792},"浏览器可视区",[1403,134018,134019],{"align":24792},"单独使用,不需要父级",[1358,134021,134022,134025,134027,134029],{},[1403,134023,134024],{"align":24792},"Sticky 粘性定位",[1403,134026,133986],{"align":24792},[1403,134028,134016],{"align":24792},[1403,134030,134031],{"align":24792},"当前阶段少",[1171,134033,134034],{"start":74},[1174,134035,134036,134039],{},[304,134037,134038],{},"边偏移"," 则决定了该元素的最终位置",[1352,134041,134042,134053],{},[1355,134043,134044],{},[1358,134045,134046,134049,134051],{},[1361,134047,134048],{"align":24792},"边偏移属性",[1361,134050,28549],{"align":24792},[1361,134052,28546],{"align":24792},[1398,134054,134055,134066,134077,134087],{},[1358,134056,134057,134060,134063],{},[1403,134058,134059],{"align":24792},"top",[1403,134061,134062],{"align":24792},"top: 80px;",[1403,134064,134065],{"align":24792},"顶端偏移量，定义元素相对于父元素上边线的距离",[1358,134067,134068,134071,134074],{},[1403,134069,134070],{"align":24792},"bottom",[1403,134072,134073],{"align":24792},"bottom: 80px ;",[1403,134075,134076],{"align":24792},"底部偏移量，定义元素相对于其父元素下边线的距离",[1358,134078,134079,134081,134084],{},[1403,134080,24792],{"align":24792},[1403,134082,134083],{"align":24792},"left: 80px ;",[1403,134085,134086],{"align":24792},"左侧偏移量，定义元素相对于其父元素左边线的距离",[1358,134088,134089,134091,134094],{},[1403,134090,73576],{"align":24792},[1403,134092,134093],{"align":24792},"right: 80px ;",[1403,134095,134096],{"align":24792},"右侧偏移量，定义元素相对于其父元素右边线的距离",[2205,134098,134099],{},[1174,134100,10081,134101,134103,134104,134106,134107,134109,134110,134113,134114,134116,134117,134119],{},[54770,134102],{},"  ① ",[304,134105,134038],{}," 需要和 ",[304,134108,133287],{}," 联合使用， ",[304,134111,134112],{},"单独使用无效"," ；",[54770,134115],{},"  ②top和bottom不要同时使用",[54770,134118],{},"  ③left和right不要同时使用",[23054,134121,134123],{"id":134122},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134125,134126],{},"子级是绝对定位的话，父级要用相对定位",[2205,134128,134129,134132,134135,134138],{},[1174,134130,134131],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[1174,134133,134134],{},"父盒子需要加定位限制子盒子在父盒子内显示",[1174,134136,134137],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[1174,134139,134140,134141,134144],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[304,134142,134143],{},"子绝父绝"," 也会遇到",[23054,134146,134148],{"id":134147},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[2205,134150,134151,134166],{},[1174,134152,134153,134154,134157,134158,134161,134162,134165],{},"在使用 ",[304,134155,134156],{},"定位"," 布局时，可能会 ",[304,134159,134160],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[304,134163,134164],{},"z-index"," 来控制盒子的前后次序 (z轴)",[1174,134167,6238],{},[29,134169,134170],{"className":127497,"code":133290,"language":127499,"meta":34,"style":34},[36,134171,134172,134178,134190,134204,134218],{"__ignoreMap":34},[39,134173,134174,134176],{"class":41,"line":42},[39,134175,131345],{"class":3021},[39,134177,16628],{"class":45},[39,134179,134180,134182,134184,134186,134188],{"class":41,"line":74},[39,134181,133303],{"class":56},[39,134183,52491],{"class":45},[39,134185,55818],{"class":56},[39,134187,131360],{"class":45},[39,134189,133312],{"class":102},[39,134191,134192,134194,134196,134198,134200,134202],{"class":41,"line":99},[39,134193,133317],{"class":56},[39,134195,52491],{"class":45},[39,134197,146],{"class":56},[39,134199,52546],{"class":49},[39,134201,133326],{"class":45},[39,134203,133329],{"class":102},[39,134205,134206,134208,134210,134212,134214,134216],{"class":41,"line":106},[39,134207,133334],{"class":56},[39,134209,52491],{"class":45},[39,134211,1898],{"class":56},[39,134213,52546],{"class":49},[39,134215,133343],{"class":45},[39,134217,133346],{"class":102},[39,134219,134220],{"class":41,"line":112},[39,134221,2630],{"class":45},[2205,134223,134224],{},[1174,134225,134226,134227,134103,134229,134231,134232,128660,134235,83593,134238,134240,134241,134243,134244,134247,134248,134113,134251,134253,134254,134257,134259],{},"z-index的特性",[54770,134228],{},[304,134230,127961],{}," ： ",[304,134233,134234],{},"正整数",[304,134236,134237],{},"负整数",[304,134239,260],{}," ，默认值是 0，数值越大，盒子越靠上；",[54770,134242],{},"  ②如果 ",[304,134245,134246],{},"属性值相同"," ，则按照书写顺序， ",[304,134249,134250],{},"后来居上",[54770,134252],{},"  ③数字后面 ",[304,134255,134256],{},"不能加单位",[54770,134258],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23054,134261,134263],{"id":134262},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134265,134266],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134268,134269],{},"方法:",[2205,134271,134272,134282],{},[1174,134273,134274,134275,134278,134279],{},"left: 50%; 让 ",[304,134276,134277],{},"盒子的左侧"," 移动到 ",[304,134280,134281],{},"父级元素的水平中心位置",[1174,134283,134284,134285,134288,134289],{},"margin-left: -100px; 让盒子 ",[304,134286,134287],{},"向左"," 移动 ",[304,134290,134291],{},"自身宽度的一半",[23054,134293,134295],{"id":134294},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[1171,134297,134298,134301],{},[1174,134299,134300],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[1174,134302,134303],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134305,134306],{},"也就是说绝对定位和固定定位和浮动类似",[1171,134308,134309],{"start":99},[1174,134310,134311],{},"display 是显示模式， 可以改变显示模式有以下方式:",[2205,134313,134314,134317,134320],{},[1174,134315,134316],{},"可以用inline-block 转换为行内块",[1174,134318,134319],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[1174,134321,134322],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,134324,134325],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23054,134327,134329],{"id":134328},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[1171,134331,134332,134335,134338,134341],{},[1174,134333,134334],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[1174,134336,134337],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[1174,134339,134340],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[1174,134342,134343],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[29,134345,134346],{"className":127497,"code":131963,"language":127499,"meta":34,"style":34},[36,134347,134348,134354,134364,134368,134374,134384],{"__ignoreMap":34},[39,134349,134350,134352],{"class":41,"line":42},[39,134351,131970],{"class":3021},[39,134353,16628],{"class":45},[39,134355,134356,134358,134360,134362],{"class":41,"line":74},[39,134357,131977],{"class":56},[39,134359,52491],{"class":45},[39,134361,24792],{"class":56},[39,134363,2359],{"class":45},[39,134365,134366],{"class":41,"line":99},[39,134367,2630],{"class":45},[39,134369,134370,134372],{"class":41,"line":106},[39,134371,131992],{"class":3021},[39,134373,16628],{"class":45},[39,134375,134376,134378,134380,134382],{"class":41,"line":112},[39,134377,131977],{"class":56},[39,134379,52491],{"class":45},[39,134381,73576],{"class":56},[39,134383,2359],{"class":45},[39,134385,134386],{"class":41,"line":118},[39,134387,2630],{"class":45},[269,134389],{"style":127353,"src":134390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23054,134392,134394],{"id":134393},"_11138-轮播图","11.1.3.8 轮播图",[269,134396],{"style":127353,"src":134397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[1171,134399,134400],{},[1174,134401,134402],{},"制作顺序:",[2205,134404,134405,134408,134411,134420],{},[1174,134406,134407],{},"大盒子我们类名为： tb-promo 淘宝广告",[1174,134409,134410],{},"里面先放一张图片",[1174,134412,134413,134414,134416,134417,134419],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54770,134415],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54770,134418],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[1174,134421,134422,134423,134425,134426,134428],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54770,134424],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54770,134427],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[1171,134430,134431],{"start":74},[1174,134432,134433],{},"代码模块",[29,134435,134437],{"className":127497,"code":134436,"language":127499,"meta":34,"style":34},"\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",[36,134438,134439,134444,134451,134461,134471,134481,134485,134490,134497,134507],{"__ignoreMap":34},[39,134440,134441],{"class":41,"line":42},[39,134442,134443],{"class":102},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[39,134445,134446,134449],{"class":41,"line":74},[39,134447,134448],{"class":3021},".son",[39,134450,16628],{"class":45},[39,134452,134453,134455,134457,134459],{"class":41,"line":99},[39,134454,133303],{"class":56},[39,134456,52491],{"class":45},[39,134458,55885],{"class":56},[39,134460,2359],{"class":45},[39,134462,134463,134465,134467,134469],{"class":41,"line":106},[39,134464,133317],{"class":56},[39,134466,52491],{"class":45},[39,134468,260],{"class":56},[39,134470,2359],{"class":45},[39,134472,134473,134475,134477,134479],{"class":41,"line":112},[39,134474,133334],{"class":56},[39,134476,52491],{"class":45},[39,134478,260],{"class":56},[39,134480,2359],{"class":45},[39,134482,134483],{"class":41,"line":118},[39,134484,2630],{"class":45},[39,134486,134487],{"class":41,"line":413},[39,134488,134489],{"class":102},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[39,134491,134492,134495],{"class":41,"line":419},[39,134493,134494],{"class":3021},".father",[39,134496,16628],{"class":45},[39,134498,134499,134501,134503,134505],{"class":41,"line":425},[39,134500,133303],{"class":56},[39,134502,52491],{"class":45},[39,134504,55818],{"class":56},[39,134506,2359],{"class":45},[39,134508,134509],{"class":41,"line":443},[39,134510,2630],{"class":45},[19,134512,134513],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[1188,134515,134517],{"id":134516},"_1114-定位数值的移动","11.1.4 定位数值的移动",[269,134519],{"style":127353,"src":134520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,134522,134523],{},"✨ 黄金口诀：",[19,134525,134526],{},"\"TOP正下负上，LEFT正右负左\"",[19,134528,134529],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,134531,134532],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,134534,134535],{},"✨ 简单记：",[19,134537,134538],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1133,134540,134541],{},"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":34,"searchDepth":74,"depth":74,"links":134543},[134544],{"id":133071,"depth":74,"text":133072,"children":134545},[134546,134547,134548,134549],{"id":133075,"depth":99,"text":133076},{"id":133090,"depth":99,"text":133091},{"id":133258,"depth":99,"text":133259},{"id":134516,"depth":99,"text":134517},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133063,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134556,"title":134557,"body":134558,"description":1142,"extension":1143,"meta":135981,"navigation":1145,"path":135982,"seo":135983,"stem":135984,"__hash__":135985},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134559,"toc":135960},[134560,134563,134567,134575,134579,134584,134592,134604,134608,134613,134621,134632,134636,134641,134682,134690,134694,134697,134700,134703,134797,134800,134894,134897,134991,134994,134997,135032,135035,135038,135068,135071,135074,135077,135080,135083,135086,135089,135159,135162,135166,135170,135211,135215,135221,135224,135227,135231,135234,135237,135240,135321,135324,135327,135331,135335,135338,135341,135344,135347,135350,135356,135365,135369,135388,135392,135402,135405,135408,135411,135414,135417,135420,135423,135426,135435,135439,135448,135451,135456,135509,135514,135680,135683,135686,135691,135694,135697,135700,135703,135708,135856,135859,135862,135867,135870,135875,135909,135912,135915,135919,135922,135929,135932,135935,135938,135941,135944,135947,135950,135954,135957],[10,134561,134557],{"id":134562},"_12-显示隐藏与图形资源",[14,134564,134566],{"id":134565},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[2205,134568,134569,134572],{},[1174,134570,134571],{},"目的:让一个元素在页面中消失或者显示出来",[1174,134573,134574],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[1188,134576,134578],{"id":134577},"_1211-display-显示","12.1.1 display 显示",[1171,134580,134581],{},[1174,134582,134583],{},"display 设置或检索对象是否及如何显示",[2205,134585,134586,134589],{},[1174,134587,134588],{},"display: none;隐藏对象",[1174,134590,134591],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[1171,134593,134594,134601],{"start":74},[1174,134595,134596,134597,134600],{},"特点： display 隐藏元素后， ",[304,134598,134599],{},"不再占"," 有原来的位置",[1174,134602,134603],{},"在js中使用非常的广泛",[1188,134605,134607],{"id":134606},"_1212-visibility可见性","12.1.2 visibility可见性",[1171,134609,134610],{},[1174,134611,134612],{},"visibility 属性用于指定一个元素应可见还是隐藏",[2205,134614,134615,134618],{},[1174,134616,134617],{},"visibility： visible；元素可见",[1174,134619,134620],{},"visibility：hidden；元素隐藏",[1171,134622,134623,134626,134629],{"start":74},[1174,134624,134625],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[1174,134627,134628],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[1174,134630,134631],{},"隐藏后继续占有原有位置",[1188,134633,134635],{"id":134634},"_1213-overflow溢出","12.1.3 overflow溢出",[2205,134637,134638],{},[1174,134639,134640],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[1352,134642,134643,134651],{},[1355,134644,134645],{},[1358,134646,134647,134649],{},[1361,134648,127961],{"align":24792},[1361,134650,28546],{"align":24792},[1398,134652,134653,134661,134668,134675],{},[1358,134654,134655,134658],{},[1403,134656,134657],{"align":24792},"visible",[1403,134659,134660],{"align":24792},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[1358,134662,134663,134665],{},[1403,134664,62768],{"align":24792},[1403,134666,134667],{"align":24792},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[1358,134669,134670,134672],{},[1403,134671,129917],{"align":24792},[1403,134673,134674],{"align":24792},"不管超出内容否，总是显示滚动条",[1358,134676,134677,134679],{},[1403,134678,73717],{"align":24792},[1403,134680,134681],{"align":24792},"超出自动显示滚动条，不超出不显示滚动条",[2205,134683,134684,134687],{},[1174,134685,134686],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[1174,134688,134689],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[1188,134691,134693],{"id":134692},"_1214-案例收获","12.1.4 案例收获",[269,134695],{"style":127353,"src":134696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,134698,134699],{},"问题：没做出来动态效果，使用hover没实现",[19,134701,134702],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[29,134704,134705],{"className":127497,"code":132929,"language":127499,"meta":34,"style":34},[36,134706,134707,134711,134725,134729,134743,134747,134761,134765,134779,134783],{"__ignoreMap":34},[39,134708,134709],{"class":41,"line":42},[39,134710,132936],{"class":102},[39,134712,134713,134715,134717,134719,134721,134723],{"class":41,"line":74},[39,134714,132941],{"class":3021},[39,134716,80861],{"class":45},[39,134718,129857],{"class":56},[39,134720,52491],{"class":45},[39,134722,132950],{"class":56},[39,134724,130427],{"class":45},[39,134726,134727],{"class":41,"line":99},[39,134728,132957],{"class":102},[39,134730,134731,134733,134735,134737,134739,134741],{"class":41,"line":106},[39,134732,132962],{"class":3021},[39,134734,80861],{"class":45},[39,134736,129857],{"class":56},[39,134738,52491],{"class":45},[39,134740,55818],{"class":56},[39,134742,130427],{"class":45},[39,134744,134745],{"class":41,"line":112},[39,134746,132977],{"class":102},[39,134748,134749,134751,134753,134755,134757,134759],{"class":41,"line":118},[39,134750,132982],{"class":3021},[39,134752,80861],{"class":45},[39,134754,129857],{"class":56},[39,134756,52491],{"class":45},[39,134758,55885],{"class":56},[39,134760,130427],{"class":45},[39,134762,134763],{"class":41,"line":413},[39,134764,132997],{"class":102},[39,134766,134767,134769,134771,134773,134775,134777],{"class":41,"line":419},[39,134768,133002],{"class":3021},[39,134770,80861],{"class":45},[39,134772,129857],{"class":56},[39,134774,52491],{"class":45},[39,134776,87287],{"class":56},[39,134778,130427],{"class":45},[39,134780,134781],{"class":41,"line":425},[39,134782,133017],{"class":102},[39,134784,134785,134787,134789,134791,134793,134795],{"class":41,"line":443},[39,134786,133022],{"class":3021},[39,134788,80861],{"class":45},[39,134790,129857],{"class":56},[39,134792,52491],{"class":45},[39,134794,133031],{"class":56},[39,134796,130427],{"class":45},[19,134798,134799],{},"完整代码：",[29,134801,134802],{"className":127497,"code":132929,"language":127499,"meta":34,"style":34},[36,134803,134804,134808,134822,134826,134840,134844,134858,134862,134876,134880],{"__ignoreMap":34},[39,134805,134806],{"class":41,"line":42},[39,134807,132936],{"class":102},[39,134809,134810,134812,134814,134816,134818,134820],{"class":41,"line":74},[39,134811,132941],{"class":3021},[39,134813,80861],{"class":45},[39,134815,129857],{"class":56},[39,134817,52491],{"class":45},[39,134819,132950],{"class":56},[39,134821,130427],{"class":45},[39,134823,134824],{"class":41,"line":99},[39,134825,132957],{"class":102},[39,134827,134828,134830,134832,134834,134836,134838],{"class":41,"line":106},[39,134829,132962],{"class":3021},[39,134831,80861],{"class":45},[39,134833,129857],{"class":56},[39,134835,52491],{"class":45},[39,134837,55818],{"class":56},[39,134839,130427],{"class":45},[39,134841,134842],{"class":41,"line":112},[39,134843,132977],{"class":102},[39,134845,134846,134848,134850,134852,134854,134856],{"class":41,"line":118},[39,134847,132982],{"class":3021},[39,134849,80861],{"class":45},[39,134851,129857],{"class":56},[39,134853,52491],{"class":45},[39,134855,55885],{"class":56},[39,134857,130427],{"class":45},[39,134859,134860],{"class":41,"line":413},[39,134861,132997],{"class":102},[39,134863,134864,134866,134868,134870,134872,134874],{"class":41,"line":419},[39,134865,133002],{"class":3021},[39,134867,80861],{"class":45},[39,134869,129857],{"class":56},[39,134871,52491],{"class":45},[39,134873,87287],{"class":56},[39,134875,130427],{"class":45},[39,134877,134878],{"class":41,"line":425},[39,134879,133017],{"class":102},[39,134881,134882,134884,134886,134888,134890,134892],{"class":41,"line":443},[39,134883,133022],{"class":3021},[39,134885,80861],{"class":45},[39,134887,129857],{"class":56},[39,134889,52491],{"class":45},[39,134891,133031],{"class":56},[39,134893,130427],{"class":45},[19,134895,134896],{},"分布思路重点详解：",[29,134898,134899],{"className":127497,"code":132929,"language":127499,"meta":34,"style":34},[36,134900,134901,134905,134919,134923,134937,134941,134955,134959,134973,134977],{"__ignoreMap":34},[39,134902,134903],{"class":41,"line":42},[39,134904,132936],{"class":102},[39,134906,134907,134909,134911,134913,134915,134917],{"class":41,"line":74},[39,134908,132941],{"class":3021},[39,134910,80861],{"class":45},[39,134912,129857],{"class":56},[39,134914,52491],{"class":45},[39,134916,132950],{"class":56},[39,134918,130427],{"class":45},[39,134920,134921],{"class":41,"line":99},[39,134922,132957],{"class":102},[39,134924,134925,134927,134929,134931,134933,134935],{"class":41,"line":106},[39,134926,132962],{"class":3021},[39,134928,80861],{"class":45},[39,134930,129857],{"class":56},[39,134932,52491],{"class":45},[39,134934,55818],{"class":56},[39,134936,130427],{"class":45},[39,134938,134939],{"class":41,"line":112},[39,134940,132977],{"class":102},[39,134942,134943,134945,134947,134949,134951,134953],{"class":41,"line":118},[39,134944,132982],{"class":3021},[39,134946,80861],{"class":45},[39,134948,129857],{"class":56},[39,134950,52491],{"class":45},[39,134952,55885],{"class":56},[39,134954,130427],{"class":45},[39,134956,134957],{"class":41,"line":413},[39,134958,132997],{"class":102},[39,134960,134961,134963,134965,134967,134969,134971],{"class":41,"line":419},[39,134962,133002],{"class":3021},[39,134964,80861],{"class":45},[39,134966,129857],{"class":56},[39,134968,52491],{"class":45},[39,134970,87287],{"class":56},[39,134972,130427],{"class":45},[39,134974,134975],{"class":41,"line":425},[39,134976,133017],{"class":102},[39,134978,134979,134981,134983,134985,134987,134989],{"class":41,"line":443},[39,134980,133022],{"class":3021},[39,134982,80861],{"class":45},[39,134984,129857],{"class":56},[39,134986,52491],{"class":45},[39,134988,133031],{"class":56},[39,134990,130427],{"class":45},[269,134992],{"style":127353,"src":134993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134995,134996],{},"图片太大，盒子太小，此时需要修改图片的大小",[29,134998,135000],{"className":128244,"code":134999,"language":128246,"meta":34,"style":34},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[36,135001,135002],{"__ignoreMap":34},[39,135003,135004,135006,135008,135010,135012,135015,135017,135019,135022,135025,135027,135030],{"class":41,"line":42},[39,135005,2108],{"class":45},[39,135007,269],{"class":52354},[39,135009,56293],{"class":3021},[39,135011,50],{"class":45},[39,135013,135014],{"class":1319},"\"images\u002Fpic.jpg\"",[39,135016,56301],{"class":3021},[39,135018,50],{"class":45},[39,135020,135021],{"class":1319},"\"描述文字\"",[39,135023,135024],{"class":3021}," title",[39,135026,50],{"class":45},[39,135028,135029],{"class":1319},"\"悬停提示\"",[39,135031,52361],{"class":45},[269,135033],{"style":127353,"src":135034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135036,135037],{},"制造遮罩层",[29,135039,135040],{"className":128244,"code":134999,"language":128246,"meta":34,"style":34},[36,135041,135042],{"__ignoreMap":34},[39,135043,135044,135046,135048,135050,135052,135054,135056,135058,135060,135062,135064,135066],{"class":41,"line":42},[39,135045,2108],{"class":45},[39,135047,269],{"class":52354},[39,135049,56293],{"class":3021},[39,135051,50],{"class":45},[39,135053,135014],{"class":1319},[39,135055,56301],{"class":3021},[39,135057,50],{"class":45},[39,135059,135021],{"class":1319},[39,135061,135024],{"class":3021},[39,135063,50],{"class":45},[39,135065,135029],{"class":1319},[39,135067,52361],{"class":45},[19,135069,135070],{},"此时是这样的为标准流",[269,135072],{"style":127353,"src":135073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135075,135076],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135078,135079],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135081,135082],{},"让他在中间，用center(background-position)",[19,135084,135085],{},"将需要变的尽可能放到一个盒子中",[19,135087,135088],{},"放大盒子上内部盒子发生变化",[29,135090,135092],{"className":127497,"code":135091,"language":127499,"meta":34,"style":34},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[36,135093,135094,135100,135110,135114,135121,135131,135143,135155],{"__ignoreMap":34},[39,135095,135096,135098],{"class":41,"line":42},[39,135097,128564],{"class":3021},[39,135099,16628],{"class":45},[39,135101,135102,135104,135106,135108],{"class":41,"line":74},[39,135103,133303],{"class":56},[39,135105,52491],{"class":45},[39,135107,55818],{"class":56},[39,135109,2359],{"class":45},[39,135111,135112],{"class":41,"line":99},[39,135113,2630],{"class":45},[39,135115,135116,135119],{"class":41,"line":106},[39,135117,135118],{"class":3021},".child",[39,135120,16628],{"class":45},[39,135122,135123,135125,135127,135129],{"class":41,"line":112},[39,135124,133303],{"class":56},[39,135126,52491],{"class":45},[39,135128,55885],{"class":56},[39,135130,2359],{"class":45},[39,135132,135133,135135,135137,135139,135141],{"class":41,"line":118},[39,135134,133317],{"class":56},[39,135136,52491],{"class":45},[39,135138,1855],{"class":56},[39,135140,1534],{"class":49},[39,135142,2359],{"class":45},[39,135144,135145,135147,135149,135151,135153],{"class":41,"line":413},[39,135146,133334],{"class":56},[39,135148,52491],{"class":45},[39,135150,1855],{"class":56},[39,135152,1534],{"class":49},[39,135154,2359],{"class":45},[39,135156,135157],{"class":41,"line":419},[39,135158,2630],{"class":45},[19,135160,135161],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135163,135165],{"id":135164},"_122-精灵图","12.2 精灵图",[1188,135167,135169],{"id":135168},"_1221-理解","12.2.1 理解",[1171,135171,135172,135190],{},[1174,135173,135174,135175,133403,135178,135181,135182,135185,135186,135189],{},"目的： ",[304,135176,135177],{},"为了有效地减少服务器接收和发送请求的次数",[304,135179,135180],{},"提高"," 页面的 ",[304,135183,135184],{},"加载速度"," ，出现了 ",[304,135187,135188],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[1174,135191,135192,135193,135195,135196,135198,135199,135201,135202,135204,135205,135207,135208,135210],{},"使用精灵图核心：",[54770,135194],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54770,135197],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54770,135200],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54770,135203],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54770,135206],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54770,135209],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[1188,135212,135214],{"id":135213},"_1222-扒图","12.2.2 扒图",[29,135216,135219],{"className":135217,"code":135218,"language":6244},[6242],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[36,135220,135218],{"__ignoreMap":34},[269,135222],{"style":127353,"src":135223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[269,135225],{"style":127353,"src":135226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[1188,135228,135230],{"id":135229},"_1223-精灵图的实现","12.2.3 精灵图的实现",[269,135232],{"style":127353,"src":135233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135235,135236],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[269,135238],{"style":127353,"src":135239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[29,135241,135243],{"className":127497,"code":135242,"language":127499,"meta":34,"style":34},"\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",[36,135244,135245,135250,135257,135269,135281,135300,135317],{"__ignoreMap":34},[39,135246,135247],{"class":41,"line":42},[39,135248,135249],{"class":102},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[39,135251,135252,135255],{"class":41,"line":74},[39,135253,135254],{"class":3021},".icon",[39,135256,16628],{"class":45},[39,135258,135259,135261,135263,135265,135267],{"class":41,"line":99},[39,135260,71622],{"class":56},[39,135262,52491],{"class":45},[39,135264,1898],{"class":56},[39,135266,52546],{"class":49},[39,135268,2359],{"class":45},[39,135270,135271,135273,135275,135277,135279],{"class":41,"line":106},[39,135272,71842],{"class":56},[39,135274,52491],{"class":45},[39,135276,1898],{"class":56},[39,135278,52546],{"class":49},[39,135280,2359],{"class":45},[39,135282,135283,135285,135287,135289,135291,135294,135296,135298],{"class":41,"line":112},[39,135284,71665],{"class":56},[39,135286,52491],{"class":45},[39,135288,62780],{"class":56},[39,135290,1221],{"class":45},[39,135292,135293],{"class":254},"sprites.png",[39,135295,14770],{"class":45},[39,135297,62790],{"class":56},[39,135299,2359],{"class":45},[39,135301,135302,135304,135306,135308,135310,135313,135315],{"class":41,"line":118},[39,135303,129757],{"class":56},[39,135305,52491],{"class":45},[39,135307,52817],{"class":56},[39,135309,52546],{"class":49},[39,135311,135312],{"class":56}," -20",[39,135314,52546],{"class":49},[39,135316,2359],{"class":45},[39,135318,135319],{"class":41,"line":413},[39,135320,2630],{"class":45},[269,135322],{"style":127353,"src":135323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,135325,135326],{},"在前端中坐标轴的正方向是右和下",[14,135328,135330],{"id":135329},"_123-字体图标","12.3 字体图标",[1188,135332,135334],{"id":135333},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,135336,135337],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,135339,135340],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,135342,135343],{},"1.图片文件还是比较大的。",[19,135345,135346],{},"2.图片本身放大和缩小会失真。",[19,135348,135349],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,135351,135352,135353,26797],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[304,135354,135355],{},"字体图标 iconfont",[19,135357,135358,135361,135362,29442],{},[304,135359,135360],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[304,135363,135364],{},"展示的是图标，本质属于字体",[1188,135366,135368],{"id":135367},"_1232-字体图标的优点","12.3.2 字体图标的优点",[2205,135370,135371,135376,135379,135382,135385],{},[1174,135372,135373,135375],{},[304,135374,26933],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[1174,135377,135378],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[1174,135380,135381],{},"兼容性：几乎支持所有的浏览器，请放心使用",[1174,135383,135384],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[1174,135386,135387],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[1188,135389,135391],{"id":135390},"_1233-字体库下载网站","12.3.3 字体库下载网站",[2205,135393,135394],{},[1174,135395,135396,135397],{},"icomoon字体库：",[46,135398,135401],{"href":135399,"rel":135400},"http:\u002F\u002Ficomoon.io\u002F",[24921],"http:\u002F\u002Ficomoon.io",[19,135403,135404],{},"进去之后点icomoon app",[269,135406],{"style":127353,"src":135407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,135409,135410],{},"可以对其编辑：",[269,135412],{"style":127353,"src":135413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,135415,135416],{},"生成字体：",[269,135418],{"style":127353,"src":135419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,135421,135422],{},"下载：",[269,135424],{"style":127353,"src":135425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[2205,135427,135428],{},[1174,135429,135430,135431],{},"阿里iconfont字体库： ",[46,135432,135433],{"href":135433,"rel":135434},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24921],[1188,135436,135438],{"id":135437},"_1234-字体图标的引入","12.3.4 字体图标的引入",[1171,135440,135441],{},[1174,135442,135443,135444,135447],{},"把下载包里面的 ",[304,135445,135446],{},"fonts"," 文件夹放入页面根目录下",[269,135449],{"style":127353,"src":135450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[1171,135452,135453],{"start":74},[1174,135454,135455],{},"字体文件格式",[1352,135457,135458,135467],{},[1355,135459,135460],{},[1358,135461,135462,135465],{},[1361,135463,135464],{"align":24792},"格式",[1361,135466,24796],{"align":24792},[1398,135468,135469,135479,135489,135499],{},[1358,135470,135471,135476],{},[1403,135472,135473],{"align":24792},[304,135474,135475],{},".ttf",[1403,135477,135478],{"align":24792},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[1358,135480,135481,135486],{},[1403,135482,135483],{"align":24792},[304,135484,135485],{},".woff",[1403,135487,135488],{"align":24792},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[1358,135490,135491,135496],{},[1403,135492,135493],{"align":24792},[304,135494,135495],{},".eot",[1403,135497,135498],{"align":24792},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[1358,135500,135501,135506],{},[1403,135502,135503],{"align":24792},[304,135504,135505],{},"svg",[1403,135507,135508],{"align":24792},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[1171,135510,135511],{"start":99},[1174,135512,135513],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[29,135515,135517],{"className":127497,"code":135516,"language":127499,"meta":34,"style":34},"\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",[36,135518,135519,135524,135531,135543,135559,135584,135605,135625,135645,135649,135655,135665,135676],{"__ignoreMap":34},[39,135520,135521],{"class":41,"line":42},[39,135522,135523],{"class":102},"\u002F* 引入字体图标 *\u002F\n",[39,135525,135526,135529],{"class":41,"line":74},[39,135527,135528],{"class":49},"@font-face",[39,135530,16628],{"class":45},[39,135532,135533,135536,135538,135541],{"class":41,"line":99},[39,135534,135535],{"class":56},"  font-family",[39,135537,52491],{"class":45},[39,135539,135540],{"class":1319},"'icomoon'",[39,135542,2359],{"class":45},[39,135544,135545,135548,135550,135552,135554,135557],{"class":41,"line":106},[39,135546,135547],{"class":56},"  src",[39,135549,52491],{"class":45},[39,135551,62780],{"class":56},[39,135553,1221],{"class":45},[39,135555,135556],{"class":1319},"'fonts\u002Ficomoon.eot'",[39,135558,3777],{"class":45},[39,135560,135561,135563,135565,135567,135569,135572,135574,135577,135579,135582],{"class":41,"line":112},[39,135562,135547],{"class":56},[39,135564,52491],{"class":45},[39,135566,62780],{"class":56},[39,135568,1221],{"class":45},[39,135570,135571],{"class":1319},"'fonts\u002Ficomoon.eot?#iefix'",[39,135573,14770],{"class":45},[39,135575,135576],{"class":56},"format",[39,135578,1221],{"class":45},[39,135580,135581],{"class":1319},"'embedded-opentype'",[39,135583,39102],{"class":45},[39,135585,135586,135589,135591,135594,135596,135598,135600,135603],{"class":41,"line":118},[39,135587,135588],{"class":56},"       url",[39,135590,1221],{"class":45},[39,135592,135593],{"class":1319},"'fonts\u002Ficomoon.woff'",[39,135595,14770],{"class":45},[39,135597,135576],{"class":56},[39,135599,1221],{"class":45},[39,135601,135602],{"class":1319},"'woff'",[39,135604,39102],{"class":45},[39,135606,135607,135609,135611,135614,135616,135618,135620,135623],{"class":41,"line":413},[39,135608,135588],{"class":56},[39,135610,1221],{"class":45},[39,135612,135613],{"class":1319},"'fonts\u002Ficomoon.ttf'",[39,135615,14770],{"class":45},[39,135617,135576],{"class":56},[39,135619,1221],{"class":45},[39,135621,135622],{"class":1319},"'truetype'",[39,135624,39102],{"class":45},[39,135626,135627,135629,135631,135634,135636,135638,135640,135643],{"class":41,"line":419},[39,135628,135588],{"class":56},[39,135630,1221],{"class":45},[39,135632,135633],{"class":1319},"'fonts\u002Ficomoon.svg#icomoon'",[39,135635,14770],{"class":45},[39,135637,135576],{"class":56},[39,135639,1221],{"class":45},[39,135641,135642],{"class":1319},"'svg'",[39,135644,3777],{"class":45},[39,135646,135647],{"class":41,"line":425},[39,135648,2630],{"class":45},[39,135650,135651,135653],{"class":41,"line":443},[39,135652,135254],{"class":3021},[39,135654,16628],{"class":45},[39,135656,135657,135659,135661,135663],{"class":41,"line":449},[39,135658,135535],{"class":56},[39,135660,52491],{"class":45},[39,135662,135540],{"class":1319},[39,135664,2359],{"class":45},[39,135666,135667,135670,135672,135674],{"class":41,"line":455},[39,135668,135669],{"class":56},"  font-style",[39,135671,52491],{"class":45},[39,135673,64895],{"class":56},[39,135675,2359],{"class":45},[39,135677,135678],{"class":41,"line":461},[39,135679,2630],{"class":45},[19,135681,135682],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[269,135684],{"style":127353,"src":135685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[1171,135687,135688],{"start":106},[1174,135689,135690],{},"添加字体",[269,135692],{"style":127353,"src":135693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,135695,135696],{},"复制：",[269,135698],{"style":127353,"src":135699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,135701,135702],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[1171,135704,135705],{"start":112},[1174,135706,135707],{},"代码展示：",[29,135709,135710],{"className":127497,"code":135516,"language":127499,"meta":34,"style":34},[36,135711,135712,135716,135722,135732,135746,135768,135786,135804,135822,135826,135832,135842,135852],{"__ignoreMap":34},[39,135713,135714],{"class":41,"line":42},[39,135715,135523],{"class":102},[39,135717,135718,135720],{"class":41,"line":74},[39,135719,135528],{"class":49},[39,135721,16628],{"class":45},[39,135723,135724,135726,135728,135730],{"class":41,"line":99},[39,135725,135535],{"class":56},[39,135727,52491],{"class":45},[39,135729,135540],{"class":1319},[39,135731,2359],{"class":45},[39,135733,135734,135736,135738,135740,135742,135744],{"class":41,"line":106},[39,135735,135547],{"class":56},[39,135737,52491],{"class":45},[39,135739,62780],{"class":56},[39,135741,1221],{"class":45},[39,135743,135556],{"class":1319},[39,135745,3777],{"class":45},[39,135747,135748,135750,135752,135754,135756,135758,135760,135762,135764,135766],{"class":41,"line":112},[39,135749,135547],{"class":56},[39,135751,52491],{"class":45},[39,135753,62780],{"class":56},[39,135755,1221],{"class":45},[39,135757,135571],{"class":1319},[39,135759,14770],{"class":45},[39,135761,135576],{"class":56},[39,135763,1221],{"class":45},[39,135765,135581],{"class":1319},[39,135767,39102],{"class":45},[39,135769,135770,135772,135774,135776,135778,135780,135782,135784],{"class":41,"line":118},[39,135771,135588],{"class":56},[39,135773,1221],{"class":45},[39,135775,135593],{"class":1319},[39,135777,14770],{"class":45},[39,135779,135576],{"class":56},[39,135781,1221],{"class":45},[39,135783,135602],{"class":1319},[39,135785,39102],{"class":45},[39,135787,135788,135790,135792,135794,135796,135798,135800,135802],{"class":41,"line":413},[39,135789,135588],{"class":56},[39,135791,1221],{"class":45},[39,135793,135613],{"class":1319},[39,135795,14770],{"class":45},[39,135797,135576],{"class":56},[39,135799,1221],{"class":45},[39,135801,135622],{"class":1319},[39,135803,39102],{"class":45},[39,135805,135806,135808,135810,135812,135814,135816,135818,135820],{"class":41,"line":419},[39,135807,135588],{"class":56},[39,135809,1221],{"class":45},[39,135811,135633],{"class":1319},[39,135813,14770],{"class":45},[39,135815,135576],{"class":56},[39,135817,1221],{"class":45},[39,135819,135642],{"class":1319},[39,135821,3777],{"class":45},[39,135823,135824],{"class":41,"line":425},[39,135825,2630],{"class":45},[39,135827,135828,135830],{"class":41,"line":443},[39,135829,135254],{"class":3021},[39,135831,16628],{"class":45},[39,135833,135834,135836,135838,135840],{"class":41,"line":449},[39,135835,135535],{"class":56},[39,135837,52491],{"class":45},[39,135839,135540],{"class":1319},[39,135841,2359],{"class":45},[39,135843,135844,135846,135848,135850],{"class":41,"line":455},[39,135845,135669],{"class":56},[39,135847,52491],{"class":45},[39,135849,64895],{"class":56},[39,135851,2359],{"class":45},[39,135853,135854],{"class":41,"line":461},[39,135855,2630],{"class":45},[269,135857],{"style":127353,"src":135858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,135860,135861],{},"更加细节展示：",[1171,135863,135864],{},[1174,135865,135866],{},"html 标签内添加小图标",[269,135868],{"style":127353,"src":135869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[1171,135871,135872],{"start":74},[1174,135873,135874],{},"给标签定义字体",[29,135876,135877],{"className":128244,"code":131601,"language":128246,"meta":34,"style":34},[36,135878,135879,135883,135897,135901],{"__ignoreMap":34},[39,135880,135881],{"class":41,"line":42},[39,135882,131608],{"class":102},[39,135884,135885,135887,135889,135891,135893,135895],{"class":41,"line":74},[39,135886,2108],{"class":45},[39,135888,52665],{"class":52354},[39,135890,54540],{"class":3021},[39,135892,50],{"class":45},[39,135894,131621],{"class":1319},[39,135896,52361],{"class":45},[39,135898,135899],{"class":41,"line":99},[39,135900,131628],{"class":45},[39,135902,135903,135905,135907],{"class":41,"line":106},[39,135904,52839],{"class":45},[39,135906,52665],{"class":52354},[39,135908,52361],{"class":45},[19,135910,135911],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[269,135913],{"style":127353,"src":135914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[1188,135916,135918],{"id":135917},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135920,135921],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135923,135924,135925,135928],{},"把压缩包里面的 ",[304,135926,135927],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135930,135931],{},"打开网站，点下方：",[269,135933],{"style":127353,"src":135934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[269,135936],{"style":127353,"src":135937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[269,135939],{"style":127353,"src":135940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135942,135943],{},"点yes重新加载",[19,135945,135946],{},"然后重复之前的操作就可以实现了",[19,135948,135949],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[1188,135951,135953],{"id":135952},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[269,135955],{"style":127353,"src":135956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1133,135958,135959],{},"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":34,"searchDepth":74,"depth":74,"links":135961},[135962,135968,135973],{"id":134565,"depth":74,"text":134566,"children":135963},[135964,135965,135966,135967],{"id":134577,"depth":99,"text":134578},{"id":134606,"depth":99,"text":134607},{"id":134634,"depth":99,"text":134635},{"id":134692,"depth":99,"text":134693},{"id":135164,"depth":74,"text":135165,"children":135969},[135970,135971,135972],{"id":135168,"depth":99,"text":135169},{"id":135213,"depth":99,"text":135214},{"id":135229,"depth":99,"text":135230},{"id":135329,"depth":74,"text":135330,"children":135974},[135975,135976,135977,135978,135979,135980],{"id":135333,"depth":99,"text":135334},{"id":135367,"depth":99,"text":135368},{"id":135390,"depth":99,"text":135391},{"id":135437,"depth":99,"text":135438},{"id":135917,"depth":99,"text":135918},{"id":135952,"depth":99,"text":135953},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134557,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135987,"title":135988,"body":135989,"description":1142,"extension":1143,"meta":137216,"navigation":1145,"path":137217,"seo":137218,"stem":137219,"__hash__":137220},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135990,"toc":137197},[135991,135994,135998,136001,136015,136083,136113,136116,136120,136124,136226,136273,136277,136280,136283,136317,136320,136323,136326,136329,136332,136335,136338,136340,136343,136346,136349,136352,136355,136358,136361,136389,136392,136396,136399,136406,136409,136412,136438,136441,136445,136448,136451,136458,136462,136465,136467,136499,136502,136505,136517,136523,136526,136529,136532,136534,136538,136541,136544,136547,136592,136596,136598,136601,136608,136650,136653,136657,136662,136676,136680,136683,136686,136689,136692,136695,136729,136732,136735,136789,136792,136795,136798,136801,136853,136856,136859,136908,136912,136914,136917,136920,136923,136926,136929,136987,136990,136996,136999,137002,137034,137037,137041,137045,137048,137080,137084,137087,137131,137135,137138,137141,137144,137147,137150,137153,137156,137158,137161,137163,137166,137169,137172,137175,137180,137183,137185,137188,137191,137194],[10,135992,135988],{"id":135993},"_13-界面样式与布局技巧",[14,135995,135997],{"id":135996},"_131-css三角","13.1 css三角",[19,135999,136000],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[2205,136002,136003,136006,136009,136012],{},[1174,136004,136005],{},"用css 边框可以模拟三角效果",[1174,136007,136008],{},"宽度高度为0",[1174,136010,136011],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[1174,136013,136014],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[29,136016,136018],{"className":127497,"code":136017,"language":127499,"meta":34,"style":34},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[36,136019,136020,136025,136032,136042,136052,136068,136079],{"__ignoreMap":34},[39,136021,136022],{"class":41,"line":42},[39,136023,136024],{"class":102},"\u002F* CSS 实现三角形 *\u002F\n",[39,136026,136027,136030],{"class":41,"line":74},[39,136028,136029],{"class":3021},".triangle",[39,136031,16628],{"class":45},[39,136033,136034,136036,136038,136040],{"class":41,"line":99},[39,136035,71622],{"class":56},[39,136037,52491],{"class":45},[39,136039,260],{"class":56},[39,136041,2359],{"class":45},[39,136043,136044,136046,136048,136050],{"class":41,"line":106},[39,136045,71842],{"class":56},[39,136047,52491],{"class":45},[39,136049,260],{"class":56},[39,136051,2359],{"class":45},[39,136053,136054,136056,136058,136060,136062,136064,136066],{"class":41,"line":112},[39,136055,71950],{"class":56},[39,136057,52491],{"class":45},[39,136059,146],{"class":56},[39,136061,52546],{"class":49},[39,136063,52575],{"class":56},[39,136065,65045],{"class":56},[39,136067,2359],{"class":45},[39,136069,136070,136073,136075,136077],{"class":41,"line":118},[39,136071,136072],{"class":56},"  border-bottom-color",[39,136074,52491],{"class":45},[39,136076,63423],{"class":56},[39,136078,2359],{"class":45},[39,136080,136081],{"class":41,"line":413},[39,136082,2630],{"class":45},[29,136084,136085],{"className":127497,"code":131654,"language":127499,"meta":34,"style":34},[36,136086,136087,136093,136109],{"__ignoreMap":34},[39,136088,136089,136091],{"class":41,"line":42},[39,136090,52665],{"class":52354},[39,136092,16628],{"class":45},[39,136094,136095,136097,136099,136101,136103,136105,136107],{"class":41,"line":74},[39,136096,71950],{"class":56},[39,136098,52491],{"class":45},[39,136100,57],{"class":56},[39,136102,52546],{"class":49},[39,136104,52575],{"class":56},[39,136106,130889],{"class":56},[39,136108,2359],{"class":45},[39,136110,136111],{"class":41,"line":99},[39,136112,2630],{"class":45},[269,136114],{"style":127353,"src":136115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136117,136119],{"id":136118},"_132-css用户界面样式","13.2 css用户界面样式",[1188,136121,136123],{"id":136122},"_1321-鼠标样式","13.2.1 鼠标样式",[29,136125,136127],{"className":127497,"code":136126,"language":127499,"meta":34,"style":34},"\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",[36,136128,136129,136134,136153,136171,136190,136207],{"__ignoreMap":34},[39,136130,136131],{"class":41,"line":42},[39,136132,136133],{"class":102},"\u002F* 鼠标样式 *\u002F\n",[39,136135,136136,136138,136140,136143,136145,136147,136150],{"class":41,"line":74},[39,136137,52665],{"class":52354},[39,136139,80861],{"class":45},[39,136141,136142],{"class":56},"cursor",[39,136144,52491],{"class":45},[39,136146,63084],{"class":56},[39,136148,136149],{"class":45},"; }   ",[39,136151,136152],{"class":102},"\u002F* 手型 *\u002F\n",[39,136154,136155,136157,136159,136161,136163,136166,136168],{"class":41,"line":99},[39,136156,52665],{"class":52354},[39,136158,80861],{"class":45},[39,136160,136142],{"class":56},[39,136162,52491],{"class":45},[39,136164,136165],{"class":56},"default",[39,136167,136149],{"class":45},[39,136169,136170],{"class":102},"\u002F* 默认 *\u002F\n",[39,136172,136173,136175,136177,136179,136181,136184,136187],{"class":41,"line":106},[39,136174,52665],{"class":52354},[39,136176,80861],{"class":45},[39,136178,136142],{"class":56},[39,136180,52491],{"class":45},[39,136182,136183],{"class":56},"move",[39,136185,136186],{"class":45},"; }      ",[39,136188,136189],{"class":102},"\u002F* 移动 *\u002F\n",[39,136191,136192,136194,136196,136198,136200,136202,136204],{"class":41,"line":112},[39,136193,52665],{"class":52354},[39,136195,80861],{"class":45},[39,136197,136142],{"class":56},[39,136199,52491],{"class":45},[39,136201,6244],{"class":56},[39,136203,136186],{"class":45},[39,136205,136206],{"class":102},"\u002F* 文本 *\u002F\n",[39,136208,136209,136211,136213,136215,136217,136220,136223],{"class":41,"line":118},[39,136210,52665],{"class":52354},[39,136212,80861],{"class":45},[39,136214,136142],{"class":56},[39,136216,52491],{"class":45},[39,136218,136219],{"class":56},"not-allowed",[39,136221,136222],{"class":45},"; } ",[39,136224,136225],{"class":102},"\u002F* 禁止 *\u002F\n",[1352,136227,136228,136236],{},[1355,136229,136230],{},[1358,136231,136232,136234],{},[1361,136233,127961],{"align":24792},[1361,136235,28546],{"align":24792},[1398,136237,136238,136245,136252,136259,136266],{},[1358,136239,136240,136242],{},[1403,136241,136165],{"align":24792},[1403,136243,136244],{"align":24792},"小白 默认",[1358,136246,136247,136249],{},[1403,136248,63084],{"align":24792},[1403,136250,136251],{"align":24792},"小手",[1358,136253,136254,136256],{},[1403,136255,136183],{"align":24792},[1403,136257,136258],{"align":24792},"移动",[1358,136260,136261,136263],{},[1403,136262,6244],{"align":24792},[1403,136264,136265],{"align":24792},"文本",[1358,136267,136268,136270],{},[1403,136269,136219],{"align":24792},[1403,136271,136272],{"align":24792},"禁止",[1188,136274,136276],{"id":136275},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136278,136279],{},"去除表单轮廓线",[19,136281,136282],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[29,136284,136285],{"className":127497,"code":130861,"language":127499,"meta":34,"style":34},[36,136286,136287,136291,136297,136313],{"__ignoreMap":34},[39,136288,136289],{"class":41,"line":42},[39,136290,130868],{"class":102},[39,136292,136293,136295],{"class":41,"line":74},[39,136294,52665],{"class":52354},[39,136296,16628],{"class":45},[39,136298,136299,136301,136303,136305,136307,136309,136311],{"class":41,"line":99},[39,136300,71950],{"class":56},[39,136302,52491],{"class":45},[39,136304,57],{"class":56},[39,136306,52546],{"class":49},[39,136308,52575],{"class":56},[39,136310,130889],{"class":56},[39,136312,2359],{"class":45},[39,136314,136315],{"class":41,"line":106},[39,136316,2630],{"class":45},[19,136318,136319],{},"文本域：",[269,136321],{"style":127353,"src":136322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,136324,136325],{},"此时会有一个空白区域",[269,136327],{"style":127353,"src":136328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,136330,136331],{},"写在同一行就不会出现这个问题",[269,136333],{"style":127353,"src":136334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,136336,136337],{},"文本域是行内块元素，一定记住！！！",[19,136339,265],{},[269,136341],{"style":127353,"src":136342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,136344,136345],{},"文本域尽量放在一行",[19,136347,136348],{},"知识回顾：cols是列，rols是行",[269,136350],{"style":127353,"src":136351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,136353,136354],{},"它可以进行拖动，显然这是我们不愿意看到的",[269,136356],{"style":127353,"src":136357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,136359,136360],{},"使用resize进行解决",[29,136362,136364],{"className":127497,"code":136363,"language":127499,"meta":34,"style":34},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[36,136365,136366,136372,136385],{"__ignoreMap":34},[39,136367,136368,136370],{"class":41,"line":42},[39,136369,54875],{"class":52354},[39,136371,16628],{"class":45},[39,136373,136374,136376,136378,136380,136382],{"class":41,"line":74},[39,136375,71852],{"class":56},[39,136377,52491],{"class":45},[39,136379,55791],{"class":56},[39,136381,131360],{"class":45},[39,136383,136384],{"class":102},"\u002F* 取消表单轮廓线 *\u002F\n",[39,136386,136387],{"class":41,"line":99},[39,136388,2630],{"class":45},[19,136390,136391],{},"此时就无法通过右下方实现拖动了",[1188,136393,136395],{"id":136394},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,136397,136398],{},"实现一个盒子中的文字和图片对齐",[19,136400,136401,136402,136405],{},"用于设置一个元素的 ",[304,136403,136404],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,136407,136408],{},"图片和文字默认是基线对齐",[269,136410],{"style":127353,"src":136411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[29,136413,136414],{"className":127497,"code":136363,"language":127499,"meta":34,"style":34},[36,136415,136416,136422,136434],{"__ignoreMap":34},[39,136417,136418,136420],{"class":41,"line":42},[39,136419,54875],{"class":52354},[39,136421,16628],{"class":45},[39,136423,136424,136426,136428,136430,136432],{"class":41,"line":74},[39,136425,71852],{"class":56},[39,136427,52491],{"class":45},[39,136429,55791],{"class":56},[39,136431,131360],{"class":45},[39,136433,136384],{"class":102},[39,136435,136436],{"class":41,"line":99},[39,136437,2630],{"class":45},[269,136439],{"style":127353,"src":136440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23054,136442,136444],{"id":136443},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,136446,136447],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[269,136449],{"style":127353,"src":136450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,136452,136453,136454,136457],{},"此时可以给图片、表单这些行内块元素的 ",[304,136455,136456],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23054,136459,136461],{"id":136460},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,136463,136464],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,136466,15689],{},[29,136468,136470],{"className":127497,"code":136469,"language":127499,"meta":34,"style":34},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[36,136471,136472,136477,136483,136495],{"__ignoreMap":34},[39,136473,136474],{"class":41,"line":42},[39,136475,136476],{"class":102},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[39,136478,136479,136481],{"class":41,"line":74},[39,136480,269],{"class":52354},[39,136482,16628],{"class":45},[39,136484,136485,136488,136490,136493],{"class":41,"line":99},[39,136486,136487],{"class":56},"  vertical-align",[39,136489,52491],{"class":45},[39,136491,136492],{"class":56},"middle",[39,136494,2359],{"class":45},[39,136496,136497],{"class":41,"line":106},[39,136498,2630],{"class":45},[269,136500],{"style":127353,"src":136501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,136503,136504],{},"主要解决方法有两种：",[1171,136506,136507],{},[1174,136508,136509,136512,136513,136516],{},[304,136510,136511],{},"给图片"," 添加 ",[304,136514,136515],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,136518,136519,136520],{},"2.把图片转换为块级元素 ",[304,136521,136522],{},"display: block",[19,136524,136525],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,136527,136528],{},"img {",[19,136530,136531],{},"vertical-align:middle;",[19,136533,2144],{},[1188,136535,136537],{"id":136536},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,136539,136540],{},"效果：",[269,136542],{"style":127353,"src":136543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,136545,136546],{},"单行文本溢出显示省略号--必须满足三个条件：",[29,136548,136550],{"className":127497,"code":136549,"language":127499,"meta":34,"style":34},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[36,136551,136552,136557,136563,136573,136578,136588],{"__ignoreMap":34},[39,136553,136554],{"class":41,"line":42},[39,136555,136556],{"class":102},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[39,136558,136559,136561],{"class":41,"line":74},[39,136560,269],{"class":52354},[39,136562,16628],{"class":45},[39,136564,136565,136567,136569,136571],{"class":41,"line":99},[39,136566,136487],{"class":56},[39,136568,52491],{"class":45},[39,136570,136492],{"class":56},[39,136572,2359],{"class":45},[39,136574,136575],{"class":41,"line":106},[39,136576,136577],{"class":102},"  \u002F* 或 *\u002F\n",[39,136579,136580,136582,136584,136586],{"class":41,"line":112},[39,136581,129113],{"class":56},[39,136583,52491],{"class":45},[39,136585,61923],{"class":56},[39,136587,2359],{"class":45},[39,136589,136590],{"class":41,"line":118},[39,136591,2630],{"class":45},[1188,136593,136595],{"id":136594},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,136597,136540],{},[269,136599],{"style":127353,"src":136600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,136602,136603,136604,136607],{},"多行文本溢出显示省略号， ",[304,136605,136606],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[29,136609,136610],{"className":127497,"code":136549,"language":127499,"meta":34,"style":34},[36,136611,136612,136616,136622,136632,136636,136646],{"__ignoreMap":34},[39,136613,136614],{"class":41,"line":42},[39,136615,136556],{"class":102},[39,136617,136618,136620],{"class":41,"line":74},[39,136619,269],{"class":52354},[39,136621,16628],{"class":45},[39,136623,136624,136626,136628,136630],{"class":41,"line":99},[39,136625,136487],{"class":56},[39,136627,52491],{"class":45},[39,136629,136492],{"class":56},[39,136631,2359],{"class":45},[39,136633,136634],{"class":41,"line":106},[39,136635,136577],{"class":102},[39,136637,136638,136640,136642,136644],{"class":41,"line":112},[39,136639,129113],{"class":56},[39,136641,52491],{"class":45},[39,136643,61923],{"class":56},[39,136645,2359],{"class":45},[39,136647,136648],{"class":41,"line":118},[39,136649,2630],{"class":45},[19,136651,136652],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,136654,136656],{"id":136655},"_133-常见布局技巧","13.3 常见布局技巧",[19,136658,136659],{},[304,136660,136661],{},"巧妙利用一个技术更快更好的布局：",[1171,136663,136664,136667,136670,136673],{},[1174,136665,136666],{},"margin负值的运用",[1174,136668,136669],{},"文字围绕浮动元素",[1174,136671,136672],{},"行内块的巧妙运用",[1174,136674,136675],{},"CSS三角强化",[1188,136677,136679],{"id":136678},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,136681,136682],{},"应用场景：",[269,136684],{"style":127353,"src":136685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[269,136687],{"style":127353,"src":136688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,136690,136691],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,136693,136694],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[29,136696,136697],{"className":127497,"code":130861,"language":127499,"meta":34,"style":34},[36,136698,136699,136703,136709,136725],{"__ignoreMap":34},[39,136700,136701],{"class":41,"line":42},[39,136702,130868],{"class":102},[39,136704,136705,136707],{"class":41,"line":74},[39,136706,52665],{"class":52354},[39,136708,16628],{"class":45},[39,136710,136711,136713,136715,136717,136719,136721,136723],{"class":41,"line":99},[39,136712,71950],{"class":56},[39,136714,52491],{"class":45},[39,136716,57],{"class":56},[39,136718,52546],{"class":49},[39,136720,52575],{"class":56},[39,136722,130889],{"class":56},[39,136724,2359],{"class":45},[39,136726,136727],{"class":41,"line":106},[39,136728,2630],{"class":45},[269,136730],{"style":127353,"src":136731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,136733,136734],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[29,136736,136738],{"className":127497,"code":136737,"language":127499,"meta":34,"style":34},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[36,136739,136740,136745,136751,136761,136773,136785],{"__ignoreMap":34},[39,136741,136742],{"class":41,"line":42},[39,136743,136744],{"class":102},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[39,136746,136747,136749],{"class":41,"line":74},[39,136748,131345],{"class":3021},[39,136750,16628],{"class":45},[39,136752,136753,136755,136757,136759],{"class":41,"line":99},[39,136754,133303],{"class":56},[39,136756,52491],{"class":45},[39,136758,55818],{"class":56},[39,136760,2359],{"class":45},[39,136762,136763,136765,136767,136769,136771],{"class":41,"line":106},[39,136764,133317],{"class":56},[39,136766,52491],{"class":45},[39,136768,146],{"class":56},[39,136770,52546],{"class":49},[39,136772,2359],{"class":45},[39,136774,136775,136777,136779,136781,136783],{"class":41,"line":112},[39,136776,133334],{"class":56},[39,136778,52491],{"class":45},[39,136780,1898],{"class":56},[39,136782,52546],{"class":49},[39,136784,2359],{"class":45},[39,136786,136787],{"class":41,"line":118},[39,136788,2630],{"class":45},[19,136790,136791],{},"加上上述代码会发现：",[269,136793],{"style":127353,"src":136794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,136796,136797],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,136799,136800],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[29,136802,136803],{"className":127497,"code":136737,"language":127499,"meta":34,"style":34},[36,136804,136805,136809,136815,136825,136837,136849],{"__ignoreMap":34},[39,136806,136807],{"class":41,"line":42},[39,136808,136744],{"class":102},[39,136810,136811,136813],{"class":41,"line":74},[39,136812,131345],{"class":3021},[39,136814,16628],{"class":45},[39,136816,136817,136819,136821,136823],{"class":41,"line":99},[39,136818,133303],{"class":56},[39,136820,52491],{"class":45},[39,136822,55818],{"class":56},[39,136824,2359],{"class":45},[39,136826,136827,136829,136831,136833,136835],{"class":41,"line":106},[39,136828,133317],{"class":56},[39,136830,52491],{"class":45},[39,136832,146],{"class":56},[39,136834,52546],{"class":49},[39,136836,2359],{"class":45},[39,136838,136839,136841,136843,136845,136847],{"class":41,"line":112},[39,136840,133334],{"class":56},[39,136842,52491],{"class":45},[39,136844,1898],{"class":56},[39,136846,52546],{"class":49},[39,136848,2359],{"class":45},[39,136850,136851],{"class":41,"line":118},[39,136852,2630],{"class":45},[19,136854,136855],{},"解决方式2：",[19,136857,136858],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[29,136860,136862],{"className":127497,"code":136861,"language":127499,"meta":34,"style":34},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[36,136863,136864,136870,136880,136892,136904],{"__ignoreMap":34},[39,136865,136866,136868],{"class":41,"line":42},[39,136867,52665],{"class":52354},[39,136869,16628],{"class":45},[39,136871,136872,136874,136876,136878],{"class":41,"line":74},[39,136873,133303],{"class":56},[39,136875,52491],{"class":45},[39,136877,55818],{"class":56},[39,136879,2359],{"class":45},[39,136881,136882,136884,136886,136888,136890],{"class":41,"line":99},[39,136883,133317],{"class":56},[39,136885,52491],{"class":45},[39,136887,146],{"class":56},[39,136889,52546],{"class":49},[39,136891,2359],{"class":45},[39,136893,136894,136896,136898,136900,136902],{"class":41,"line":106},[39,136895,133334],{"class":56},[39,136897,52491],{"class":45},[39,136899,1898],{"class":56},[39,136901,52546],{"class":49},[39,136903,2359],{"class":45},[39,136905,136906],{"class":41,"line":112},[39,136907,2630],{"class":45},[1188,136909,136911],{"id":136910},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136913,136682],{},[269,136915],{"style":127353,"src":136916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136918,136919],{},"实现结构图：",[269,136921],{"style":127353,"src":136922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136924,136925],{},"巧妙运用浮动元素不会压住文字的特性",[19,136927,136928],{},"代码显示：",[29,136930,136932],{"className":127497,"code":136931,"language":127499,"meta":34,"style":34},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[36,136933,136934,136940,136950,136954,136959,136963,136969,136983],{"__ignoreMap":34},[39,136935,136936,136938],{"class":41,"line":42},[39,136937,131345],{"class":3021},[39,136939,16628],{"class":45},[39,136941,136942,136944,136946,136948],{"class":41,"line":74},[39,136943,131977],{"class":56},[39,136945,52491],{"class":45},[39,136947,24792],{"class":56},[39,136949,2359],{"class":45},[39,136951,136952],{"class":41,"line":99},[39,136953,2630],{"class":45},[39,136955,136956],{"class":41,"line":106},[39,136957,136958],{"class":45},"```Css\n",[39,136960,136961],{"class":41,"line":112},[39,136962,131340],{"class":102},[39,136964,136965,136967],{"class":41,"line":118},[39,136966,131345],{"class":3021},[39,136968,16628],{"class":45},[39,136970,136971,136973,136975,136977,136979,136981],{"class":41,"line":413},[39,136972,71524],{"class":56},[39,136974,52491],{"class":45},[39,136976,260],{"class":56},[39,136978,52610],{"class":56},[39,136980,131360],{"class":45},[39,136982,131363],{"class":102},[39,136984,136985],{"class":41,"line":419},[39,136986,2630],{"class":45},[19,136988,136989],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[29,136991,136994],{"className":136992,"code":136993,"language":6244},[6242],"\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",[36,136995,136993],{"__ignoreMap":34},[269,136997],{"style":127353,"src":136998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137000,137001],{},"最终展示结果：",[29,137003,137004],{"className":127497,"code":131333,"language":127499,"meta":34,"style":34},[36,137005,137006,137010,137016,137030],{"__ignoreMap":34},[39,137007,137008],{"class":41,"line":42},[39,137009,131340],{"class":102},[39,137011,137012,137014],{"class":41,"line":74},[39,137013,131345],{"class":3021},[39,137015,16628],{"class":45},[39,137017,137018,137020,137022,137024,137026,137028],{"class":41,"line":99},[39,137019,71524],{"class":56},[39,137021,52491],{"class":45},[39,137023,260],{"class":56},[39,137025,52610],{"class":56},[39,137027,131360],{"class":45},[39,137029,131363],{"class":102},[39,137031,137032],{"class":41,"line":106},[39,137033,2630],{"class":45},[269,137035],{"style":127353,"src":137036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137038,137040],{"id":137039},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[1188,137042,137044],{"id":137043},"_1341-原理","13.4.1 原理",[269,137046],{"style":127353,"src":137047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[29,137049,137050],{"className":127497,"code":131333,"language":127499,"meta":34,"style":34},[36,137051,137052,137056,137062,137076],{"__ignoreMap":34},[39,137053,137054],{"class":41,"line":42},[39,137055,131340],{"class":102},[39,137057,137058,137060],{"class":41,"line":74},[39,137059,131345],{"class":3021},[39,137061,16628],{"class":45},[39,137063,137064,137066,137068,137070,137072,137074],{"class":41,"line":99},[39,137065,71524],{"class":56},[39,137067,52491],{"class":45},[39,137069,260],{"class":56},[39,137071,52610],{"class":56},[39,137073,131360],{"class":45},[39,137075,131363],{"class":102},[39,137077,137078],{"class":41,"line":106},[39,137079,2630],{"class":45},[1188,137081,137083],{"id":137082},"_1342-实例","13.4.2 实例",[269,137085],{"style":127353,"src":137086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[29,137088,137089],{"className":127497,"code":131963,"language":127499,"meta":34,"style":34},[36,137090,137091,137097,137107,137111,137117,137127],{"__ignoreMap":34},[39,137092,137093,137095],{"class":41,"line":42},[39,137094,131970],{"class":3021},[39,137096,16628],{"class":45},[39,137098,137099,137101,137103,137105],{"class":41,"line":74},[39,137100,131977],{"class":56},[39,137102,52491],{"class":45},[39,137104,24792],{"class":56},[39,137106,2359],{"class":45},[39,137108,137109],{"class":41,"line":99},[39,137110,2630],{"class":45},[39,137112,137113,137115],{"class":41,"line":106},[39,137114,131992],{"class":3021},[39,137116,16628],{"class":45},[39,137118,137119,137121,137123,137125],{"class":41,"line":112},[39,137120,131977],{"class":56},[39,137122,52491],{"class":45},[39,137124,73576],{"class":56},[39,137126,2359],{"class":45},[39,137128,137129],{"class":41,"line":118},[39,137130,2630],{"class":45},[14,137132,137134],{"id":137133},"_135-css的初始化","13.5 css的初始化",[19,137136,137137],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137139,137140],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137142,137143],{},"每个网页都必须首先进行 CSS初始化。",[19,137145,137146],{},"这里我们以 京东CSS初始化代码为例。",[19,137148,137149],{},"在网页右键查看网页源代码",[19,137151,137152],{},"找到css的link引入语句",[19,137154,137155],{},"然后ctrl+f 输入body",[19,137157,78280],{},[269,137159],{"style":127353,"src":137160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137162,78303],{},[269,137164],{"style":127353,"src":137165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137167,137168],{},"③打开了网页上传压缩的代码",[269,137170],{"style":127353,"src":137171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137173,137174],{},"④从body前可以查看这个网页的初始化代码",[19,137176,137177],{},[304,137178,137179],{},"Unicode编码字体：",[19,137181,137182],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137184,84261],{},[19,137186,137187],{},"黑体 \\9ED1\\4F53",[19,137189,137190],{},"宋体 \\5B8B\\4F53",[19,137192,137193],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1133,137195,137196],{},"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":34,"searchDepth":74,"depth":74,"links":137198},[137199,137200,137207,137211,137215],{"id":135996,"depth":74,"text":135997},{"id":136118,"depth":74,"text":136119,"children":137201},[137202,137203,137204,137205,137206],{"id":136122,"depth":99,"text":136123},{"id":136275,"depth":99,"text":136276},{"id":136394,"depth":99,"text":136395},{"id":136536,"depth":99,"text":136537},{"id":136594,"depth":99,"text":136595},{"id":136655,"depth":74,"text":136656,"children":137208},[137209,137210],{"id":136678,"depth":99,"text":136679},{"id":136910,"depth":99,"text":136911},{"id":137039,"depth":74,"text":137040,"children":137212},[137213,137214],{"id":137043,"depth":99,"text":137044},{"id":137082,"depth":99,"text":137083},{"id":137133,"depth":74,"text":137134},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135988,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137222,"title":137223,"body":137224,"description":1142,"extension":1143,"meta":138910,"navigation":1145,"path":138911,"seo":138912,"stem":138913,"__hash__":138914},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137225,"toc":138899},[137226,137229,137233,137237,137240,137247,137250,137253,137291,137294,137296,137310,137314,137323,137327,137332,137335,137338,137341,137376,137381,137384,137414,137417,137422,137425,137428,137458,137461,137515,137518,137522,137527,137539,137542,137546,137576,137579,137584,137587,137617,137620,137624,137641,137645,137649,137652,137685,137688,137692,137695,137698,137701,137704,137707,137818,137821,137824,137827,137929,137932,137936,137940,137944,137947,137987,137990,137992,138008,138012,138015,138020,138101,138104,138107,138233,138238,138241,138249,138252,138257,138342,138345,138349,138352,138355,138359,138379,138384,138468,138471,138476,138479,138482,138560,138563,138566,138569,138572,138575,138580,138583,138586,138658,138661,138666,138669,138766,138769,138775,138778,138781,138784,138787,138790,138793,138796,138799,138803,138808,138811,138844,138849,138852,138893,138896],[10,137227,137223],{"id":137228},"_14-html5与css3新特性",[14,137230,137232],{"id":137231},"_141-html5的新特性","14.1 HTML5的新特性",[1188,137234,137236],{"id":137235},"_1411-基本标签","14.1.1 基本标签",[19,137238,137239],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137241,137242,137243,137246],{},"这些新特性都有兼容性问题，基本是 ",[304,137244,137245],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137248,137249],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137251,137252],{},"现在使用的是新特性：",[2205,137254,137255,137261,137267,137273,137279,137285],{},[1174,137256,137257,137260],{},[36,137258,137259],{},"\u003Cheader>"," 头部标签",[1174,137262,137263,137266],{},[36,137264,137265],{},"\u003Cnav>"," 导航标签",[1174,137268,137269,137272],{},[36,137270,137271],{},"\u003Carticle>"," 内容标签",[1174,137274,137275,137278],{},[36,137276,137277],{},"\u003Csection>"," 定义文档某个区域",[1174,137280,137281,137284],{},[36,137282,137283],{},"\u003Caside>"," 侧边栏标签",[1174,137286,137287,137290],{},[36,137288,137289],{},"\u003Cfooter>"," 尾部标签",[269,137292],{"style":127353,"src":137293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137295,1249],{},[2205,137297,137298,137301,137304,137307],{},[1174,137299,137300],{},"这种语义化标准主要是针对搜索引擎的",[1174,137302,137303],{},"这些标签页面中可以经常使用",[1174,137305,137306],{},"在IE9中，需要把这些元素转换为块级元素",[1174,137308,137309],{},"移动端更喜欢使用这些标签",[1188,137311,137313],{"id":137312},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137315,137316,137317,137319,137320,137322],{},"音频 ",[304,137318,29231],{}," 和视频 ",[304,137321,29240],{}," 两个标签",[23054,137324,137326],{"id":137325},"_14121-视频标签-video","14.1.2.1 视频标签- video",[1171,137328,137329],{},[1174,137330,137331],{},"支持格式：",[269,137333],{"style":127353,"src":137334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,137336,137337],{},"尽量使用MP4，兼容性好",[19,137339,137340],{},"用MP4就可以",[29,137342,137344],{"className":128244,"code":137343,"language":128246,"meta":34,"style":34},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[36,137345,137346],{"__ignoreMap":34},[39,137347,137348,137350,137352,137354,137356,137359,137361,137364,137367,137370,137372,137374],{"class":41,"line":42},[39,137349,2108],{"class":45},[39,137351,29240],{"class":52354},[39,137353,56293],{"class":3021},[39,137355,50],{"class":45},[39,137357,137358],{"class":1319},"\"movie.mp4\"",[39,137360,93477],{"class":3021},[39,137362,137363],{"class":3021}," autoplay",[39,137365,137366],{"class":3021}," muted",[39,137368,137369],{"class":3021}," loop",[39,137371,56368],{"class":45},[39,137373,29240],{"class":52354},[39,137375,52361],{"class":45},[1171,137377,137378],{"start":74},[1174,137379,137380],{},"兼容写法",[19,137382,137383],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[29,137385,137386],{"className":128244,"code":137343,"language":128246,"meta":34,"style":34},[36,137387,137388],{"__ignoreMap":34},[39,137389,137390,137392,137394,137396,137398,137400,137402,137404,137406,137408,137410,137412],{"class":41,"line":42},[39,137391,2108],{"class":45},[39,137393,29240],{"class":52354},[39,137395,56293],{"class":3021},[39,137397,50],{"class":45},[39,137399,137358],{"class":1319},[39,137401,93477],{"class":3021},[39,137403,137363],{"class":3021},[39,137405,137366],{"class":3021},[39,137407,137369],{"class":3021},[39,137409,56368],{"class":45},[39,137411,29240],{"class":52354},[39,137413,52361],{"class":45},[19,137415,137416],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1171,137418,137419],{"start":99},[1174,137420,137421],{},"video常用属性",[269,137423],{"style":127353,"src":137424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,137426,137427],{},"poster属性后面是跟的等待加载图片的地址",[29,137429,137430],{"className":128244,"code":134999,"language":128246,"meta":34,"style":34},[36,137431,137432],{"__ignoreMap":34},[39,137433,137434,137436,137438,137440,137442,137444,137446,137448,137450,137452,137454,137456],{"class":41,"line":42},[39,137435,2108],{"class":45},[39,137437,269],{"class":52354},[39,137439,56293],{"class":3021},[39,137441,50],{"class":45},[39,137443,135014],{"class":1319},[39,137445,56301],{"class":3021},[39,137447,50],{"class":45},[39,137449,135021],{"class":1319},[39,137451,135024],{"class":3021},[39,137453,50],{"class":45},[39,137455,135029],{"class":1319},[39,137457,52361],{"class":45},[19,137459,137460],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[29,137462,137464],{"className":127497,"code":137463,"language":127499,"meta":34,"style":34},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[36,137465,137466,137471,137477,137501,137506,137511],{"__ignoreMap":34},[39,137467,137468],{"class":41,"line":42},[39,137469,137470],{"class":102},"\u002F* 2D 位移 *\u002F\n",[39,137472,137473,137475],{"class":41,"line":74},[39,137474,52665],{"class":52354},[39,137476,16628],{"class":45},[39,137478,137479,137482,137484,137487,137489,137491,137493,137495,137497,137499],{"class":41,"line":99},[39,137480,137481],{"class":56},"  transform",[39,137483,52491],{"class":45},[39,137485,137486],{"class":56},"translate",[39,137488,1221],{"class":45},[39,137490,1519],{"class":56},[39,137492,52546],{"class":49},[39,137494,13491],{"class":45},[39,137496,1855],{"class":56},[39,137498,52546],{"class":49},[39,137500,3777],{"class":45},[39,137502,137503],{"class":41,"line":106},[39,137504,137505],{"class":102},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[39,137507,137508],{"class":41,"line":112},[39,137509,137510],{"class":102},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[39,137512,137513],{"class":41,"line":118},[39,137514,2630],{"class":45},[19,137516,137517],{},"muted:自动静音属性",[23054,137519,137521],{"id":137520},"_14122-音频标签audio","14.1.2.2 音频标签audio",[1171,137523,137524],{},[1174,137525,137526],{},"基本使用",[19,137528,137529,137530,137535,137536],{},"当前 ",[304,137531,137532],{},[36,137533,137534],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[304,137537,137538],{},"mp3格式",[269,137540],{"style":127353,"src":137541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[1171,137543,137544],{"start":74},[1174,137545,137380],{},[29,137547,137548],{"className":128244,"code":137343,"language":128246,"meta":34,"style":34},[36,137549,137550],{"__ignoreMap":34},[39,137551,137552,137554,137556,137558,137560,137562,137564,137566,137568,137570,137572,137574],{"class":41,"line":42},[39,137553,2108],{"class":45},[39,137555,29240],{"class":52354},[39,137557,56293],{"class":3021},[39,137559,50],{"class":45},[39,137561,137358],{"class":1319},[39,137563,93477],{"class":3021},[39,137565,137363],{"class":3021},[39,137567,137366],{"class":3021},[39,137569,137369],{"class":3021},[39,137571,56368],{"class":45},[39,137573,29240],{"class":52354},[39,137575,52361],{"class":45},[19,137577,137578],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1171,137580,137581],{"start":99},[1174,137582,137583],{},"常用属性",[269,137585],{"style":127353,"src":137586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[29,137588,137589],{"className":128244,"code":137343,"language":128246,"meta":34,"style":34},[36,137590,137591],{"__ignoreMap":34},[39,137592,137593,137595,137597,137599,137601,137603,137605,137607,137609,137611,137613,137615],{"class":41,"line":42},[39,137594,2108],{"class":45},[39,137596,29240],{"class":52354},[39,137598,56293],{"class":3021},[39,137600,50],{"class":45},[39,137602,137358],{"class":1319},[39,137604,93477],{"class":3021},[39,137606,137363],{"class":3021},[39,137608,137366],{"class":3021},[39,137610,137369],{"class":3021},[39,137612,56368],{"class":45},[39,137614,29240],{"class":52354},[39,137616,52361],{"class":45},[19,137618,137619],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23054,137621,137623],{"id":137622},"_14123-总结","14.1.2.3 总结",[2205,137625,137626,137629,137632,137635,137638],{},[1174,137627,137628],{},"音频标签和视频标签使用方式基本一致",[1174,137630,137631],{},"浏览器支持情况不同",[1174,137633,137634],{},"谷歌浏览器把音频和视频自动播放禁止了",[1174,137636,137637],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[1174,137639,137640],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[1188,137642,137644],{"id":137643},"_1413-表单元素","14.1.3 表单元素",[23054,137646,137648],{"id":137647},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[269,137650],{"style":127353,"src":137651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[29,137653,137655],{"className":128244,"code":137654,"language":128246,"meta":34,"style":34},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[36,137656,137657],{"__ignoreMap":34},[39,137658,137659,137661,137663,137665,137667,137669,137671,137673,137676,137678,137680,137683],{"class":41,"line":42},[39,137660,2108],{"class":45},[39,137662,54875],{"class":52354},[39,137664,54878],{"class":3021},[39,137666,50],{"class":45},[39,137668,63753],{"class":1319},[39,137670,15976],{"class":3021},[39,137672,50],{"class":45},[39,137674,137675],{"class":1319},"\"username\"",[39,137677,62074],{"class":3021},[39,137679,50],{"class":45},[39,137681,137682],{"class":1319},"\"请输入用户名\"",[39,137684,52361],{"class":45},[269,137686],{"style":127353,"src":137687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23054,137689,137691],{"id":137690},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[269,137693],{"style":127353,"src":137694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,137696,137697],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,137699,137700],{},"快捷操作：",[269,137702],{"style":127353,"src":137703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,137705,137706],{},"例子1：",[29,137708,137710],{"className":128244,"code":137709,"language":128246,"meta":34,"style":34},"\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",[36,137711,137712,137735,137762,137791,137810],{"__ignoreMap":34},[39,137713,137714,137716,137718,137720,137722,137725,137728,137730,137733],{"class":41,"line":42},[39,137715,2108],{"class":45},[39,137717,67679],{"class":52354},[39,137719,67682],{"class":3021},[39,137721,50],{"class":45},[39,137723,137724],{"class":1319},"\"\u002Fsubmit\"",[39,137726,137727],{"class":3021}," method",[39,137729,50],{"class":45},[39,137731,137732],{"class":1319},"\"post\"",[39,137734,52361],{"class":45},[39,137736,137737,137739,137741,137743,137745,137747,137749,137751,137753,137755,137757,137760],{"class":41,"line":74},[39,137738,53198],{"class":45},[39,137740,54875],{"class":52354},[39,137742,54878],{"class":3021},[39,137744,50],{"class":45},[39,137746,63753],{"class":1319},[39,137748,15976],{"class":3021},[39,137750,50],{"class":45},[39,137752,137675],{"class":1319},[39,137754,62074],{"class":3021},[39,137756,50],{"class":45},[39,137758,137759],{"class":1319},"\"用户名\"",[39,137761,52361],{"class":45},[39,137763,137764,137766,137768,137770,137772,137775,137777,137779,137782,137784,137786,137789],{"class":41,"line":99},[39,137765,53198],{"class":45},[39,137767,54875],{"class":52354},[39,137769,54878],{"class":3021},[39,137771,50],{"class":45},[39,137773,137774],{"class":1319},"\"password\"",[39,137776,15976],{"class":3021},[39,137778,50],{"class":45},[39,137780,137781],{"class":1319},"\"pwd\"",[39,137783,62074],{"class":3021},[39,137785,50],{"class":45},[39,137787,137788],{"class":1319},"\"密码\"",[39,137790,52361],{"class":45},[39,137792,137793,137795,137797,137799,137801,137803,137806,137808],{"class":41,"line":106},[39,137794,53198],{"class":45},[39,137796,54941],{"class":52354},[39,137798,54878],{"class":3021},[39,137800,50],{"class":45},[39,137802,67702],{"class":1319},[39,137804,137805],{"class":45},">提交\u003C\u002F",[39,137807,54941],{"class":52354},[39,137809,52361],{"class":45},[39,137811,137812,137814,137816],{"class":41,"line":112},[39,137813,52839],{"class":45},[39,137815,67679],{"class":52354},[39,137817,52361],{"class":45},[269,137819],{"style":127353,"src":137820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,137822,137823],{},"value是表单域的内容",[19,137825,137826],{},"例子2：",[29,137828,137829],{"className":128244,"code":137709,"language":128246,"meta":34,"style":34},[36,137830,137831,137851,137877,137903,137921],{"__ignoreMap":34},[39,137832,137833,137835,137837,137839,137841,137843,137845,137847,137849],{"class":41,"line":42},[39,137834,2108],{"class":45},[39,137836,67679],{"class":52354},[39,137838,67682],{"class":3021},[39,137840,50],{"class":45},[39,137842,137724],{"class":1319},[39,137844,137727],{"class":3021},[39,137846,50],{"class":45},[39,137848,137732],{"class":1319},[39,137850,52361],{"class":45},[39,137852,137853,137855,137857,137859,137861,137863,137865,137867,137869,137871,137873,137875],{"class":41,"line":74},[39,137854,53198],{"class":45},[39,137856,54875],{"class":52354},[39,137858,54878],{"class":3021},[39,137860,50],{"class":45},[39,137862,63753],{"class":1319},[39,137864,15976],{"class":3021},[39,137866,50],{"class":45},[39,137868,137675],{"class":1319},[39,137870,62074],{"class":3021},[39,137872,50],{"class":45},[39,137874,137759],{"class":1319},[39,137876,52361],{"class":45},[39,137878,137879,137881,137883,137885,137887,137889,137891,137893,137895,137897,137899,137901],{"class":41,"line":99},[39,137880,53198],{"class":45},[39,137882,54875],{"class":52354},[39,137884,54878],{"class":3021},[39,137886,50],{"class":45},[39,137888,137774],{"class":1319},[39,137890,15976],{"class":3021},[39,137892,50],{"class":45},[39,137894,137781],{"class":1319},[39,137896,62074],{"class":3021},[39,137898,50],{"class":45},[39,137900,137788],{"class":1319},[39,137902,52361],{"class":45},[39,137904,137905,137907,137909,137911,137913,137915,137917,137919],{"class":41,"line":106},[39,137906,53198],{"class":45},[39,137908,54941],{"class":52354},[39,137910,54878],{"class":3021},[39,137912,50],{"class":45},[39,137914,67702],{"class":1319},[39,137916,137805],{"class":45},[39,137918,54941],{"class":52354},[39,137920,52361],{"class":45},[39,137922,137923,137925,137927],{"class":41,"line":112},[39,137924,52839],{"class":45},[39,137926,67679],{"class":52354},[39,137928,52361],{"class":45},[269,137930],{"style":127353,"src":137931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137933,137935],{"id":137934},"_142-css新特性","14.2 CSS新特性",[1188,137937,137939],{"id":137938},"_1421-新增选择器","14.2.1 新增选择器",[23054,137941,137943],{"id":137942},"_14211-属性选择器","14.2.1.1 属性选择器",[269,137945],{"style":127353,"src":137946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[29,137948,137950],{"className":127497,"code":137949,"language":127499,"meta":34,"style":34},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[36,137951,137952,137967,137983],{"__ignoreMap":34},[39,137953,137954,137956,137958,137960,137962,137964],{"class":41,"line":42},[39,137955,54875],{"class":52354},[39,137957,2088],{"class":45},[39,137959,104052],{"class":3021},[39,137961,50],{"class":49},[39,137963,63753],{"class":1319},[39,137965,137966],{"class":45},"] {\n",[39,137968,137969,137971,137973,137975,137977,137979,137981],{"class":41,"line":74},[39,137970,71950],{"class":56},[39,137972,52491],{"class":45},[39,137974,57],{"class":56},[39,137976,52546],{"class":49},[39,137978,52575],{"class":56},[39,137980,131077],{"class":56},[39,137982,2359],{"class":45},[39,137984,137985],{"class":41,"line":99},[39,137986,2630],{"class":45},[269,137988],{"style":127353,"src":137989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137991,1249],{},[2205,137993,137994,137997,138000,138003],{},[1174,137995,137996],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[1174,137998,137999],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[1174,138001,138002],{},"属性选择器也可以选择出来自定义的属性",[1174,138004,138005,138007],{},[304,138006,10081],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23054,138009,138011],{"id":138010},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[269,138013],{"style":127353,"src":138014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[1171,138016,138017],{},[1174,138018,138019],{},"fist-child",[29,138021,138023],{"className":127497,"code":138022,"language":127499,"meta":34,"style":34},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[36,138024,138025,138030,138045,138065,138083],{"__ignoreMap":34},[39,138026,138027],{"class":41,"line":42},[39,138028,138029],{"class":102},"\u002F* 属性选择器 *\u002F\n",[39,138031,138032,138034,138036,138038,138040,138042],{"class":41,"line":74},[39,138033,54875],{"class":52354},[39,138035,2088],{"class":45},[39,138037,104052],{"class":3021},[39,138039,50],{"class":49},[39,138041,63753],{"class":1319},[39,138043,138044],{"class":45},"] { }\n",[39,138046,138047,138049,138051,138053,138056,138059,138062],{"class":41,"line":99},[39,138048,54875],{"class":52354},[39,138050,2088],{"class":45},[39,138052,15750],{"class":3021},[39,138054,138055],{"class":49},"^=",[39,138057,138058],{"class":1319},"\"icon\"",[39,138060,138061],{"class":45},"] { }  ",[39,138063,138064],{"class":102},"\u002F* 以 icon 开头 *\u002F\n",[39,138066,138067,138069,138071,138073,138076,138078,138080],{"class":41,"line":106},[39,138068,54875],{"class":52354},[39,138070,2088],{"class":45},[39,138072,15750],{"class":3021},[39,138074,138075],{"class":49},"$=",[39,138077,138058],{"class":1319},[39,138079,138061],{"class":45},[39,138081,138082],{"class":102},"\u002F* 以 icon 结尾 *\u002F\n",[39,138084,138085,138087,138089,138091,138094,138096,138098],{"class":41,"line":112},[39,138086,54875],{"class":52354},[39,138088,2088],{"class":45},[39,138090,15750],{"class":3021},[39,138092,138093],{"class":49},"*=",[39,138095,138058],{"class":1319},[39,138097,138061],{"class":45},[39,138099,138100],{"class":102},"\u002F* 包含 icon *\u002F\n",[19,138102,138103],{},"ul的第一个儿子文本为红色",[19,138105,138106],{},"一定要在冒号前加空格，不然就是选中所有的了",[29,138108,138110],{"className":127497,"code":138109,"language":127499,"meta":34,"style":34},".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",[36,138111,138112,138118,138128,138132,138136,138141,138154,138167,138183,138200,138217],{"__ignoreMap":34},[39,138113,138114,138116],{"class":41,"line":42},[39,138115,127788],{"class":3021},[39,138117,16628],{"class":45},[39,138119,138120,138122,138124,138126],{"class":41,"line":74},[39,138121,71959],{"class":56},[39,138123,52491],{"class":45},[39,138125,58475],{"class":56},[39,138127,2359],{"class":45},[39,138129,138130],{"class":41,"line":99},[39,138131,2630],{"class":45},[39,138133,138134],{"class":41,"line":106},[39,138135,136958],{"class":45},[39,138137,138138],{"class":41,"line":112},[39,138139,138140],{"class":102},"\u002F* 结构伪类选择器 *\u002F\n",[39,138142,138143,138145,138148,138151],{"class":41,"line":118},[39,138144,1174],{"class":52354},[39,138146,138147],{"class":3021},":first-child",[39,138149,138150],{"class":45}," { }           ",[39,138152,138153],{"class":102},"\u002F* 第一个 *\u002F\n",[39,138155,138156,138158,138161,138164],{"class":41,"line":413},[39,138157,1174],{"class":52354},[39,138159,138160],{"class":3021},":last-child",[39,138162,138163],{"class":45}," { }            ",[39,138165,138166],{"class":102},"\u002F* 最后一个 *\u002F\n",[39,138168,138169,138171,138173,138175,138177,138180],{"class":41,"line":419},[39,138170,1174],{"class":52354},[39,138172,130411],{"class":3021},[39,138174,1221],{"class":45},[39,138176,63],{"class":56},[39,138178,138179],{"class":45},") { }          ",[39,138181,138182],{"class":102},"\u002F* 第2个 *\u002F\n",[39,138184,138185,138187,138189,138191,138194,138197],{"class":41,"line":425},[39,138186,1174],{"class":52354},[39,138188,130411],{"class":3021},[39,138190,1221],{"class":45},[39,138192,138193],{"class":56},"2n",[39,138195,138196],{"class":45},") { }         ",[39,138198,138199],{"class":102},"\u002F* 偶数 *\u002F\n",[39,138201,138202,138204,138206,138208,138211,138214],{"class":41,"line":443},[39,138203,1174],{"class":52354},[39,138205,130411],{"class":3021},[39,138207,1221],{"class":45},[39,138209,138210],{"class":56},"2n+1",[39,138212,138213],{"class":45},") { }       ",[39,138215,138216],{"class":102},"\u002F* 奇数 *\u002F\n",[39,138218,138219,138221,138223,138225,138228,138230],{"class":41,"line":449},[39,138220,1174],{"class":52354},[39,138222,130411],{"class":3021},[39,138224,1221],{"class":45},[39,138226,138227],{"class":56},"-n+3",[39,138229,138213],{"class":45},[39,138231,138232],{"class":102},"\u002F* 前3个 *\u002F\n",[52665,138234,138237],{"className":138235},[138236],"example","\n  示例内容\n",[19,138239,138240],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[2205,138242,138243],{},[1174,138244,138245,138248],{},[36,138246,138247],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138250,138251],{},"也就是说它选择的是熊大",[1171,138253,138254],{"start":118},[1174,138255,138256],{},"权重",[29,138258,138260],{"className":127497,"code":138259,"language":127499,"meta":34,"style":34},"\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",[36,138261,138262,138266,138276,138286,138300,138314,138328],{"__ignoreMap":34},[39,138263,138264],{"class":41,"line":42},[39,138265,138140],{"class":102},[39,138267,138268,138270,138272,138274],{"class":41,"line":74},[39,138269,1174],{"class":52354},[39,138271,138147],{"class":3021},[39,138273,138150],{"class":45},[39,138275,138153],{"class":102},[39,138277,138278,138280,138282,138284],{"class":41,"line":99},[39,138279,1174],{"class":52354},[39,138281,138160],{"class":3021},[39,138283,138163],{"class":45},[39,138285,138166],{"class":102},[39,138287,138288,138290,138292,138294,138296,138298],{"class":41,"line":106},[39,138289,1174],{"class":52354},[39,138291,130411],{"class":3021},[39,138293,1221],{"class":45},[39,138295,63],{"class":56},[39,138297,138179],{"class":45},[39,138299,138182],{"class":102},[39,138301,138302,138304,138306,138308,138310,138312],{"class":41,"line":112},[39,138303,1174],{"class":52354},[39,138305,130411],{"class":3021},[39,138307,1221],{"class":45},[39,138309,138193],{"class":56},[39,138311,138196],{"class":45},[39,138313,138199],{"class":102},[39,138315,138316,138318,138320,138322,138324,138326],{"class":41,"line":118},[39,138317,1174],{"class":52354},[39,138319,130411],{"class":3021},[39,138321,1221],{"class":45},[39,138323,138210],{"class":56},[39,138325,138213],{"class":45},[39,138327,138216],{"class":102},[39,138329,138330,138332,138334,138336,138338,138340],{"class":41,"line":413},[39,138331,1174],{"class":52354},[39,138333,130411],{"class":3021},[39,138335,1221],{"class":45},[39,138337,138227],{"class":56},[39,138339,138213],{"class":45},[39,138341,138232],{"class":102},[19,138343,138344],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23054,138346,138348],{"id":138347},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,138350,138351],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[269,138353],{"style":127353,"src":138354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[1171,138356,138357],{},[1174,138358,1249],{},[2205,138360,138361,138364,138367,138370,138373,138376],{},[1174,138362,138363],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[1174,138365,138366],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[1174,138368,138369],{},"语法： element::before {}",[1174,138371,138372],{},"before 和 after 必须有 content 属性",[1174,138374,138375],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[1174,138377,138378],{},"伪元素选择器和标签选择器一样，权重为 1",[1171,138380,138381],{"start":74},[1174,138382,138383],{},"实例",[29,138385,138386],{"className":127497,"code":138259,"language":127499,"meta":34,"style":34},[36,138387,138388,138392,138402,138412,138426,138440,138454],{"__ignoreMap":34},[39,138389,138390],{"class":41,"line":42},[39,138391,138140],{"class":102},[39,138393,138394,138396,138398,138400],{"class":41,"line":74},[39,138395,1174],{"class":52354},[39,138397,138147],{"class":3021},[39,138399,138150],{"class":45},[39,138401,138153],{"class":102},[39,138403,138404,138406,138408,138410],{"class":41,"line":99},[39,138405,1174],{"class":52354},[39,138407,138160],{"class":3021},[39,138409,138163],{"class":45},[39,138411,138166],{"class":102},[39,138413,138414,138416,138418,138420,138422,138424],{"class":41,"line":106},[39,138415,1174],{"class":52354},[39,138417,130411],{"class":3021},[39,138419,1221],{"class":45},[39,138421,63],{"class":56},[39,138423,138179],{"class":45},[39,138425,138182],{"class":102},[39,138427,138428,138430,138432,138434,138436,138438],{"class":41,"line":112},[39,138429,1174],{"class":52354},[39,138431,130411],{"class":3021},[39,138433,1221],{"class":45},[39,138435,138193],{"class":56},[39,138437,138196],{"class":45},[39,138439,138199],{"class":102},[39,138441,138442,138444,138446,138448,138450,138452],{"class":41,"line":118},[39,138443,1174],{"class":52354},[39,138445,130411],{"class":3021},[39,138447,1221],{"class":45},[39,138449,138210],{"class":56},[39,138451,138213],{"class":45},[39,138453,138216],{"class":102},[39,138455,138456,138458,138460,138462,138464,138466],{"class":41,"line":413},[39,138457,1174],{"class":52354},[39,138459,130411],{"class":3021},[39,138461,1221],{"class":45},[39,138463,138227],{"class":56},[39,138465,138213],{"class":45},[39,138467,138232],{"class":102},[269,138469],{"style":127353,"src":138470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[1171,138472,138473],{"start":99},[1174,138474,138475],{},"使用场景1",[269,138477],{"style":127353,"src":138478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138480,138481],{},"不需要再加盒子来整红色那部分了",[29,138483,138485],{"className":127497,"code":138484,"language":127499,"meta":34,"style":34},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[36,138486,138487,138492,138501,138512,138522,138526,138535,138546,138556],{"__ignoreMap":34},[39,138488,138489],{"class":41,"line":42},[39,138490,138491],{"class":102},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[39,138493,138494,138496,138499],{"class":41,"line":74},[39,138495,52665],{"class":52354},[39,138497,138498],{"class":3021},"::before",[39,138500,16628],{"class":45},[39,138502,138503,138506,138508,138510],{"class":41,"line":99},[39,138504,138505],{"class":56},"  content",[39,138507,52491],{"class":45},[39,138509,8708],{"class":1319},[39,138511,2359],{"class":45},[39,138513,138514,138516,138518,138520],{"class":41,"line":106},[39,138515,129113],{"class":56},[39,138517,52491],{"class":45},[39,138519,61923],{"class":56},[39,138521,2359],{"class":45},[39,138523,138524],{"class":41,"line":112},[39,138525,2630],{"class":45},[39,138527,138528,138530,138533],{"class":41,"line":118},[39,138529,52665],{"class":52354},[39,138531,138532],{"class":3021},"::after",[39,138534,16628],{"class":45},[39,138536,138537,138539,138541,138544],{"class":41,"line":413},[39,138538,138505],{"class":56},[39,138540,52491],{"class":45},[39,138542,138543],{"class":1319},"\"→\"",[39,138545,2359],{"class":45},[39,138547,138548,138550,138552,138554],{"class":41,"line":419},[39,138549,71959],{"class":56},[39,138551,52491],{"class":45},[39,138553,63124],{"class":56},[39,138555,2359],{"class":45},[39,138557,138558],{"class":41,"line":425},[39,138559,2630],{"class":45},[269,138561],{"style":127353,"src":138562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138564,138565],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[269,138567],{"style":127353,"src":138568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138570,138571],{},"但是在引用时需要先转义一下",[19,138573,138574],{},"content='\\e930'",[1171,138576,138577],{"start":106},[1174,138578,138579],{},"使用场景2",[19,138581,138582],{},"仿土豆效果",[19,138584,138585],{},"通过使用伪元素选择器可以减少body中盒子的数量",[29,138587,138588],{"className":127497,"code":138484,"language":127499,"meta":34,"style":34},[36,138589,138590,138594,138602,138612,138622,138626,138634,138644,138654],{"__ignoreMap":34},[39,138591,138592],{"class":41,"line":42},[39,138593,138491],{"class":102},[39,138595,138596,138598,138600],{"class":41,"line":74},[39,138597,52665],{"class":52354},[39,138599,138498],{"class":3021},[39,138601,16628],{"class":45},[39,138603,138604,138606,138608,138610],{"class":41,"line":99},[39,138605,138505],{"class":56},[39,138607,52491],{"class":45},[39,138609,8708],{"class":1319},[39,138611,2359],{"class":45},[39,138613,138614,138616,138618,138620],{"class":41,"line":106},[39,138615,129113],{"class":56},[39,138617,52491],{"class":45},[39,138619,61923],{"class":56},[39,138621,2359],{"class":45},[39,138623,138624],{"class":41,"line":112},[39,138625,2630],{"class":45},[39,138627,138628,138630,138632],{"class":41,"line":118},[39,138629,52665],{"class":52354},[39,138631,138532],{"class":3021},[39,138633,16628],{"class":45},[39,138635,138636,138638,138640,138642],{"class":41,"line":413},[39,138637,138505],{"class":56},[39,138639,52491],{"class":45},[39,138641,138543],{"class":1319},[39,138643,2359],{"class":45},[39,138645,138646,138648,138650,138652],{"class":41,"line":419},[39,138647,71959],{"class":56},[39,138649,52491],{"class":45},[39,138651,63124],{"class":56},[39,138653,2359],{"class":45},[39,138655,138656],{"class":41,"line":425},[39,138657,2630],{"class":45},[269,138659],{"style":127353,"src":138660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[1171,138662,138663],{"start":112},[1174,138664,138665],{},"使用场景3",[19,138667,138668],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[29,138670,138672],{"className":127497,"code":138671,"language":127499,"meta":34,"style":34},".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",[36,138673,138674,138680,138690,138694,138698,138702,138710,138720,138730,138734,138742,138752,138762],{"__ignoreMap":34},[39,138675,138676,138678],{"class":41,"line":42},[39,138677,131345],{"class":3021},[39,138679,16628],{"class":45},[39,138681,138682,138684,138686,138688],{"class":41,"line":74},[39,138683,131977],{"class":56},[39,138685,52491],{"class":45},[39,138687,24792],{"class":56},[39,138689,2359],{"class":45},[39,138691,138692],{"class":41,"line":99},[39,138693,2630],{"class":45},[39,138695,138696],{"class":41,"line":106},[39,138697,136958],{"class":45},[39,138699,138700],{"class":41,"line":112},[39,138701,138491],{"class":102},[39,138703,138704,138706,138708],{"class":41,"line":118},[39,138705,52665],{"class":52354},[39,138707,138498],{"class":3021},[39,138709,16628],{"class":45},[39,138711,138712,138714,138716,138718],{"class":41,"line":413},[39,138713,138505],{"class":56},[39,138715,52491],{"class":45},[39,138717,8708],{"class":1319},[39,138719,2359],{"class":45},[39,138721,138722,138724,138726,138728],{"class":41,"line":419},[39,138723,129113],{"class":56},[39,138725,52491],{"class":45},[39,138727,61923],{"class":56},[39,138729,2359],{"class":45},[39,138731,138732],{"class":41,"line":425},[39,138733,2630],{"class":45},[39,138735,138736,138738,138740],{"class":41,"line":443},[39,138737,52665],{"class":52354},[39,138739,138532],{"class":3021},[39,138741,16628],{"class":45},[39,138743,138744,138746,138748,138750],{"class":41,"line":449},[39,138745,138505],{"class":56},[39,138747,52491],{"class":45},[39,138749,138543],{"class":1319},[39,138751,2359],{"class":45},[39,138753,138754,138756,138758,138760],{"class":41,"line":455},[39,138755,71959],{"class":56},[39,138757,52491],{"class":45},[39,138759,63124],{"class":56},[39,138761,2359],{"class":45},[39,138763,138764],{"class":41,"line":461},[39,138765,2630],{"class":45},[19,138767,138768],{},"div {\nmargin: 0 auto;\n}",[29,138770,138773],{"className":138771,"code":138772,"language":6244},[6242],"\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",[36,138774,138772],{"__ignoreMap":34},[19,138776,138777],{},"如果想让多个元素都发生变化",[19,138779,138780],{},"不能如下操作：",[19,138782,138783],{},"transition: width 2s ease 0.5s;",[19,138785,138786],{},"transition: height 2s ease 0.5s;不对！！！",[19,138788,138789],{},"上方会样式冲突，导致不显示任何过渡效果",[19,138791,138792],{},"使用如下：加逗号隔开",[19,138794,138795],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,138797,138798],{},"transition all 2s ease;",[1188,138800,138802],{"id":138801},"_1426-过渡练习","14.2.6 过渡练习",[1171,138804,138805],{},[1174,138806,138807],{},"进度条",[269,138809],{"style":127353,"src":138810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[29,138812,138814],{"className":127497,"code":138813,"language":127499,"meta":34,"style":34},"div {\n  transition: all 0.3s ease;\n}\n",[36,138815,138816,138822,138840],{"__ignoreMap":34},[39,138817,138818,138820],{"class":41,"line":42},[39,138819,52665],{"class":52354},[39,138821,16628],{"class":45},[39,138823,138824,138827,138829,138831,138834,138836,138838],{"class":41,"line":74},[39,138825,138826],{"class":56},"  transition",[39,138828,52491],{"class":45},[39,138830,29178],{"class":56},[39,138832,138833],{"class":56}," 0.3",[39,138835,392],{"class":49},[39,138837,79734],{"class":56},[39,138839,2359],{"class":45},[39,138841,138842],{"class":41,"line":99},[39,138843,2630],{"class":45},[1171,138845,138846],{"start":74},[1174,138847,138848],{},"小米logo",[19,138850,138851],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[29,138853,138855],{"className":127497,"code":138854,"language":127499,"meta":34,"style":34},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[36,138856,138857,138862,138868,138884,138889],{"__ignoreMap":34},[39,138858,138859],{"class":41,"line":42},[39,138860,138861],{"class":102},"\u002F* CSS3 过渡 *\u002F\n",[39,138863,138864,138866],{"class":41,"line":74},[39,138865,52665],{"class":52354},[39,138867,16628],{"class":45},[39,138869,138870,138872,138874,138876,138878,138880,138882],{"class":41,"line":99},[39,138871,138826],{"class":56},[39,138873,52491],{"class":45},[39,138875,29178],{"class":56},[39,138877,138833],{"class":56},[39,138879,392],{"class":49},[39,138881,79734],{"class":56},[39,138883,2359],{"class":45},[39,138885,138886],{"class":41,"line":106},[39,138887,138888],{"class":102},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[39,138890,138891],{"class":41,"line":112},[39,138892,2630],{"class":45},[19,138894,138895],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1133,138897,138898],{},"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":34,"searchDepth":74,"depth":74,"links":138900},[138901,138906],{"id":137231,"depth":74,"text":137232,"children":138902},[138903,138904,138905],{"id":137235,"depth":99,"text":137236},{"id":137312,"depth":99,"text":137313},{"id":137643,"depth":99,"text":137644},{"id":137934,"depth":74,"text":137935,"children":138907},[138908,138909],{"id":137938,"depth":99,"text":137939},{"id":138801,"depth":99,"text":138802},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137223,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138916,"title":138917,"body":138918,"description":1142,"extension":1143,"meta":140662,"navigation":1145,"path":140663,"seo":140664,"stem":140665,"__hash__":140666},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138919,"toc":140643},[138920,138923,138927,138930,138936,138942,138946,138948,138951,138954,138957,138960,138963,138966,138969,138973,138977,138980,138983,138986,138990,138993,138996,139001,139004,139007,139010,139014,139017,139026,139029,139032,139036,139039,139042,139047,139054,139068,139076,139083,139088,139091,139094,139097,139104,139108,139114,139120,139123,139126,139131,139137,139139,139147,139152,139155,139161,139163,139168,139173,139176,139178,139183,139186,139191,139196,139230,139234,139238,139241,139245,139248,139334,139337,139374,139377,139413,139417,139422,139435,139489,139491,139519,139521,139549,139555,139569,139571,139615,139617,139661,139664,139671,139682,139684,139711,139713,139739,139746,139762,139764,139858,139860,139954,139961,139964,139969,139975,140049,140052,140054,140090,140092,140128,140131,140138,140157,140160,140163,140165,140190,140192,140216,140219,140222,140252,140256,140259,140322,140324,140390,140392,140456,140459,140491,140493,140519,140521,140547,140550,140581,140583,140609,140611,140637,140640],[10,138921,138917],{"id":138922},"_15-品优购项目上篇-搭建与公共模块",[14,138924,138926],{"id":138925},"_151-项目规划","15.1 项目规划",[269,138928],{"style":127353,"src":138929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138931,138932,138935],{},[304,138933,138934],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138937,138938,138941],{},[304,138939,138940],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138943,138945],{"id":138944},"_152-项目介绍","15.2 项目介绍",[19,138947,138934],{},[269,138949],{"style":127353,"src":138950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138952,138953],{},"主页：",[269,138955],{"style":127353,"src":138956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138958,138959],{},"列表页：",[269,138961],{"style":127353,"src":138962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138964,138965],{},"注册页：",[269,138967],{"style":127353,"src":138968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138970,138972],{"id":138971},"_153-项目搭建工作","15.3 项目搭建工作",[1188,138974,138976],{"id":138975},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[269,138978],{"style":127353,"src":138979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138981,138982],{},"经常更换的图片要放到upload文件夹中",[19,138984,138985],{},"不经常换的放到images文件夹中",[1188,138987,138989],{"id":138988},"_1532-创建文件如下","15.3.2 创建文件如下",[269,138991],{"style":127353,"src":138992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[269,138994],{"style":127353,"src":138995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138997,138998],{},[304,138999,139000],{},"初始化样式：",[19,139002,139003],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139005,139006],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139008,139009],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[1188,139011,139013],{"id":139012},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139015,139016],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139018,139019,139020,139025],{},"这里最典型的应用就是 ",[304,139021,139022],{},[36,139023,139024],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[269,139027],{"style":127353,"src":139028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139030,139031],{},"通过link方法来引入",[1188,139033,139035],{"id":139034},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[269,139037],{"style":127353,"src":139038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139040,139041],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[1171,139043,139044],{},[1174,139045,139046],{},"制作favicon图标",[19,139048,139049,139050,139053],{},"①把品优购图标切成 ",[36,139051,139052],{},"png"," 图片",[19,139055,139056,139057,139059,139060,139063,139064],{},"②把 ",[36,139058,139052],{}," 图片转换为 ",[36,139061,139062],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[46,139065,139066],{"href":139066,"rel":139067},"http:\u002F\u002Fwww.bitbug.net\u002F",[24921],[1171,139069,139070,139073],{"start":74},[1174,139071,139072],{},"favicon图标放到网站根目录下",[1174,139074,139075],{},"HTML页面引入favicon",[19,139077,139078,139079,139082],{},"在html 页面里面的 ",[36,139080,139081],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139084,139085],{},[36,139086,139087],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139089,139090],{},"复制这行代码或者在生成这个的网站进行复制",[269,139092],{"style":127353,"src":139093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139095,139096],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139098,139099,139100],{},"例如:",[46,139101,139102],{"href":139102,"rel":139103},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24921],[1188,139105,139107],{"id":139106},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139109,139110,139113],{},[304,139111,139112],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139115,139116,139119],{},[304,139117,139118],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139121,139122],{},"页面必须有三个标签用来符合 SEO 优化",[269,139124],{"style":127353,"src":139125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[1171,139127,139128],{},[1174,139129,139130],{},"title网站标题",[19,139132,139133,139136],{},[304,139134,139135],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139138,69844],{},[2205,139140,139141,139144],{},[1174,139142,139143],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[1174,139145,139146],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[1171,139148,139149],{"start":74},[1174,139150,139151],{},"description网站描述",[19,139153,139154],{},"简要说明我们网站主要是做什么的",[19,139156,139157,139160],{},[304,139158,139159],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139162,69844],{},[19,139164,139165],{},[36,139166,139167],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[1171,139169,139170],{"start":99},[1174,139171,139172],{},"keywords关键词",[19,139174,139175],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139177,69844],{},[19,139179,139180],{},[36,139181,139182],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139184,139185],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139187,139188],{},[304,139189,139190],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[1171,139192,139193],{"start":106},[1174,139194,139195],{},"代码总结",[29,139197,139198],{"className":128244,"code":131601,"language":128246,"meta":34,"style":34},[36,139199,139200,139204,139218,139222],{"__ignoreMap":34},[39,139201,139202],{"class":41,"line":42},[39,139203,131608],{"class":102},[39,139205,139206,139208,139210,139212,139214,139216],{"class":41,"line":74},[39,139207,2108],{"class":45},[39,139209,52665],{"class":52354},[39,139211,54540],{"class":3021},[39,139213,50],{"class":45},[39,139215,131621],{"class":1319},[39,139217,52361],{"class":45},[39,139219,139220],{"class":41,"line":99},[39,139221,131628],{"class":45},[39,139223,139224,139226,139228],{"class":41,"line":106},[39,139225,52839],{"class":45},[39,139227,52665],{"class":52354},[39,139229,52361],{"class":45},[14,139231,139233],{"id":139232},"_154-项目公共部分制作","15.4 项目公共部分制作",[1188,139235,139237],{"id":139236},"_1541-常用模块类命名","15.4.1 常用模块类命名",[269,139239],{"style":127353,"src":139240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[1188,139242,139244],{"id":139243},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139246,139247],{},"布局思路：",[2205,139249,139250,139253,139256,139278,139311],{},[1174,139251,139252],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[1174,139254,139255],{},"里面包含版心的盒子",[1174,139257,139258,139259],{},"版心盒子里面包含 1 号左侧盒子左浮动",[2205,139260,139261,139269,139275],{},[1174,139262,139263,139264,22556,139266,139268],{},"1 号盒子 里面包含一个",[36,139265,2205],{},[36,139267,2205],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[1174,139270,139271,139272,139274],{},"里面的内容是水平排列，所以需要给",[36,139273,1174],{},"设置浮动",[1174,139276,139277],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[1174,139279,139280,139281],{},"版心盒子里面包含 2 号右侧盒子右浮动",[2205,139282,139283,139297,139302],{},[1174,139284,139285,139286,22556,139288,139290,139291,139293,139294,139296],{},"2 号盒子 里面包含一个",[36,139287,2205],{},[36,139289,2205],{},"包裹",[36,139292,1174],{},"，中间的",[36,139295,2119],{},"可以用样式去设置，也可以用字符 |",[1174,139298,139299,139300,139274],{},"里面内容水平排列，给",[36,139301,1174],{},[1174,139303,139304,139305,139307,139308,139310],{},"找到里面所有偶数的 ",[36,139306,1174],{}," 设置样式（偶数的 ",[36,139309,1174],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[1174,139312,139313,139314],{},"需要用到字体图标",[2205,139315,139316,139322,139325,139328,139331],{},[1174,139317,139318,139319],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[36,139320,139321],{},"arrow-icon",[1174,139323,139324],{},"先要引入字体图片的资源",[1174,139326,139327],{},"在样式里面利用 font-face 来进行声明",[1174,139329,139330],{},"在伪元素的 content属性设置 图标的编码",[1174,139332,139333],{},"给伪元素设置font-family属性",[19,139335,139336],{},"结构实例代码：",[29,139338,139340],{"className":127497,"code":139339,"language":127499,"meta":34,"style":34},"div::before {\n  content: \"\";\n  display: block;\n}\n",[36,139341,139342,139350,139360,139370],{"__ignoreMap":34},[39,139343,139344,139346,139348],{"class":41,"line":42},[39,139345,52665],{"class":52354},[39,139347,138498],{"class":3021},[39,139349,16628],{"class":45},[39,139351,139352,139354,139356,139358],{"class":41,"line":74},[39,139353,138505],{"class":56},[39,139355,52491],{"class":45},[39,139357,8708],{"class":1319},[39,139359,2359],{"class":45},[39,139361,139362,139364,139366,139368],{"class":41,"line":99},[39,139363,129113],{"class":56},[39,139365,52491],{"class":45},[39,139367,61923],{"class":56},[39,139369,2359],{"class":45},[39,139371,139372],{"class":41,"line":106},[39,139373,2630],{"class":45},[19,139375,139376],{},"样式实例代码：",[29,139378,139379],{"className":127497,"code":139339,"language":127499,"meta":34,"style":34},[36,139380,139381,139389,139399,139409],{"__ignoreMap":34},[39,139382,139383,139385,139387],{"class":41,"line":42},[39,139384,52665],{"class":52354},[39,139386,138498],{"class":3021},[39,139388,16628],{"class":45},[39,139390,139391,139393,139395,139397],{"class":41,"line":74},[39,139392,138505],{"class":56},[39,139394,52491],{"class":45},[39,139396,8708],{"class":1319},[39,139398,2359],{"class":45},[39,139400,139401,139403,139405,139407],{"class":41,"line":99},[39,139402,129113],{"class":56},[39,139404,52491],{"class":45},[39,139406,61923],{"class":56},[39,139408,2359],{"class":45},[39,139410,139411],{"class":41,"line":106},[39,139412,2630],{"class":45},[1188,139414,139416],{"id":139415},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[2205,139418,139419],{},[1174,139420,139421],{},"header 盒子必须要有高度",[19,139423,139424,139425,139427,139428],{},"1 号盒子是 ",[36,139426,132509],{}," 标志定位，在正常开发过程中， ",[304,139429,139430,139431,139434],{},"logo的布局其实是有讲究的，需要进行 ",[36,139432,139433],{},"logoSEO","的优化 （★★★）",[2205,139436,139437,139445,139453,139480],{},[1174,139438,139439,139441,139442,139444],{},[36,139440,132509],{}," 里面首先放一个 ",[36,139443,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[1174,139446,139447,139449,139450,139452],{},[36,139448,10],{}," 里面再放一个链接，可以返回首页的，把 ",[36,139451,132509],{}," 的背景图片给链接即可",[1174,139454,139455,139456],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[2205,139457,139458,139473],{},[1174,139459,139460,139461,139464,139465,139468,139469,139472],{},"方法1：",[36,139462,139463],{},"text-indent"," 移到盒子外面（",[36,139466,139467],{},"text-indent: -9999px",") ，然后 ",[36,139470,139471],{},"overflow:hidden"," ，淘宝的做法",[1174,139474,139475,139476,139479],{},"方法2：直接给 ",[36,139477,139478],{},"font-size: 0;"," 就看不到文字了，京东的做法",[1174,139481,139482,139483,139485,139486,139488],{},"最后给链接一个 ",[36,139484,52461],{}," 属性，这样鼠标放到 ",[36,139487,132509],{}," 上就可以看到提示文字了",[19,139490,139336],{},[29,139492,139493],{"className":128244,"code":132730,"language":128246,"meta":34,"style":34},[36,139494,139495],{"__ignoreMap":34},[39,139496,139497,139499,139501,139503,139505,139507,139509,139511,139513,139515,139517],{"class":41,"line":42},[39,139498,2108],{"class":45},[39,139500,46],{"class":52354},[39,139502,62111],{"class":3021},[39,139504,50],{"class":45},[39,139506,132745],{"class":1319},[39,139508,132748],{"class":3021},[39,139510,50],{"class":45},[39,139512,132753],{"class":1319},[39,139514,132756],{"class":45},[39,139516,46],{"class":52354},[39,139518,52361],{"class":45},[19,139520,139376],{},[29,139522,139523],{"className":128244,"code":132730,"language":128246,"meta":34,"style":34},[36,139524,139525],{"__ignoreMap":34},[39,139526,139527,139529,139531,139533,139535,139537,139539,139541,139543,139545,139547],{"class":41,"line":42},[39,139528,2108],{"class":45},[39,139530,46],{"class":52354},[39,139532,62111],{"class":3021},[39,139534,50],{"class":45},[39,139536,132745],{"class":1319},[39,139538,132748],{"class":3021},[39,139540,50],{"class":45},[39,139542,132753],{"class":1319},[39,139544,132756],{"class":45},[39,139546,46],{"class":52354},[39,139548,52361],{"class":45},[19,139550,139551,139552,139554],{},"2 号盒子是 ",[36,139553,132522],{}," 搜索模块定位",[2205,139556,139557,139560,139563,139566],{},[1174,139558,139559],{},"search盒子利用定位的方式放在对应的位置",[1174,139561,139562],{},"search盒子设置绝对定位，header盒子设置相对定位",[1174,139564,139565],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[1174,139567,139568],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139570,139336],{},[29,139572,139573],{"className":127497,"code":132817,"language":127499,"meta":34,"style":34},[36,139574,139575,139597,139601,139611],{"__ignoreMap":34},[39,139576,139577,139579,139581,139583,139585,139587,139589,139591,139593,139595],{"class":41,"line":42},[39,139578,52665],{"class":52354},[39,139580,13491],{"class":45},[39,139582,19],{"class":52354},[39,139584,13491],{"class":45},[39,139586,10],{"class":52354},[39,139588,13491],{"class":45},[39,139590,2205],{"class":52354},[39,139592,13491],{"class":45},[39,139594,1174],{"class":52354},[39,139596,16628],{"class":45},[39,139598,139599],{"class":41,"line":74},[39,139600,132846],{"class":102},[39,139602,139603,139605,139607,139609],{"class":41,"line":99},[39,139604,129113],{"class":56},[39,139606,52491],{"class":45},[39,139608,61923],{"class":56},[39,139610,2359],{"class":45},[39,139612,139613],{"class":41,"line":106},[39,139614,2630],{"class":45},[19,139616,139376],{},[29,139618,139619],{"className":127497,"code":132817,"language":127499,"meta":34,"style":34},[36,139620,139621,139643,139647,139657],{"__ignoreMap":34},[39,139622,139623,139625,139627,139629,139631,139633,139635,139637,139639,139641],{"class":41,"line":42},[39,139624,52665],{"class":52354},[39,139626,13491],{"class":45},[39,139628,19],{"class":52354},[39,139630,13491],{"class":45},[39,139632,10],{"class":52354},[39,139634,13491],{"class":45},[39,139636,2205],{"class":52354},[39,139638,13491],{"class":45},[39,139640,1174],{"class":52354},[39,139642,16628],{"class":45},[39,139644,139645],{"class":41,"line":74},[39,139646,132846],{"class":102},[39,139648,139649,139651,139653,139655],{"class":41,"line":99},[39,139650,129113],{"class":56},[39,139652,52491],{"class":45},[39,139654,61923],{"class":56},[39,139656,2359],{"class":45},[39,139658,139659],{"class":41,"line":106},[39,139660,2630],{"class":45},[19,139662,139663],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,139665,139666,139667,139670],{},"3 号盒子是 ",[36,139668,139669],{},"hotwords"," 热词模块定位",[2205,139672,139673,139676,139679],{},[1174,139674,139675],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[1174,139677,139678],{},"给里面所有的a标签设置 左右10px的外边距",[1174,139680,139681],{},"给第一个a标签设置文字变红色（#c81623）",[19,139683,139336],{},[29,139685,139687],{"className":127497,"code":139686,"language":127499,"meta":34,"style":34},"div {\n  margin: 0 auto;\n}\n",[36,139688,139689,139695,139707],{"__ignoreMap":34},[39,139690,139691,139693],{"class":41,"line":42},[39,139692,52665],{"class":52354},[39,139694,16628],{"class":45},[39,139696,139697,139699,139701,139703,139705],{"class":41,"line":74},[39,139698,71524],{"class":56},[39,139700,52491],{"class":45},[39,139702,260],{"class":56},[39,139704,52610],{"class":56},[39,139706,2359],{"class":45},[39,139708,139709],{"class":41,"line":99},[39,139710,2630],{"class":45},[19,139712,139376],{},[29,139714,139715],{"className":127497,"code":139686,"language":127499,"meta":34,"style":34},[36,139716,139717,139723,139735],{"__ignoreMap":34},[39,139718,139719,139721],{"class":41,"line":42},[39,139720,52665],{"class":52354},[39,139722,16628],{"class":45},[39,139724,139725,139727,139729,139731,139733],{"class":41,"line":74},[39,139726,71524],{"class":56},[39,139728,52491],{"class":45},[39,139730,260],{"class":56},[39,139732,52610],{"class":56},[39,139734,2359],{"class":45},[39,139736,139737],{"class":41,"line":99},[39,139738,2630],{"class":45},[19,139740,139741,139742,139745],{},"4 号盒子是 ",[36,139743,139744],{},"shopcar"," 购物车模块",[2205,139747,139748,139753,139756,139759],{},[1174,139749,124280,139750,139752],{},[36,139751,139744],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[1174,139754,139755],{},"count 统计部分用绝对定位做",[1174,139757,139758],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[1174,139760,139761],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,139763,139336],{},[29,139765,139766],{"className":127497,"code":132929,"language":127499,"meta":34,"style":34},[36,139767,139768,139772,139786,139790,139804,139808,139822,139826,139840,139844],{"__ignoreMap":34},[39,139769,139770],{"class":41,"line":42},[39,139771,132936],{"class":102},[39,139773,139774,139776,139778,139780,139782,139784],{"class":41,"line":74},[39,139775,132941],{"class":3021},[39,139777,80861],{"class":45},[39,139779,129857],{"class":56},[39,139781,52491],{"class":45},[39,139783,132950],{"class":56},[39,139785,130427],{"class":45},[39,139787,139788],{"class":41,"line":99},[39,139789,132957],{"class":102},[39,139791,139792,139794,139796,139798,139800,139802],{"class":41,"line":106},[39,139793,132962],{"class":3021},[39,139795,80861],{"class":45},[39,139797,129857],{"class":56},[39,139799,52491],{"class":45},[39,139801,55818],{"class":56},[39,139803,130427],{"class":45},[39,139805,139806],{"class":41,"line":112},[39,139807,132977],{"class":102},[39,139809,139810,139812,139814,139816,139818,139820],{"class":41,"line":118},[39,139811,132982],{"class":3021},[39,139813,80861],{"class":45},[39,139815,129857],{"class":56},[39,139817,52491],{"class":45},[39,139819,55885],{"class":56},[39,139821,130427],{"class":45},[39,139823,139824],{"class":41,"line":413},[39,139825,132997],{"class":102},[39,139827,139828,139830,139832,139834,139836,139838],{"class":41,"line":419},[39,139829,133002],{"class":3021},[39,139831,80861],{"class":45},[39,139833,129857],{"class":56},[39,139835,52491],{"class":45},[39,139837,87287],{"class":56},[39,139839,130427],{"class":45},[39,139841,139842],{"class":41,"line":425},[39,139843,133017],{"class":102},[39,139845,139846,139848,139850,139852,139854,139856],{"class":41,"line":443},[39,139847,133022],{"class":3021},[39,139849,80861],{"class":45},[39,139851,129857],{"class":56},[39,139853,52491],{"class":45},[39,139855,133031],{"class":56},[39,139857,130427],{"class":45},[19,139859,139376],{},[29,139861,139862],{"className":127497,"code":132929,"language":127499,"meta":34,"style":34},[36,139863,139864,139868,139882,139886,139900,139904,139918,139922,139936,139940],{"__ignoreMap":34},[39,139865,139866],{"class":41,"line":42},[39,139867,132936],{"class":102},[39,139869,139870,139872,139874,139876,139878,139880],{"class":41,"line":74},[39,139871,132941],{"class":3021},[39,139873,80861],{"class":45},[39,139875,129857],{"class":56},[39,139877,52491],{"class":45},[39,139879,132950],{"class":56},[39,139881,130427],{"class":45},[39,139883,139884],{"class":41,"line":99},[39,139885,132957],{"class":102},[39,139887,139888,139890,139892,139894,139896,139898],{"class":41,"line":106},[39,139889,132962],{"class":3021},[39,139891,80861],{"class":45},[39,139893,129857],{"class":56},[39,139895,52491],{"class":45},[39,139897,55818],{"class":56},[39,139899,130427],{"class":45},[39,139901,139902],{"class":41,"line":112},[39,139903,132977],{"class":102},[39,139905,139906,139908,139910,139912,139914,139916],{"class":41,"line":118},[39,139907,132982],{"class":3021},[39,139909,80861],{"class":45},[39,139911,129857],{"class":56},[39,139913,52491],{"class":45},[39,139915,55885],{"class":56},[39,139917,130427],{"class":45},[39,139919,139920],{"class":41,"line":413},[39,139921,132997],{"class":102},[39,139923,139924,139926,139928,139930,139932,139934],{"class":41,"line":419},[39,139925,133002],{"class":3021},[39,139927,80861],{"class":45},[39,139929,129857],{"class":56},[39,139931,52491],{"class":45},[39,139933,87287],{"class":56},[39,139935,130427],{"class":45},[39,139937,139938],{"class":41,"line":425},[39,139939,133017],{"class":102},[39,139941,139942,139944,139946,139948,139950,139952],{"class":41,"line":443},[39,139943,133022],{"class":3021},[39,139945,80861],{"class":45},[39,139947,129857],{"class":56},[39,139949,52491],{"class":45},[39,139951,133031],{"class":56},[39,139953,130427],{"class":45},[1188,139955,139957,139958,139960],{"id":139956},"_1544-nav导航模块制作","15.4.4 ",[36,139959,54767],{},"导航模块制作",[269,139962],{"style":127353,"src":139963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139965,139966,139968],{},[36,139967,54767],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139970,139971,139972],{},"1 号盒子左侧浮动，",[36,139973,139974],{},"dropdown",[2205,139976,139977,139987,139995,140001,140009,140019,140027,140038],{},[1174,139978,139979,139980,101963,139983,139986],{},"1号盒子有讲究，根据相关性 里面包含 ",[36,139981,139982],{},".dt",[36,139984,139985],{},".dd"," 两个盒子",[1174,139988,139989,139991,139992,139994],{},[36,139990,139982],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[36,139993,139985],{}," 挤到下面去了",[1174,139996,139997,139998,140000],{},"给 ",[36,139999,139985],{}," 盒子设置宽度 和 高度，以及背景颜色",[1174,140002,139997,140003,140005,140006,121182],{},[36,140004,139985],{}," 盒子里面定义 无序列表 （",[36,140007,140008],{},"ul > li > a",[1174,140010,140011,140012,140014,140015,140018],{},"每个 ",[36,140013,1174],{}," 都有一个高度（",[36,140016,140017],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[1174,140020,139997,140021,140023,140024,121182],{},[36,140022,1174],{}," 里面的a设置文字大小（",[36,140025,140026],{},"14px",[1174,140028,139997,140029,140031,140032,140034,140035,140037],{},[36,140030,1174],{}," 设置 ",[36,140033,128658],{},"，当鼠标移入的时候，让",[36,140036,1174],{},"的背景变成白色，让里面的文字变成红色",[1174,140039,140040,140042,140043,140045,140046,140048],{},[36,140041,1174],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[36,140044,1174],{},"的右侧，那么给",[36,140047,1174],{},"设置相对定位",[19,140050,140051],{},"一定要注意相关性",[19,140053,139336],{},[29,140055,140056],{"className":127497,"code":139339,"language":127499,"meta":34,"style":34},[36,140057,140058,140066,140076,140086],{"__ignoreMap":34},[39,140059,140060,140062,140064],{"class":41,"line":42},[39,140061,52665],{"class":52354},[39,140063,138498],{"class":3021},[39,140065,16628],{"class":45},[39,140067,140068,140070,140072,140074],{"class":41,"line":74},[39,140069,138505],{"class":56},[39,140071,52491],{"class":45},[39,140073,8708],{"class":1319},[39,140075,2359],{"class":45},[39,140077,140078,140080,140082,140084],{"class":41,"line":99},[39,140079,129113],{"class":56},[39,140081,52491],{"class":45},[39,140083,61923],{"class":56},[39,140085,2359],{"class":45},[39,140087,140088],{"class":41,"line":106},[39,140089,2630],{"class":45},[19,140091,139376],{},[29,140093,140094],{"className":127497,"code":139339,"language":127499,"meta":34,"style":34},[36,140095,140096,140104,140114,140124],{"__ignoreMap":34},[39,140097,140098,140100,140102],{"class":41,"line":42},[39,140099,52665],{"class":52354},[39,140101,138498],{"class":3021},[39,140103,16628],{"class":45},[39,140105,140106,140108,140110,140112],{"class":41,"line":74},[39,140107,138505],{"class":56},[39,140109,52491],{"class":45},[39,140111,8708],{"class":1319},[39,140113,2359],{"class":45},[39,140115,140116,140118,140120,140122],{"class":41,"line":99},[39,140117,129113],{"class":56},[39,140119,52491],{"class":45},[39,140121,61923],{"class":56},[39,140123,2359],{"class":45},[39,140125,140126],{"class":41,"line":106},[39,140127,2630],{"class":45},[19,140129,140130],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140132,140133,140134,140137],{},"2 号盒子左侧浮动，",[36,140135,140136],{},"navitems"," 导航栏组",[2205,140139,140140,140145,140154],{},[1174,140141,140142,140143],{},"里面结构是 ",[36,140144,140008],{},[1174,140146,140147,140148,140150,140151,140153],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[36,140149,46],{},"左右的",[36,140152,31938],{},"把两侧撑开",[1174,140155,140156],{},"让文字垂直居中（行高等于高度）",[269,140158],{"style":127353,"src":140159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140161,140162],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140164,139336],{},[29,140166,140168],{"className":127497,"code":140167,"language":127499,"meta":34,"style":34},".box {\n  float: left;\n}\n",[36,140169,140170,140176,140186],{"__ignoreMap":34},[39,140171,140172,140174],{"class":41,"line":42},[39,140173,131345],{"class":3021},[39,140175,16628],{"class":45},[39,140177,140178,140180,140182,140184],{"class":41,"line":74},[39,140179,131977],{"class":56},[39,140181,52491],{"class":45},[39,140183,24792],{"class":56},[39,140185,2359],{"class":45},[39,140187,140188],{"class":41,"line":99},[39,140189,2630],{"class":45},[19,140191,139376],{},[29,140193,140194],{"className":127497,"code":140167,"language":127499,"meta":34,"style":34},[36,140195,140196,140202,140212],{"__ignoreMap":34},[39,140197,140198,140200],{"class":41,"line":42},[39,140199,131345],{"class":3021},[39,140201,16628],{"class":45},[39,140203,140204,140206,140208,140210],{"class":41,"line":74},[39,140205,131977],{"class":56},[39,140207,52491],{"class":45},[39,140209,24792],{"class":56},[39,140211,2359],{"class":45},[39,140213,140214],{"class":41,"line":99},[39,140215,2630],{"class":45},[19,140217,140218],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[269,140220],{"style":127353,"src":140221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[29,140223,140224],{"className":127497,"code":131654,"language":127499,"meta":34,"style":34},[36,140225,140226,140232,140248],{"__ignoreMap":34},[39,140227,140228,140230],{"class":41,"line":42},[39,140229,52665],{"class":52354},[39,140231,16628],{"class":45},[39,140233,140234,140236,140238,140240,140242,140244,140246],{"class":41,"line":74},[39,140235,71950],{"class":56},[39,140237,52491],{"class":45},[39,140239,57],{"class":56},[39,140241,52546],{"class":49},[39,140243,52575],{"class":56},[39,140245,130889],{"class":56},[39,140247,2359],{"class":45},[39,140249,140250],{"class":41,"line":99},[39,140251,2630],{"class":45},[1188,140253,140255],{"id":140254},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[269,140257],{"style":127353,"src":140258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[2205,140260,140261,140266,140271],{},[1174,140262,140263,140265],{},[36,140264,132700],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[1174,140267,140268,140270],{},[36,140269,132700],{}," 里面有一个大的版心",[1174,140272,140273,140274,140277,140278],{},"版心里面包含 1 号盒子，",[36,140275,140276],{},"mod_service"," 是服务模块，mod 是模块的意思",[2205,140279,140280,140285,140298,140314,140319],{},[1174,140281,139997,140282,140284],{},[36,140283,140276],{}," 设置高度（80px）和下边框",[1174,140286,140287,140288,140291,140292,140294,140295,140297],{},"在里面定义 ",[36,140289,140290],{},"ul > li"," ,每个",[36,140293,1174],{}," 宽度是300px 高度是 50px，给每个",[36,140296,1174],{},"设置35px的左内边距",[1174,140299,140300,140301,140303,140304,140306,140307,140309,140310,19466,140312,121182],{},"在每个",[36,140302,1174],{},"里面，放一个 ",[36,140305,23966],{},"（里面放图标），一个",[36,140308,52665],{},"（里面放",[36,140311,52665],{},[36,140313,19],{},[1174,140315,139997,140316,140318],{},[36,140317,23966],{},"设置浮动，让h5与这个div左右排列",[1174,140320,140321],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,140323,139336],{},[29,140325,140327],{"className":127497,"code":140326,"language":127499,"meta":34,"style":34},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[36,140328,140329,140335,140347,140359,140386],{"__ignoreMap":34},[39,140330,140331,140333],{"class":41,"line":42},[39,140332,135254],{"class":3021},[39,140334,16628],{"class":45},[39,140336,140337,140339,140341,140343,140345],{"class":41,"line":74},[39,140338,71622],{"class":56},[39,140340,52491],{"class":45},[39,140342,1898],{"class":56},[39,140344,52546],{"class":49},[39,140346,2359],{"class":45},[39,140348,140349,140351,140353,140355,140357],{"class":41,"line":99},[39,140350,71842],{"class":56},[39,140352,52491],{"class":45},[39,140354,1898],{"class":56},[39,140356,52546],{"class":49},[39,140358,2359],{"class":45},[39,140360,140361,140363,140365,140367,140369,140371,140373,140375,140378,140380,140382,140384],{"class":41,"line":106},[39,140362,71665],{"class":56},[39,140364,52491],{"class":45},[39,140366,62780],{"class":56},[39,140368,1221],{"class":45},[39,140370,135293],{"class":254},[39,140372,14770],{"class":45},[39,140374,62790],{"class":56},[39,140376,140377],{"class":56}," -10",[39,140379,52546],{"class":49},[39,140381,135312],{"class":56},[39,140383,52546],{"class":49},[39,140385,2359],{"class":45},[39,140387,140388],{"class":41,"line":112},[39,140389,2630],{"class":45},[19,140391,139376],{},[29,140393,140394],{"className":127497,"code":140326,"language":127499,"meta":34,"style":34},[36,140395,140396,140402,140414,140426,140452],{"__ignoreMap":34},[39,140397,140398,140400],{"class":41,"line":42},[39,140399,135254],{"class":3021},[39,140401,16628],{"class":45},[39,140403,140404,140406,140408,140410,140412],{"class":41,"line":74},[39,140405,71622],{"class":56},[39,140407,52491],{"class":45},[39,140409,1898],{"class":56},[39,140411,52546],{"class":49},[39,140413,2359],{"class":45},[39,140415,140416,140418,140420,140422,140424],{"class":41,"line":99},[39,140417,71842],{"class":56},[39,140419,52491],{"class":45},[39,140421,1898],{"class":56},[39,140423,52546],{"class":49},[39,140425,2359],{"class":45},[39,140427,140428,140430,140432,140434,140436,140438,140440,140442,140444,140446,140448,140450],{"class":41,"line":106},[39,140429,71665],{"class":56},[39,140431,52491],{"class":45},[39,140433,62780],{"class":56},[39,140435,1221],{"class":45},[39,140437,135293],{"class":254},[39,140439,14770],{"class":45},[39,140441,62790],{"class":56},[39,140443,140377],{"class":56},[39,140445,52546],{"class":49},[39,140447,135312],{"class":56},[39,140449,52546],{"class":49},[39,140451,2359],{"class":45},[39,140453,140454],{"class":41,"line":112},[39,140455,2630],{"class":45},[19,140457,140458],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[2205,140460,140461,140464,140470,140476,140488],{},[1174,140462,140463],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[1174,140465,140466,140467,121182],{},"里面的布局利用 自定义列表来实现（",[36,140468,140469],{},"dl > dt + dd",[1174,140471,139997,140472,140475],{},[36,140473,140474],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[1174,140477,139997,140478,140481,140482,19466,140484,140487],{},[36,140479,140480],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[36,140483,140480],{},[36,140485,140486],{},"dd","之间有些距离",[1174,140489,140490],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140492,139336],{},[29,140494,140495],{"className":127497,"code":139686,"language":127499,"meta":34,"style":34},[36,140496,140497,140503,140515],{"__ignoreMap":34},[39,140498,140499,140501],{"class":41,"line":42},[39,140500,52665],{"class":52354},[39,140502,16628],{"class":45},[39,140504,140505,140507,140509,140511,140513],{"class":41,"line":74},[39,140506,71524],{"class":56},[39,140508,52491],{"class":45},[39,140510,260],{"class":56},[39,140512,52610],{"class":56},[39,140514,2359],{"class":45},[39,140516,140517],{"class":41,"line":99},[39,140518,2630],{"class":45},[19,140520,139376],{},[29,140522,140523],{"className":127497,"code":139686,"language":127499,"meta":34,"style":34},[36,140524,140525,140531,140543],{"__ignoreMap":34},[39,140526,140527,140529],{"class":41,"line":42},[39,140528,52665],{"class":52354},[39,140530,16628],{"class":45},[39,140532,140533,140535,140537,140539,140541],{"class":41,"line":74},[39,140534,71524],{"class":56},[39,140536,52491],{"class":45},[39,140538,260],{"class":56},[39,140540,52610],{"class":56},[39,140542,2359],{"class":45},[39,140544,140545],{"class":41,"line":99},[39,140546,2630],{"class":45},[19,140548,140549],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[2205,140551,140552,140561,140564,140575],{},[1174,140553,140554,140555,140557,140558,140560],{},"分为上下两块，上面是 ",[36,140556,132717],{}," 友情链接，下面是 ",[36,140559,132710],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[1174,140562,140563],{},"把内容分别复制到相应模块中",[1174,140565,139997,140566,140568,140569,140571,140572,140574],{},[36,140567,132717],{}," 设置 15px 的下外边距，给",[36,140570,132717],{}," 里面 的 ",[36,140573,46],{}," 标签设置 左右 3px 的外边距",[1174,140576,140577,140578,140580],{},"给",[36,140579,132710],{}," 设置 20px 的行高",[19,140582,139336],{},[29,140584,140585],{"className":127497,"code":139686,"language":127499,"meta":34,"style":34},[36,140586,140587,140593,140605],{"__ignoreMap":34},[39,140588,140589,140591],{"class":41,"line":42},[39,140590,52665],{"class":52354},[39,140592,16628],{"class":45},[39,140594,140595,140597,140599,140601,140603],{"class":41,"line":74},[39,140596,71524],{"class":56},[39,140598,52491],{"class":45},[39,140600,260],{"class":56},[39,140602,52610],{"class":56},[39,140604,2359],{"class":45},[39,140606,140607],{"class":41,"line":99},[39,140608,2630],{"class":45},[19,140610,139376],{},[29,140612,140613],{"className":127497,"code":139686,"language":127499,"meta":34,"style":34},[36,140614,140615,140621,140633],{"__ignoreMap":34},[39,140616,140617,140619],{"class":41,"line":42},[39,140618,52665],{"class":52354},[39,140620,16628],{"class":45},[39,140622,140623,140625,140627,140629,140631],{"class":41,"line":74},[39,140624,71524],{"class":56},[39,140626,52491],{"class":45},[39,140628,260],{"class":56},[39,140630,52610],{"class":56},[39,140632,2359],{"class":45},[39,140634,140635],{"class":41,"line":99},[39,140636,2630],{"class":45},[19,140638,140639],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1133,140641,140642],{},"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":34,"searchDepth":74,"depth":74,"links":140644},[140645,140646,140647,140654],{"id":138925,"depth":74,"text":138926},{"id":138944,"depth":74,"text":138945},{"id":138971,"depth":74,"text":138972,"children":140648},[140649,140650,140651,140652,140653],{"id":138975,"depth":99,"text":138976},{"id":138988,"depth":99,"text":138989},{"id":139012,"depth":99,"text":139013},{"id":139034,"depth":99,"text":139035},{"id":139106,"depth":99,"text":139107},{"id":139232,"depth":74,"text":139233,"children":140655},[140656,140657,140658,140659,140661],{"id":139236,"depth":99,"text":139237},{"id":139243,"depth":99,"text":139244},{"id":139415,"depth":99,"text":139416},{"id":139956,"depth":99,"text":140660},"15.4.4 nav导航模块制作",{"id":140254,"depth":99,"text":140255},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138917,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140668,"title":140669,"body":140670,"description":1142,"extension":1143,"meta":143072,"navigation":1145,"path":143073,"seo":143074,"stem":143075,"__hash__":143076},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140671,"toc":143049},[140672,140675,140679,140683,140695,140698,140701,140704,140715,140717,140741,140743,140767,140772,140775,140777,140813,140815,140851,140854,140859,140862,140865,140868,140898,140905,140908,140918,140920,140954,140957,140991,140997,141014,141016,141052,141054,141090,141095,141120,141122,141148,141150,141174,141181,141184,141248,141250,141292,141294,141334,141341,141346,141348,141378,141380,141410,141414,141417,141424,141436,141438,141464,141466,141490,141493,141495,141519,141525,141535,141537,141567,141569,141599,141606,141647,141649,141685,141687,141723,141727,141730,141733,141736,141742,141747,141750,141773,141776,141800,141803,141827,141832,141835,141838,141841,141844,141847,141921,141923,141953,141955,141985,141988,141991,142023,142027,142031,142045,142054,142057,142062,142064,142158,142160,142254,142277,142279,142303,142305,142329,142336,142339,142349,142351,142375,142380,142388,142390,142420,142425,142465,142467,142493,142495,142521,142525,142528,142533,142536,142540,142548,142555,142563,142565,142595,142597,142627,142635,142638,142641,142643,142673,142675,142705,142708,142713,142715,142739,142741,142765,142768,142853,142855,142879,142881,142905,142909,142911,142935,142937,142971,142975,142989,142992,142997,143000,143005,143008,143038,143046],[10,140673,140669],{"id":140674},"_16-品优购项目下篇-主体与页面开发",[14,140676,140678],{"id":140677},"_161-项目主体模块制作","16.1 项目主体模块制作",[1188,140680,140682],{"id":140681},"_1611-首页制作","16.1.1 首页制作",[19,140684,140685,140687,140688,140690,140691,140694],{},[304,140686,103003],{}," 主体模块是 ",[304,140689,75112],{}," 里面专有的，注意需要新的样式文件 ",[304,140692,140693],{},"index.css，"," 就不要写在common.css中了",[269,140696],{"style":127353,"src":140697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[269,140699],{"style":127353,"src":140700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,140702,140703],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[2205,140705,140706,140709,140712],{},[1174,140707,140708],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[1174,140710,140711],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[1174,140713,140714],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,140716,139336],{},[29,140718,140719],{"className":127497,"code":140167,"language":127499,"meta":34,"style":34},[36,140720,140721,140727,140737],{"__ignoreMap":34},[39,140722,140723,140725],{"class":41,"line":42},[39,140724,131345],{"class":3021},[39,140726,16628],{"class":45},[39,140728,140729,140731,140733,140735],{"class":41,"line":74},[39,140730,131977],{"class":56},[39,140732,52491],{"class":45},[39,140734,24792],{"class":56},[39,140736,2359],{"class":45},[39,140738,140739],{"class":41,"line":99},[39,140740,2630],{"class":45},[19,140742,139376],{},[29,140744,140745],{"className":127497,"code":140167,"language":127499,"meta":34,"style":34},[36,140746,140747,140753,140763],{"__ignoreMap":34},[39,140748,140749,140751],{"class":41,"line":42},[39,140750,131345],{"class":3021},[39,140752,16628],{"class":45},[39,140754,140755,140757,140759,140761],{"class":41,"line":74},[39,140756,131977],{"class":56},[39,140758,52491],{"class":45},[39,140760,24792],{"class":56},[39,140762,2359],{"class":45},[39,140764,140765],{"class":41,"line":99},[39,140766,2630],{"class":45},[1171,140768,140769],{},[1174,140770,140771],{},"左侧focus模块制作",[269,140773],{"style":127353,"src":140774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,140776,139336],{},[29,140778,140779],{"className":127497,"code":128820,"language":127499,"meta":34,"style":34},[36,140780,140781,140789,140799,140809],{"__ignoreMap":34},[39,140782,140783,140785,140787],{"class":41,"line":42},[39,140784,54875],{"class":52354},[39,140786,62954],{"class":3021},[39,140788,16628],{"class":45},[39,140790,140791,140793,140795,140797],{"class":41,"line":74},[39,140792,128835],{"class":56},[39,140794,52491],{"class":45},[39,140796,55943],{"class":56},[39,140798,2359],{"class":45},[39,140800,140801,140803,140805,140807],{"class":41,"line":99},[39,140802,71852],{"class":56},[39,140804,52491],{"class":45},[39,140806,55791],{"class":56},[39,140808,2359],{"class":45},[39,140810,140811],{"class":41,"line":106},[39,140812,2630],{"class":45},[19,140814,139376],{},[29,140816,140817],{"className":127497,"code":128820,"language":127499,"meta":34,"style":34},[36,140818,140819,140827,140837,140847],{"__ignoreMap":34},[39,140820,140821,140823,140825],{"class":41,"line":42},[39,140822,54875],{"class":52354},[39,140824,62954],{"class":3021},[39,140826,16628],{"class":45},[39,140828,140829,140831,140833,140835],{"class":41,"line":74},[39,140830,128835],{"class":56},[39,140832,52491],{"class":45},[39,140834,55943],{"class":56},[39,140836,2359],{"class":45},[39,140838,140839,140841,140843,140845],{"class":41,"line":99},[39,140840,71852],{"class":56},[39,140842,52491],{"class":45},[39,140844,55791],{"class":56},[39,140846,2359],{"class":45},[39,140848,140849],{"class":41,"line":106},[39,140850,2630],{"class":45},[19,140852,140853],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[1171,140855,140856],{"start":74},[1174,140857,140858],{},"右侧newsflash模块制作",[269,140860],{"style":127353,"src":140861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140863,140864],{},"右侧的模块 分为上中下三个盒子",[19,140866,140867],{},"结构代码：",[29,140869,140870],{"className":128244,"code":134999,"language":128246,"meta":34,"style":34},[36,140871,140872],{"__ignoreMap":34},[39,140873,140874,140876,140878,140880,140882,140884,140886,140888,140890,140892,140894,140896],{"class":41,"line":42},[39,140875,2108],{"class":45},[39,140877,269],{"class":52354},[39,140879,56293],{"class":3021},[39,140881,50],{"class":45},[39,140883,135014],{"class":1319},[39,140885,56301],{"class":3021},[39,140887,50],{"class":45},[39,140889,135021],{"class":1319},[39,140891,135024],{"class":3021},[39,140893,50],{"class":45},[39,140895,135029],{"class":1319},[39,140897,52361],{"class":45},[19,140899,140900,140901,140904],{},"1 号盒子为 ",[36,140902,140903],{},"news"," 新闻模块 高度为 165px",[269,140906],{"style":127353,"src":140907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140909,140910,140911,140914,140915],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[36,140912,140913],{},"news-hd","，下面是 ",[36,140916,140917],{},"news-bd",[19,140919,140867],{},[29,140921,140922],{"className":128244,"code":131601,"language":128246,"meta":34,"style":34},[36,140923,140924,140928,140942,140946],{"__ignoreMap":34},[39,140925,140926],{"class":41,"line":42},[39,140927,131608],{"class":102},[39,140929,140930,140932,140934,140936,140938,140940],{"class":41,"line":74},[39,140931,2108],{"class":45},[39,140933,52665],{"class":52354},[39,140935,54540],{"class":3021},[39,140937,50],{"class":45},[39,140939,131621],{"class":1319},[39,140941,52361],{"class":45},[39,140943,140944],{"class":41,"line":99},[39,140945,131628],{"class":45},[39,140947,140948,140950,140952],{"class":41,"line":106},[39,140949,52839],{"class":45},[39,140951,52665],{"class":52354},[39,140953,52361],{"class":45},[19,140955,140956],{},"样式代码：",[29,140958,140959],{"className":128244,"code":131601,"language":128246,"meta":34,"style":34},[36,140960,140961,140965,140979,140983],{"__ignoreMap":34},[39,140962,140963],{"class":41,"line":42},[39,140964,131608],{"class":102},[39,140966,140967,140969,140971,140973,140975,140977],{"class":41,"line":74},[39,140968,2108],{"class":45},[39,140970,52665],{"class":52354},[39,140972,54540],{"class":3021},[39,140974,50],{"class":45},[39,140976,131621],{"class":1319},[39,140978,52361],{"class":45},[39,140980,140981],{"class":41,"line":99},[39,140982,131628],{"class":45},[39,140984,140985,140987,140989],{"class":41,"line":106},[39,140986,52839],{"class":45},[39,140988,52665],{"class":52354},[39,140990,52361],{"class":45},[19,140992,140993,140994,140996],{},"上面是",[36,140995,140913],{},"，设置高度是 33px，设置下边框",[2205,140998,140999,141005],{},[1174,141000,141001,141002,141004],{},"里面放一个",[36,141003,23966],{}," 标题",[1174,141006,141007,141008,141010,141011,141013],{},"放一个a",[36,141009,103638],{},"，内容是 更多，然后让 ",[36,141012,46],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141015,140867],{},[29,141017,141018],{"className":127497,"code":139339,"language":127499,"meta":34,"style":34},[36,141019,141020,141028,141038,141048],{"__ignoreMap":34},[39,141021,141022,141024,141026],{"class":41,"line":42},[39,141023,52665],{"class":52354},[39,141025,138498],{"class":3021},[39,141027,16628],{"class":45},[39,141029,141030,141032,141034,141036],{"class":41,"line":74},[39,141031,138505],{"class":56},[39,141033,52491],{"class":45},[39,141035,8708],{"class":1319},[39,141037,2359],{"class":45},[39,141039,141040,141042,141044,141046],{"class":41,"line":99},[39,141041,129113],{"class":56},[39,141043,52491],{"class":45},[39,141045,61923],{"class":56},[39,141047,2359],{"class":45},[39,141049,141050],{"class":41,"line":106},[39,141051,2630],{"class":45},[19,141053,140956],{},[29,141055,141056],{"className":127497,"code":139339,"language":127499,"meta":34,"style":34},[36,141057,141058,141066,141076,141086],{"__ignoreMap":34},[39,141059,141060,141062,141064],{"class":41,"line":42},[39,141061,52665],{"class":52354},[39,141063,138498],{"class":3021},[39,141065,16628],{"class":45},[39,141067,141068,141070,141072,141074],{"class":41,"line":74},[39,141069,138505],{"class":56},[39,141071,52491],{"class":45},[39,141073,8708],{"class":1319},[39,141075,2359],{"class":45},[39,141077,141078,141080,141082,141084],{"class":41,"line":99},[39,141079,129113],{"class":56},[39,141081,52491],{"class":45},[39,141083,61923],{"class":56},[39,141085,2359],{"class":45},[39,141087,141088],{"class":41,"line":106},[39,141089,2630],{"class":45},[19,141091,141092,141093],{},"下面是",[36,141094,140917],{},[2205,141096,141097,141105],{},[1174,141098,141099,141100,101963,141102,141104],{},"里面包含 ",[36,141101,2205],{},[36,141103,1174],{}," 还有链接",[1174,141106,140577,141107,141109,141110,141112,141113,141116,141117],{},[36,141108,1174],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[36,141111,132163],{}," 2.设置 ",[36,141114,141115],{},"white-space: nowrap;"," 3. 设置 ",[36,141118,141119],{},"text-overflow: ellipsis;",[19,141121,140867],{},[29,141123,141125],{"className":127497,"code":141124,"language":127499,"meta":34,"style":34},"div {\n  overflow: hidden;\n}\n",[36,141126,141127,141133,141144],{"__ignoreMap":34},[39,141128,141129,141131],{"class":41,"line":42},[39,141130,52665],{"class":52354},[39,141132,16628],{"class":45},[39,141134,141135,141138,141140,141142],{"class":41,"line":74},[39,141136,141137],{"class":56},"  overflow",[39,141139,52491],{"class":45},[39,141141,62768],{"class":56},[39,141143,2359],{"class":45},[39,141145,141146],{"class":41,"line":99},[39,141147,2630],{"class":45},[19,141149,140956],{},[29,141151,141152],{"className":127497,"code":141124,"language":127499,"meta":34,"style":34},[36,141153,141154,141160,141170],{"__ignoreMap":34},[39,141155,141156,141158],{"class":41,"line":42},[39,141157,52665],{"class":52354},[39,141159,16628],{"class":45},[39,141161,141162,141164,141166,141168],{"class":41,"line":74},[39,141163,141137],{"class":56},[39,141165,52491],{"class":45},[39,141167,62768],{"class":56},[39,141169,2359],{"class":45},[39,141171,141172],{"class":41,"line":99},[39,141173,2630],{"class":45},[19,141175,141176,141177,141180],{},"2 号盒子为 ",[36,141178,141179],{},"lifeservice"," 生活服务模块 高度为 209px",[269,141182],{"style":127353,"src":141183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[2205,141185,141186,141189,141199,141223,141234],{},[1174,141187,141188],{},"设置边框（左右下边框）",[1174,141190,141191,141192,141195,141196,141198],{},"里面的内容 是 ",[36,141193,141194],{},"ul > 12*li","，给",[36,141197,1174],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[1174,141200,141201,141202],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[2205,141203,141204,141209,141218],{},[1174,141205,141206,141208],{},[36,141207,141179],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[1174,141210,141211,141212,141214,141215,141217],{},"可以让 ",[36,141213,141179],{}," 里面的 ",[36,141216,2205],{}," 宽度为 252，就可以装的下 4 个 小 li",[1174,141219,141220,141222],{},[36,141221,141179],{}," 盒子 overflow 隐藏多余的部分就可以了",[1174,141224,117412,141225,141227,141228,141230,141231,141233],{},[36,141226,1174],{}," 里面放一个 ",[36,141229,1644],{},"（里面放图标），下面的文本用 ",[36,141232,19],{}," 标签包裹",[1174,141235,139997,141236,141238,141239,141241,141242,140031,141244,141247],{},[36,141237,1644],{}," 设置 24px宽和28px的高（注意 ",[36,141240,1644],{}," 是行内元素， 转成行内块），给 ",[36,141243,1174],{},[36,141245,141246],{},"text-align:center"," 让里面内容居中显示",[19,141249,140867],{},[29,141251,141253],{"className":127497,"code":141252,"language":127499,"meta":34,"style":34},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[36,141254,141255,141273,141278,141288],{"__ignoreMap":34},[39,141256,141257,141259,141261,141263,141265,141267,141269,141271],{"class":41,"line":42},[39,141258,39],{"class":52354},[39,141260,13491],{"class":45},[39,141262,46],{"class":52354},[39,141264,13491],{"class":45},[39,141266,24609],{"class":52354},[39,141268,13491],{"class":45},[39,141270,304],{"class":52354},[39,141272,16628],{"class":45},[39,141274,141275],{"class":41,"line":74},[39,141276,141277],{"class":102},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[39,141279,141280,141282,141284,141286],{"class":41,"line":99},[39,141281,129113],{"class":56},[39,141283,52491],{"class":45},[39,141285,129175],{"class":56},[39,141287,2359],{"class":45},[39,141289,141290],{"class":41,"line":106},[39,141291,2630],{"class":45},[19,141293,140956],{},[29,141295,141296],{"className":127497,"code":141252,"language":127499,"meta":34,"style":34},[36,141297,141298,141316,141320,141330],{"__ignoreMap":34},[39,141299,141300,141302,141304,141306,141308,141310,141312,141314],{"class":41,"line":42},[39,141301,39],{"class":52354},[39,141303,13491],{"class":45},[39,141305,46],{"class":52354},[39,141307,13491],{"class":45},[39,141309,24609],{"class":52354},[39,141311,13491],{"class":45},[39,141313,304],{"class":52354},[39,141315,16628],{"class":45},[39,141317,141318],{"class":41,"line":74},[39,141319,141277],{"class":102},[39,141321,141322,141324,141326,141328],{"class":41,"line":99},[39,141323,129113],{"class":56},[39,141325,52491],{"class":45},[39,141327,129175],{"class":56},[39,141329,2359],{"class":45},[39,141331,141332],{"class":41,"line":106},[39,141333,2630],{"class":45},[19,141335,141336,141337,141340],{},"3 号盒子为 ",[36,141338,141339],{},"bargain"," 特价商品",[2205,141342,141343],{},[1174,141344,141345],{},"这个比较简单，直接插入一张图片即可",[19,141347,140867],{},[29,141349,141350],{"className":128244,"code":134999,"language":128246,"meta":34,"style":34},[36,141351,141352],{"__ignoreMap":34},[39,141353,141354,141356,141358,141360,141362,141364,141366,141368,141370,141372,141374,141376],{"class":41,"line":42},[39,141355,2108],{"class":45},[39,141357,269],{"class":52354},[39,141359,56293],{"class":3021},[39,141361,50],{"class":45},[39,141363,135014],{"class":1319},[39,141365,56301],{"class":3021},[39,141367,50],{"class":45},[39,141369,135021],{"class":1319},[39,141371,135024],{"class":3021},[39,141373,50],{"class":45},[39,141375,135029],{"class":1319},[39,141377,52361],{"class":45},[19,141379,140956],{},[29,141381,141382],{"className":128244,"code":134999,"language":128246,"meta":34,"style":34},[36,141383,141384],{"__ignoreMap":34},[39,141385,141386,141388,141390,141392,141394,141396,141398,141400,141402,141404,141406,141408],{"class":41,"line":42},[39,141387,2108],{"class":45},[39,141389,269],{"class":52354},[39,141391,56293],{"class":3021},[39,141393,50],{"class":45},[39,141395,135014],{"class":1319},[39,141397,56301],{"class":3021},[39,141399,50],{"class":45},[39,141401,135021],{"class":1319},[39,141403,135024],{"class":3021},[39,141405,50],{"class":45},[39,141407,135029],{"class":1319},[39,141409,52361],{"class":45},[1188,141411,141413],{"id":141412},"_1612-推荐模块制作","16.1.2 推荐模块制作",[269,141415],{"style":127353,"src":141416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,141418,141419,141420,141423],{},"大盒子 ",[36,141421,141422],{},"recom"," 推荐模块 recommend",[2205,141425,141426],{},[1174,141427,141428,141429,141431,141432,141435],{},"给这个 ",[36,141430,141422],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[36,141433,141434],{},"#ebebeb","），设置距离上边 12px",[19,141437,140867],{},[29,141439,141441],{"className":127497,"code":141440,"language":127499,"meta":34,"style":34},"div {\n  background-color: #f0f0f0;\n}\n",[36,141442,141443,141449,141460],{"__ignoreMap":34},[39,141444,141445,141447],{"class":41,"line":42},[39,141446,52665],{"class":52354},[39,141448,16628],{"class":45},[39,141450,141451,141453,141455,141458],{"class":41,"line":74},[39,141452,71932],{"class":56},[39,141454,52491],{"class":45},[39,141456,141457],{"class":56},"#f0f0f0",[39,141459,2359],{"class":45},[39,141461,141462],{"class":41,"line":99},[39,141463,2630],{"class":45},[19,141465,140956],{},[29,141467,141468],{"className":127497,"code":141440,"language":127499,"meta":34,"style":34},[36,141469,141470,141476,141486],{"__ignoreMap":34},[39,141471,141472,141474],{"class":41,"line":42},[39,141473,52665],{"class":52354},[39,141475,16628],{"class":45},[39,141477,141478,141480,141482,141484],{"class":41,"line":74},[39,141479,71932],{"class":56},[39,141481,52491],{"class":45},[39,141483,141457],{"class":56},[39,141485,2359],{"class":45},[39,141487,141488],{"class":41,"line":99},[39,141489,2630],{"class":45},[19,141491,141492],{},"里面包含 2 个盒子， 浮动即可",[19,141494,140867],{},[29,141496,141497],{"className":127497,"code":140167,"language":127499,"meta":34,"style":34},[36,141498,141499,141505,141515],{"__ignoreMap":34},[39,141500,141501,141503],{"class":41,"line":42},[39,141502,131345],{"class":3021},[39,141504,16628],{"class":45},[39,141506,141507,141509,141511,141513],{"class":41,"line":74},[39,141508,131977],{"class":56},[39,141510,52491],{"class":45},[39,141512,24792],{"class":56},[39,141514,2359],{"class":45},[39,141516,141517],{"class":41,"line":99},[39,141518,2630],{"class":45},[19,141520,141521,141522],{},"1 号盒子 ",[36,141523,141524],{},"recom_hd",[2205,141526,141527,141530],{},[1174,141528,141529],{},"设置宽度205px，高度163px",[1174,141531,141001,141532,141534],{},[36,141533,269],{},"标签，插入图片即可",[19,141536,140867],{},[29,141538,141539],{"className":128244,"code":134999,"language":128246,"meta":34,"style":34},[36,141540,141541],{"__ignoreMap":34},[39,141542,141543,141545,141547,141549,141551,141553,141555,141557,141559,141561,141563,141565],{"class":41,"line":42},[39,141544,2108],{"class":45},[39,141546,269],{"class":52354},[39,141548,56293],{"class":3021},[39,141550,50],{"class":45},[39,141552,135014],{"class":1319},[39,141554,56301],{"class":3021},[39,141556,50],{"class":45},[39,141558,135021],{"class":1319},[39,141560,135024],{"class":3021},[39,141562,50],{"class":45},[39,141564,135029],{"class":1319},[39,141566,52361],{"class":45},[19,141568,140956],{},[29,141570,141571],{"className":128244,"code":134999,"language":128246,"meta":34,"style":34},[36,141572,141573],{"__ignoreMap":34},[39,141574,141575,141577,141579,141581,141583,141585,141587,141589,141591,141593,141595,141597],{"class":41,"line":42},[39,141576,2108],{"class":45},[39,141578,269],{"class":52354},[39,141580,56293],{"class":3021},[39,141582,50],{"class":45},[39,141584,135014],{"class":1319},[39,141586,56301],{"class":3021},[39,141588,50],{"class":45},[39,141590,135021],{"class":1319},[39,141592,135024],{"class":3021},[39,141594,50],{"class":45},[39,141596,135029],{"class":1319},[39,141598,52361],{"class":45},[19,141600,141601,141602,141605],{},"2 号盒子 ",[36,141603,141604],{},"recom_bd"," ，注意里面的小竖线",[2205,141607,141608,141619,141622,141627,141632],{},[1174,141609,141610,141611,141613,141614,141616,141617],{},"右侧结构里面放 ",[36,141612,2205],{}," 包含 4个 ",[36,141615,1174],{},"，每个li里面包含一个",[36,141618,269],{},[1174,141620,141621],{},"直接利用切片工具把里面的内容当成一张图片",[1174,141623,139997,141624,141626],{},[36,141625,1174],{}," 设置浮动",[1174,141628,139997,141629,141631],{},[36,141630,269],{}," 设置宽高，宽度 248px，高度 163px",[1174,141633,141634,141635,141195,141638,141640,141641,141643,141644],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[36,141636,141637],{},"top 10px",[36,141639,1174],{},"设置相对定位（注意，最后一个",[36,141642,1174],{},"不用设置伪元素），可以利用 ",[36,141645,141646],{},"nth-child(-n+3){...}",[19,141648,140867],{},[29,141650,141651],{"className":127497,"code":139339,"language":127499,"meta":34,"style":34},[36,141652,141653,141661,141671,141681],{"__ignoreMap":34},[39,141654,141655,141657,141659],{"class":41,"line":42},[39,141656,52665],{"class":52354},[39,141658,138498],{"class":3021},[39,141660,16628],{"class":45},[39,141662,141663,141665,141667,141669],{"class":41,"line":74},[39,141664,138505],{"class":56},[39,141666,52491],{"class":45},[39,141668,8708],{"class":1319},[39,141670,2359],{"class":45},[39,141672,141673,141675,141677,141679],{"class":41,"line":99},[39,141674,129113],{"class":56},[39,141676,52491],{"class":45},[39,141678,61923],{"class":56},[39,141680,2359],{"class":45},[39,141682,141683],{"class":41,"line":106},[39,141684,2630],{"class":45},[19,141686,140956],{},[29,141688,141689],{"className":127497,"code":139339,"language":127499,"meta":34,"style":34},[36,141690,141691,141699,141709,141719],{"__ignoreMap":34},[39,141692,141693,141695,141697],{"class":41,"line":42},[39,141694,52665],{"class":52354},[39,141696,138498],{"class":3021},[39,141698,16628],{"class":45},[39,141700,141701,141703,141705,141707],{"class":41,"line":74},[39,141702,138505],{"class":56},[39,141704,52491],{"class":45},[39,141706,8708],{"class":1319},[39,141708,2359],{"class":45},[39,141710,141711,141713,141715,141717],{"class":41,"line":99},[39,141712,129113],{"class":56},[39,141714,52491],{"class":45},[39,141716,61923],{"class":56},[39,141718,2359],{"class":45},[39,141720,141721],{"class":41,"line":106},[39,141722,2630],{"class":45},[1188,141724,141726],{"id":141725},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[269,141728],{"style":127353,"src":141729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,141731,141732],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,141734,141735],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,141737,141738,141741],{},[36,141739,141740],{},"box_hd"," 制作",[19,141743,141521,141744,141746],{},[36,141745,141740],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[269,141748],{"style":127353,"src":141749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[2205,141751,141752,141757,141762,141765],{},[1174,141753,141754,141756],{},[36,141755,141740],{}," 给 30px 的高度，2个像素的下边框",[1174,141758,141759,141760],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[36,141761,140008],{},[1174,141763,141764],{},"左侧盒左浮动，右侧盒子右浮动",[1174,141766,141767,141769,141770,141772],{},[36,141768,46],{},"标签之间的距离用左右的",[36,141771,31938],{},"撑开即可",[19,141774,141775],{},"结构代码",[29,141777,141778],{"className":127497,"code":140167,"language":127499,"meta":34,"style":34},[36,141779,141780,141786,141796],{"__ignoreMap":34},[39,141781,141782,141784],{"class":41,"line":42},[39,141783,131345],{"class":3021},[39,141785,16628],{"class":45},[39,141787,141788,141790,141792,141794],{"class":41,"line":74},[39,141789,131977],{"class":56},[39,141791,52491],{"class":45},[39,141793,24792],{"class":56},[39,141795,2359],{"class":45},[39,141797,141798],{"class":41,"line":99},[39,141799,2630],{"class":45},[19,141801,141802],{},"样式代码",[29,141804,141805],{"className":127497,"code":140167,"language":127499,"meta":34,"style":34},[36,141806,141807,141813,141823],{"__ignoreMap":34},[39,141808,141809,141811],{"class":41,"line":42},[39,141810,131345],{"class":3021},[39,141812,16628],{"class":45},[39,141814,141815,141817,141819,141821],{"class":41,"line":74},[39,141816,131977],{"class":56},[39,141818,52491],{"class":45},[39,141820,24792],{"class":56},[39,141822,2359],{"class":45},[39,141824,141825],{"class":41,"line":99},[39,141826,2630],{"class":45},[19,141828,141829,141741],{},[36,141830,141831],{},"box_bd",[19,141833,141834],{},"2 号盒子 box_bd，不要给高度",[269,141836],{"style":127353,"src":141837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,141839,141840],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,141842,141843],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141845,141846],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[2205,141848,141849,141861,141877],{},[1174,141850,141851,141853,141854,141857,141858,141860],{},[36,141852,141831],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[36,141855,141856],{},"tab_content","，在",[36,141859,141856],{}," 里面包裹tab选项卡对应的内容",[1174,141862,141863,141864,141867,141868,141870,141871,141873,141874,141876],{},"内容被一个大盒子包裹（",[36,141865,141866],{},"tab_list_item","），里面是 ",[36,141869,2205],{}," 包裹 5个 ",[36,141872,1174],{},"，每个",[36,141875,1174],{},"设置对应的宽度，然后设置浮动",[1174,141878,141879,141880,141882,141883,141885,141886],{},"而这5个",[36,141881,1174],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[36,141884,1174],{},"设置",[2205,141887,141888,141906,141909],{},[1174,141889,141890,141891,141893,141894,141896,141897,141899,141900,141902,141903,141905],{},"第一个小 ",[36,141892,1174],{}," 分为上下结构，上面是 ",[36,141895,2205],{}," 包裹 ",[36,141898,1174],{}," ，",[36,141901,1174],{},"里面包裹 ",[36,141904,46],{},"，下面插入一张图片",[1174,141907,141908],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[1174,141910,141911,141912,141914,141915,141917,141918,141920],{},"后面的小 ",[36,141913,1174],{}," 里面先放一个",[36,141916,46],{},"标签，然后在",[36,141919,46],{},"标签里面插入图片即可",[19,141922,141775],{},[29,141924,141925],{"className":128244,"code":134999,"language":128246,"meta":34,"style":34},[36,141926,141927],{"__ignoreMap":34},[39,141928,141929,141931,141933,141935,141937,141939,141941,141943,141945,141947,141949,141951],{"class":41,"line":42},[39,141930,2108],{"class":45},[39,141932,269],{"class":52354},[39,141934,56293],{"class":3021},[39,141936,50],{"class":45},[39,141938,135014],{"class":1319},[39,141940,56301],{"class":3021},[39,141942,50],{"class":45},[39,141944,135021],{"class":1319},[39,141946,135024],{"class":3021},[39,141948,50],{"class":45},[39,141950,135029],{"class":1319},[39,141952,52361],{"class":45},[19,141954,141802],{},[29,141956,141957],{"className":128244,"code":134999,"language":128246,"meta":34,"style":34},[36,141958,141959],{"__ignoreMap":34},[39,141960,141961,141963,141965,141967,141969,141971,141973,141975,141977,141979,141981,141983],{"class":41,"line":42},[39,141962,2108],{"class":45},[39,141964,269],{"class":52354},[39,141966,56293],{"class":3021},[39,141968,50],{"class":45},[39,141970,135014],{"class":1319},[39,141972,56301],{"class":3021},[39,141974,50],{"class":45},[39,141976,135021],{"class":1319},[39,141978,135024],{"class":3021},[39,141980,50],{"class":45},[39,141982,135029],{"class":1319},[39,141984,52361],{"class":45},[19,141986,141987],{},"tab栏切换需求！！！！！！介绍：",[269,141989],{"style":127353,"src":141990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[2205,141992,141993,142001,142007,142010],{},[1174,141994,141995,141998,141999],{},[36,141996,141997],{},"tab","栏的布局是 ",[36,142000,140008],{},[1174,142002,142003,142004,142006],{},"有多少个",[36,142005,141997],{},"选项卡，那么对应就有多少个内容",[1174,142008,142009],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[1174,142011,142012,142013,142016,142017,142019,142020,142022],{},"等后面我们学习了",[36,142014,142015],{},"js","之后，我们就会配合",[36,142018,142015],{},"来实现，",[36,142021,141997],{},"栏的切换",[14,142024,142026],{"id":142025},"_162-列表制作","16.2 列表制作",[1188,142028,142030],{"id":142029},"_1621-准备工作","16.2.1 准备工作",[2205,142032,142033,142036,142039,142042],{},[1174,142034,142035],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[1174,142037,142038],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[1174,142040,142041],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[1174,142043,142044],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[1188,142046,142048,142049,101963,142051,142053],{"id":142047},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[36,142050,132502],{},[36,142052,54767],{}," 修改",[269,142055],{"style":127353,"src":142056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[2205,142058,142059],{},[1174,142060,142061],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142063,140867],{},[29,142065,142066],{"className":127497,"code":132929,"language":127499,"meta":34,"style":34},[36,142067,142068,142072,142086,142090,142104,142108,142122,142126,142140,142144],{"__ignoreMap":34},[39,142069,142070],{"class":41,"line":42},[39,142071,132936],{"class":102},[39,142073,142074,142076,142078,142080,142082,142084],{"class":41,"line":74},[39,142075,132941],{"class":3021},[39,142077,80861],{"class":45},[39,142079,129857],{"class":56},[39,142081,52491],{"class":45},[39,142083,132950],{"class":56},[39,142085,130427],{"class":45},[39,142087,142088],{"class":41,"line":99},[39,142089,132957],{"class":102},[39,142091,142092,142094,142096,142098,142100,142102],{"class":41,"line":106},[39,142093,132962],{"class":3021},[39,142095,80861],{"class":45},[39,142097,129857],{"class":56},[39,142099,52491],{"class":45},[39,142101,55818],{"class":56},[39,142103,130427],{"class":45},[39,142105,142106],{"class":41,"line":112},[39,142107,132977],{"class":102},[39,142109,142110,142112,142114,142116,142118,142120],{"class":41,"line":118},[39,142111,132982],{"class":3021},[39,142113,80861],{"class":45},[39,142115,129857],{"class":56},[39,142117,52491],{"class":45},[39,142119,55885],{"class":56},[39,142121,130427],{"class":45},[39,142123,142124],{"class":41,"line":413},[39,142125,132997],{"class":102},[39,142127,142128,142130,142132,142134,142136,142138],{"class":41,"line":419},[39,142129,133002],{"class":3021},[39,142131,80861],{"class":45},[39,142133,129857],{"class":56},[39,142135,52491],{"class":45},[39,142137,87287],{"class":56},[39,142139,130427],{"class":45},[39,142141,142142],{"class":41,"line":425},[39,142143,133017],{"class":102},[39,142145,142146,142148,142150,142152,142154,142156],{"class":41,"line":443},[39,142147,133022],{"class":3021},[39,142149,80861],{"class":45},[39,142151,129857],{"class":56},[39,142153,52491],{"class":45},[39,142155,133031],{"class":56},[39,142157,130427],{"class":45},[19,142159,140956],{},[29,142161,142162],{"className":127497,"code":132929,"language":127499,"meta":34,"style":34},[36,142163,142164,142168,142182,142186,142200,142204,142218,142222,142236,142240],{"__ignoreMap":34},[39,142165,142166],{"class":41,"line":42},[39,142167,132936],{"class":102},[39,142169,142170,142172,142174,142176,142178,142180],{"class":41,"line":74},[39,142171,132941],{"class":3021},[39,142173,80861],{"class":45},[39,142175,129857],{"class":56},[39,142177,52491],{"class":45},[39,142179,132950],{"class":56},[39,142181,130427],{"class":45},[39,142183,142184],{"class":41,"line":99},[39,142185,132957],{"class":102},[39,142187,142188,142190,142192,142194,142196,142198],{"class":41,"line":106},[39,142189,132962],{"class":3021},[39,142191,80861],{"class":45},[39,142193,129857],{"class":56},[39,142195,52491],{"class":45},[39,142197,55818],{"class":56},[39,142199,130427],{"class":45},[39,142201,142202],{"class":41,"line":112},[39,142203,132977],{"class":102},[39,142205,142206,142208,142210,142212,142214,142216],{"class":41,"line":118},[39,142207,132982],{"class":3021},[39,142209,80861],{"class":45},[39,142211,129857],{"class":56},[39,142213,52491],{"class":45},[39,142215,55885],{"class":56},[39,142217,130427],{"class":45},[39,142219,142220],{"class":41,"line":413},[39,142221,132997],{"class":102},[39,142223,142224,142226,142228,142230,142232,142234],{"class":41,"line":419},[39,142225,133002],{"class":3021},[39,142227,80861],{"class":45},[39,142229,129857],{"class":56},[39,142231,52491],{"class":45},[39,142233,87287],{"class":56},[39,142235,130427],{"class":45},[39,142237,142238],{"class":41,"line":425},[39,142239,133017],{"class":102},[39,142241,142242,142244,142246,142248,142250,142252],{"class":41,"line":443},[39,142243,133022],{"class":3021},[39,142245,80861],{"class":45},[39,142247,129857],{"class":56},[39,142249,52491],{"class":45},[39,142251,133031],{"class":56},[39,142253,130427],{"class":45},[2205,142255,142256,142267],{},[1174,142257,142258,142259,142262,142263,101963,142265],{},"1 号盒子左侧浮动 ",[36,142260,142261],{},"sk_list"," 里面包含 ",[36,142264,2205],{},[36,142266,1174],{},[1174,142268,142269,142270,142262,142273,101963,142275],{},"2 号盒子左侧浮动 ",[36,142271,142272],{},"sk_con",[36,142274,2205],{},[36,142276,1174],{},[19,142278,140867],{},[29,142280,142281],{"className":127497,"code":140167,"language":127499,"meta":34,"style":34},[36,142282,142283,142289,142299],{"__ignoreMap":34},[39,142284,142285,142287],{"class":41,"line":42},[39,142286,131345],{"class":3021},[39,142288,16628],{"class":45},[39,142290,142291,142293,142295,142297],{"class":41,"line":74},[39,142292,131977],{"class":56},[39,142294,52491],{"class":45},[39,142296,24792],{"class":56},[39,142298,2359],{"class":45},[39,142300,142301],{"class":41,"line":99},[39,142302,2630],{"class":45},[19,142304,140956],{},[29,142306,142307],{"className":127497,"code":140167,"language":127499,"meta":34,"style":34},[36,142308,142309,142315,142325],{"__ignoreMap":34},[39,142310,142311,142313],{"class":41,"line":42},[39,142312,131345],{"class":3021},[39,142314,16628],{"class":45},[39,142316,142317,142319,142321,142323],{"class":41,"line":74},[39,142318,131977],{"class":56},[39,142320,52491],{"class":45},[39,142322,24792],{"class":56},[39,142324,2359],{"class":45},[39,142326,142327],{"class":41,"line":99},[39,142328,2630],{"class":45},[1188,142330,142332,142333],{"id":142331},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[36,142334,142335],{},"sk_container",[269,142337],{"style":127353,"src":142338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[2205,142340,142341,142346],{},[1174,142342,141521,142343,142345],{},[36,142344,142335],{}," 给宽度 1200，不要给高度",[1174,142347,142348],{},"一定不要忘记清除浮动",[19,142350,140867],{},[29,142352,142353],{"className":127497,"code":140167,"language":127499,"meta":34,"style":34},[36,142354,142355,142361,142371],{"__ignoreMap":34},[39,142356,142357,142359],{"class":41,"line":42},[39,142358,131345],{"class":3021},[39,142360,16628],{"class":45},[39,142362,142363,142365,142367,142369],{"class":41,"line":74},[39,142364,131977],{"class":56},[39,142366,52491],{"class":45},[39,142368,24792],{"class":56},[39,142370,2359],{"class":45},[39,142372,142373],{"class":41,"line":99},[39,142374,2630],{"class":45},[1171,142376,142377],{},[1174,142378,142379],{},"sk_hd制作",[2205,142381,142382],{},[1174,142383,141601,142384,142387],{},[36,142385,142386],{},"sk_hd"," ，插入图片即可",[19,142389,140867],{},[29,142391,142392],{"className":128244,"code":134999,"language":128246,"meta":34,"style":34},[36,142393,142394],{"__ignoreMap":34},[39,142395,142396,142398,142400,142402,142404,142406,142408,142410,142412,142414,142416,142418],{"class":41,"line":42},[39,142397,2108],{"class":45},[39,142399,269],{"class":52354},[39,142401,56293],{"class":3021},[39,142403,50],{"class":45},[39,142405,135014],{"class":1319},[39,142407,56301],{"class":3021},[39,142409,50],{"class":45},[39,142411,135021],{"class":1319},[39,142413,135024],{"class":3021},[39,142415,50],{"class":45},[39,142417,135029],{"class":1319},[39,142419,52361],{"class":45},[1171,142421,142422],{"start":74},[1174,142423,142424],{},"sk_bd制作",[2205,142426,142427],{},[1174,142428,142429,142430,142433,142434,101963,142436,142438],{},"3 号盒子 ",[36,142431,142432],{},"sk_bd"," ，里面包含很多的 ",[36,142435,2205],{},[36,142437,1174],{},[2205,142439,142440,142449],{},[1174,142441,142442,142443,142445,142446,142448],{},"当鼠标移入到 ",[36,142444,1174],{}," 上面的时候显示红色的边框，在这里先给 ",[36,142447,1174],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[1174,142450,142451,142452,142454,142455,142457,142458,142461,142462,142464],{},"由于给每个 ",[36,142453,1174],{}," 都设置了外边距，导致一行的最后一个 ",[36,142456,1174],{}," 掉了下来，在这里我们利用 ",[36,142459,142460],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[36,142463,1174],{},"，去掉外边距就好了",[19,142466,140867],{},[29,142468,142469],{"className":127497,"code":139686,"language":127499,"meta":34,"style":34},[36,142470,142471,142477,142489],{"__ignoreMap":34},[39,142472,142473,142475],{"class":41,"line":42},[39,142474,52665],{"class":52354},[39,142476,16628],{"class":45},[39,142478,142479,142481,142483,142485,142487],{"class":41,"line":74},[39,142480,71524],{"class":56},[39,142482,52491],{"class":45},[39,142484,260],{"class":56},[39,142486,52610],{"class":56},[39,142488,2359],{"class":45},[39,142490,142491],{"class":41,"line":99},[39,142492,2630],{"class":45},[19,142494,140956],{},[29,142496,142497],{"className":127497,"code":139686,"language":127499,"meta":34,"style":34},[36,142498,142499,142505,142517],{"__ignoreMap":34},[39,142500,142501,142503],{"class":41,"line":42},[39,142502,52665],{"class":52354},[39,142504,16628],{"class":45},[39,142506,142507,142509,142511,142513,142515],{"class":41,"line":74},[39,142508,71524],{"class":56},[39,142510,52491],{"class":45},[39,142512,260],{"class":56},[39,142514,52610],{"class":56},[39,142516,2359],{"class":45},[39,142518,142519],{"class":41,"line":99},[39,142520,2630],{"class":45},[14,142522,142524],{"id":142523},"_163-注册页面制作","16.3 注册页面制作",[269,142526],{"style":127353,"src":142527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,142529,142530,142532],{},[304,142531,10081],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[269,142534],{"style":127353,"src":142535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[1188,142537,142539],{"id":142538},"_1631-准备工作","16.3.1 准备工作",[2205,142541,142542,142545],{},[1174,142543,142544],{},"创建register.html，引入 base.css，引入favicon图标",[1174,142546,142547],{},"创建register.css ，在html页面进行引入",[1188,142549,142551,142552,142554],{"id":142550},"_1632-header-头部实现","16.3.2 ",[36,142553,132502],{}," 头部实现",[2205,142556,142557,142560],{},[1174,142558,142559],{},"整个内容用 版心 进行包裹",[1174,142561,142562],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142564,140867],{},[29,142566,142567],{"className":128244,"code":134999,"language":128246,"meta":34,"style":34},[36,142568,142569],{"__ignoreMap":34},[39,142570,142571,142573,142575,142577,142579,142581,142583,142585,142587,142589,142591,142593],{"class":41,"line":42},[39,142572,2108],{"class":45},[39,142574,269],{"class":52354},[39,142576,56293],{"class":3021},[39,142578,50],{"class":45},[39,142580,135014],{"class":1319},[39,142582,56301],{"class":3021},[39,142584,50],{"class":45},[39,142586,135021],{"class":1319},[39,142588,135024],{"class":3021},[39,142590,50],{"class":45},[39,142592,135029],{"class":1319},[39,142594,52361],{"class":45},[19,142596,140956],{},[29,142598,142599],{"className":128244,"code":134999,"language":128246,"meta":34,"style":34},[36,142600,142601],{"__ignoreMap":34},[39,142602,142603,142605,142607,142609,142611,142613,142615,142617,142619,142621,142623,142625],{"class":41,"line":42},[39,142604,2108],{"class":45},[39,142606,269],{"class":52354},[39,142608,56293],{"class":3021},[39,142610,50],{"class":45},[39,142612,135014],{"class":1319},[39,142614,56301],{"class":3021},[39,142616,50],{"class":45},[39,142618,135021],{"class":1319},[39,142620,135024],{"class":3021},[39,142622,50],{"class":45},[39,142624,135029],{"class":1319},[39,142626,52361],{"class":45},[1188,142628,142630,142631,142634],{"id":142629},"_1633-registerarea-主体模块实现","16.3.3 ",[36,142632,142633],{},"registerarea"," 主体模块实现",[269,142636],{"style":127353,"src":142637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,142639,142640],{},"整个大盒子 高度为 522px，设置4个边框",[19,142642,140867],{},[29,142644,142645],{"className":127497,"code":131654,"language":127499,"meta":34,"style":34},[36,142646,142647,142653,142669],{"__ignoreMap":34},[39,142648,142649,142651],{"class":41,"line":42},[39,142650,52665],{"class":52354},[39,142652,16628],{"class":45},[39,142654,142655,142657,142659,142661,142663,142665,142667],{"class":41,"line":74},[39,142656,71950],{"class":56},[39,142658,52491],{"class":45},[39,142660,57],{"class":56},[39,142662,52546],{"class":49},[39,142664,52575],{"class":56},[39,142666,130889],{"class":56},[39,142668,2359],{"class":45},[39,142670,142671],{"class":41,"line":99},[39,142672,2630],{"class":45},[19,142674,140956],{},[29,142676,142677],{"className":127497,"code":131654,"language":127499,"meta":34,"style":34},[36,142678,142679,142685,142701],{"__ignoreMap":34},[39,142680,142681,142683],{"class":41,"line":42},[39,142682,52665],{"class":52354},[39,142684,16628],{"class":45},[39,142686,142687,142689,142691,142693,142695,142697,142699],{"class":41,"line":74},[39,142688,71950],{"class":56},[39,142690,52491],{"class":45},[39,142692,57],{"class":56},[39,142694,52546],{"class":49},[39,142696,52575],{"class":56},[39,142698,130889],{"class":56},[39,142700,2359],{"class":45},[39,142702,142703],{"class":41,"line":99},[39,142704,2630],{"class":45},[19,142706,142707],{},"1号盒子 是一个 h3 标签，放标题",[2205,142709,142710],{},[1174,142711,142712],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,142714,140867],{},[29,142716,142717],{"className":127497,"code":140167,"language":127499,"meta":34,"style":34},[36,142718,142719,142725,142735],{"__ignoreMap":34},[39,142720,142721,142723],{"class":41,"line":42},[39,142722,131345],{"class":3021},[39,142724,16628],{"class":45},[39,142726,142727,142729,142731,142733],{"class":41,"line":74},[39,142728,131977],{"class":56},[39,142730,52491],{"class":45},[39,142732,24792],{"class":56},[39,142734,2359],{"class":45},[39,142736,142737],{"class":41,"line":99},[39,142738,2630],{"class":45},[19,142740,140956],{},[29,142742,142743],{"className":127497,"code":140167,"language":127499,"meta":34,"style":34},[36,142744,142745,142751,142761],{"__ignoreMap":34},[39,142746,142747,142749],{"class":41,"line":42},[39,142748,131345],{"class":3021},[39,142750,16628],{"class":45},[39,142752,142753,142755,142757,142759],{"class":41,"line":74},[39,142754,131977],{"class":56},[39,142756,52491],{"class":45},[39,142758,24792],{"class":56},[39,142760,2359],{"class":45},[39,142762,142763],{"class":41,"line":99},[39,142764,2630],{"class":45},[19,142766,142767],{},"2号盒子 里面放注册的内容",[2205,142769,142770,142773,142782,142796,142809,142812,142815,142833,142847],{},[1174,142771,142772],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[1174,142774,142775,142776,142778,142779,142781],{},"里面的内容利用 ",[36,142777,2205],{}," 包含 ",[36,142780,1174],{}," 来实现的（不需要用表格）",[1174,142783,140011,142784,142786,142787,142789,142790,142792,142793,142795],{},[36,142785,1174],{}," 里面，左侧放 ",[36,142788,34663],{}," 标签， 中间放",[36,142791,54875],{}," 标签， 右侧放 ",[36,142794,39],{}," 提示信息",[1174,142797,142798,142799,142801,142802,142804,142805,142808],{},"左侧 ",[36,142800,34663],{},"里面的文字都是右对齐，我们可以给",[36,142803,34663],{},"设置一个宽度（88px），然后利用",[36,142806,142807],{},"text-align"," 来设置右对齐",[1174,142810,142811],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[1174,142813,142814],{},"右侧 span修饰一下文字颜色",[1174,142816,142817,142818],{},"提示信息的样式优化",[2205,142819,142820,142823,142826],{},[1174,142821,142822],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[1174,142824,142825],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[1174,142827,142828,142829,142832],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[36,142830,142831],{},"vertical-algin"," 来设置 图片与文字对齐方式",[1174,142834,142835,142836],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[2205,142837,142838,142844],{},[1174,142839,142840,142841,142843],{},"设置 ",[36,142842,24609],{}," 的 左右 12px 的内边距，设置一下文字颜色",[1174,142845,142846],{},"分别设置 背景颜色",[1174,142848,142849,142850,142852],{},"同意协议 和 完成注册 都是用 ",[36,142851,1174],{}," 进行包裹",[19,142854,140867],{},[29,142856,142857],{"className":127497,"code":141440,"language":127499,"meta":34,"style":34},[36,142858,142859,142865,142875],{"__ignoreMap":34},[39,142860,142861,142863],{"class":41,"line":42},[39,142862,52665],{"class":52354},[39,142864,16628],{"class":45},[39,142866,142867,142869,142871,142873],{"class":41,"line":74},[39,142868,71932],{"class":56},[39,142870,52491],{"class":45},[39,142872,141457],{"class":56},[39,142874,2359],{"class":45},[39,142876,142877],{"class":41,"line":99},[39,142878,2630],{"class":45},[19,142880,140956],{},[29,142882,142883],{"className":127497,"code":141440,"language":127499,"meta":34,"style":34},[36,142884,142885,142891,142901],{"__ignoreMap":34},[39,142886,142887,142889],{"class":41,"line":42},[39,142888,52665],{"class":52354},[39,142890,16628],{"class":45},[39,142892,142893,142895,142897,142899],{"class":41,"line":74},[39,142894,71932],{"class":56},[39,142896,52491],{"class":45},[39,142898,141457],{"class":56},[39,142900,2359],{"class":45},[39,142902,142903],{"class":41,"line":99},[39,142904,2630],{"class":45},[1188,142906,142908],{"id":142907},"_1634-底部实现","16.3.4 底部实现",[19,142910,140867],{},[29,142912,142913],{"className":127497,"code":141440,"language":127499,"meta":34,"style":34},[36,142914,142915,142921,142931],{"__ignoreMap":34},[39,142916,142917,142919],{"class":41,"line":42},[39,142918,52665],{"class":52354},[39,142920,16628],{"class":45},[39,142922,142923,142925,142927,142929],{"class":41,"line":74},[39,142924,71932],{"class":56},[39,142926,52491],{"class":45},[39,142928,141457],{"class":56},[39,142930,2359],{"class":45},[39,142932,142933],{"class":41,"line":99},[39,142934,2630],{"class":45},[19,142936,140956],{},[29,142938,142939],{"className":128244,"code":131601,"language":128246,"meta":34,"style":34},[36,142940,142941,142945,142959,142963],{"__ignoreMap":34},[39,142942,142943],{"class":41,"line":42},[39,142944,131608],{"class":102},[39,142946,142947,142949,142951,142953,142955,142957],{"class":41,"line":74},[39,142948,2108],{"class":45},[39,142950,52665],{"class":52354},[39,142952,54540],{"class":3021},[39,142954,50],{"class":45},[39,142956,131621],{"class":1319},[39,142958,52361],{"class":45},[39,142960,142961],{"class":41,"line":99},[39,142962,131628],{"class":45},[39,142964,142965,142967,142969],{"class":41,"line":106},[39,142966,52839],{"class":45},[39,142968,52665],{"class":52354},[39,142970,52361],{"class":45},[14,142972,142974],{"id":142973},"_164-项目总结","16.4 项目总结",[1171,142976,142977,142980,142983,142986],{},[1174,142978,142979],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[1174,142981,142982],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[1174,142984,142985],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[1174,142987,142988],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[269,142990],{"style":127353,"src":142991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[1171,142993,142994],{"start":112},[1174,142995,142996],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[269,142998],{"style":127353,"src":142999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[1171,143001,143002],{"start":118},[1174,143003,143004],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[269,143006],{"style":127353,"src":143007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[29,143009,143010],{"className":128244,"code":137654,"language":128246,"meta":34,"style":34},[36,143011,143012],{"__ignoreMap":34},[39,143013,143014,143016,143018,143020,143022,143024,143026,143028,143030,143032,143034,143036],{"class":41,"line":42},[39,143015,2108],{"class":45},[39,143017,54875],{"class":52354},[39,143019,54878],{"class":3021},[39,143021,50],{"class":45},[39,143023,63753],{"class":1319},[39,143025,15976],{"class":3021},[39,143027,50],{"class":45},[39,143029,137675],{"class":1319},[39,143031,62074],{"class":3021},[39,143033,50],{"class":45},[39,143035,137682],{"class":1319},[39,143037,52361],{"class":45},[1171,143039,143040,143043],{"start":413},[1174,143041,143042],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[1174,143044,143045],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1133,143047,143048],{},"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":34,"searchDepth":74,"depth":74,"links":143050},[143051,143056,143063,143071],{"id":140677,"depth":74,"text":140678,"children":143052},[143053,143054,143055],{"id":140681,"depth":99,"text":140682},{"id":141412,"depth":99,"text":141413},{"id":141725,"depth":99,"text":141726},{"id":142025,"depth":74,"text":142026,"children":143057},[143058,143059,143061],{"id":142029,"depth":99,"text":142030},{"id":142047,"depth":99,"text":143060},"16.2.2 列表页 header 和 nav 修改",{"id":142331,"depth":99,"text":143062},"16.2.3 列表页主体 sk_container",{"id":142523,"depth":74,"text":142524,"children":143064},[143065,143066,143068,143070],{"id":142538,"depth":99,"text":142539},{"id":142550,"depth":99,"text":143067},"16.3.2 header 头部实现",{"id":142629,"depth":99,"text":143069},"16.3.3 registerarea 主体模块实现",{"id":142907,"depth":99,"text":142908},{"id":142973,"depth":74,"text":142974},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140669,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143078,"title":143079,"body":143080,"description":1142,"extension":1143,"meta":143188,"navigation":1145,"path":143189,"seo":143190,"stem":143191,"__hash__":143192},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143081,"toc":143183},[143082,143085,143089,143092,143095,143104,143113,143117,143122,143129,143147,143150,143153,143156,143159,143162,143165,143168,143171,143174,143177,143180],[10,143083,143079],{"id":143084},"_17-web服务器与网站发布",[14,143086,143088],{"id":143087},"_171-web服务器","17.1 Web服务器",[19,143090,143091],{},"把自己网站上传到服务器上，可以让其他人访问",[269,143093],{"style":127353,"src":143094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143096,143097,143100,143101],{},[304,143098,143099],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[304,143102,143103],{},"Web 服务器等",[19,143105,143106,143107,101963,143110,26797],{},"根据服务器在网络中所在的位置不同，又可分为 ",[304,143108,143109],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[304,143111,143112],{},"远程服务器",[1188,143114,143116],{"id":143115},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143118,143119],{},[304,143120,143121],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143123,143124,143125],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[46,143126,143127],{"href":143127,"rel":143128},"http:\u002F\u002Ffree.3v.do\u002F",[24921],[2205,143130,143131,143134,143137,143144],{},[1174,143132,143133],{},"去免费空间网站注册账号。",[1174,143135,143136],{},"记录下主机名、用户名、密码、域名。",[1174,143138,143139,143140,143143],{},"利用 ",[36,143141,143142],{},"utftp"," 软件 上传网站到远程服务器",[1174,143145,143146],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143148,143149],{},"使用软件上传，对上传软件文件进行解压",[269,143151],{"style":127353,"src":143152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[269,143154],{"style":127353,"src":143155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143157,143158],{},"输入刚刚申请的服务器账号信息：",[269,143160],{"style":127353,"src":143161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[269,143163],{"style":127353,"src":143164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[269,143166],{"style":127353,"src":143167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[269,143169],{"style":127353,"src":143170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143172,143173],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[269,143175],{"style":127353,"src":143176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143178,143179],{},"浏览器输入域名即可访问",[19,143181,143182],{},"首页一定必须是index",{"title":34,"searchDepth":74,"depth":74,"links":143184},[143185],{"id":143087,"depth":74,"text":143088,"children":143186},[143187],{"id":143115,"depth":99,"text":143116},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143079,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143194,"title":143195,"body":143196,"description":1142,"extension":1143,"meta":144123,"navigation":1145,"path":144124,"seo":144125,"stem":144126,"__hash__":144127},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143197,"toc":144106},[143198,143201,143205,143208,143211,143222,143225,143229,143233,143238,143241,143244,143247,143250,143254,143280,143284,143288,143291,143294,143298,143331,143335,143338,143341,143405,143409,143413,143416,143419,143422,143426,143471,143475,143478,143508,143512,143516,143519,143522,143526,143529,143598,143601,143709,143711,143717,143721,143724,143727,143823,143826,143830,143854,143858,143861,143865,143868,143872,143875,143878,143881,143884,143888,143891,143894,143898,143902,143905,143908,143911,143914,143918,143921,143925,143928,143931,143976,143980,143984,143987,143990,143993,144025,144029,144032,144066,144070,144073,144103],[10,143199,143195],{"id":143200},"_18-2d动画与3d转换",[14,143202,143204],{"id":143203},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143206,143207],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143209,143210],{},"转换（transform）你可以简单理解为变形",[2205,143212,143213,143216,143219],{},[1174,143214,143215],{},"移动：translate",[1174,143217,143218],{},"旋转：rotate",[1174,143220,143221],{},"缩放：scale",[269,143223],{"style":127353,"src":143224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[1188,143226,143228],{"id":143227},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23054,143230,143232],{"id":143231},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143234,143235,143236],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[304,143237,134156],{},[269,143239],{"style":127353,"src":143240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143242,143243],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143245,143246],{},"对于行内元素无效",[19,143248,143249],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23054,143251,143253],{"id":143252},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[29,143255,143256],{"className":127497,"code":139686,"language":127499,"meta":34,"style":34},[36,143257,143258,143264,143276],{"__ignoreMap":34},[39,143259,143260,143262],{"class":41,"line":42},[39,143261,52665],{"class":52354},[39,143263,16628],{"class":45},[39,143265,143266,143268,143270,143272,143274],{"class":41,"line":74},[39,143267,71524],{"class":56},[39,143269,52491],{"class":45},[39,143271,260],{"class":56},[39,143273,52610],{"class":56},[39,143275,2359],{"class":45},[39,143277,143278],{"class":41,"line":99},[39,143279,2630],{"class":45},[1188,143281,143283],{"id":143282},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23054,143285,143287],{"id":143286},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143289,143290],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[269,143292],{"style":127353,"src":143293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23054,143295,143297],{"id":143296},"_18122-旋转效果","18.1.2.2 旋转效果",[29,143299,143301],{"className":127497,"code":143300,"language":127499,"meta":34,"style":34},"div {\n  transform: rotate(45deg);\n}\n",[36,143302,143303,143309,143327],{"__ignoreMap":34},[39,143304,143305,143307],{"class":41,"line":42},[39,143306,52665],{"class":52354},[39,143308,16628],{"class":45},[39,143310,143311,143313,143315,143318,143320,143322,143325],{"class":41,"line":74},[39,143312,137481],{"class":56},[39,143314,52491],{"class":45},[39,143316,143317],{"class":56},"rotate",[39,143319,1221],{"class":45},[39,143321,1729],{"class":56},[39,143323,143324],{"class":49},"deg",[39,143326,3777],{"class":45},[39,143328,143329],{"class":41,"line":99},[39,143330,2630],{"class":45},[23054,143332,143334],{"id":143333},"_18123-三角做法","18.1.2.3 三角做法",[19,143336,143337],{},"该下标当经过最外层大盒子时会实现向上反转",[269,143339],{"style":127353,"src":143340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[29,143342,143343],{"className":127497,"code":136017,"language":127499,"meta":34,"style":34},[36,143344,143345,143349,143355,143365,143375,143391,143401],{"__ignoreMap":34},[39,143346,143347],{"class":41,"line":42},[39,143348,136024],{"class":102},[39,143350,143351,143353],{"class":41,"line":74},[39,143352,136029],{"class":3021},[39,143354,16628],{"class":45},[39,143356,143357,143359,143361,143363],{"class":41,"line":99},[39,143358,71622],{"class":56},[39,143360,52491],{"class":45},[39,143362,260],{"class":56},[39,143364,2359],{"class":45},[39,143366,143367,143369,143371,143373],{"class":41,"line":106},[39,143368,71842],{"class":56},[39,143370,52491],{"class":45},[39,143372,260],{"class":56},[39,143374,2359],{"class":45},[39,143376,143377,143379,143381,143383,143385,143387,143389],{"class":41,"line":112},[39,143378,71950],{"class":56},[39,143380,52491],{"class":45},[39,143382,146],{"class":56},[39,143384,52546],{"class":49},[39,143386,52575],{"class":56},[39,143388,65045],{"class":56},[39,143390,2359],{"class":45},[39,143392,143393,143395,143397,143399],{"class":41,"line":118},[39,143394,136072],{"class":56},[39,143396,52491],{"class":45},[39,143398,63423],{"class":56},[39,143400,2359],{"class":45},[39,143402,143403],{"class":41,"line":413},[39,143404,2630],{"class":45},[1188,143406,143408],{"id":143407},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23054,143410,143412],{"id":143411},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,143414,143415],{},"设置中心点",[269,143417],{"style":127353,"src":143418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,143420,143421],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23054,143423,143425],{"id":143424},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[29,143427,143429],{"className":127497,"code":143428,"language":127499,"meta":34,"style":34},"\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",[36,143430,143431,143436,143442,143457,143462,143467],{"__ignoreMap":34},[39,143432,143433],{"class":41,"line":42},[39,143434,143435],{"class":102},"\u002F* 转换中心点 *\u002F\n",[39,143437,143438,143440],{"class":41,"line":74},[39,143439,52665],{"class":52354},[39,143441,16628],{"class":45},[39,143443,143444,143447,143449,143451,143453,143455],{"class":41,"line":99},[39,143445,143446],{"class":56},"  transform-origin",[39,143448,52491],{"class":45},[39,143450,52646],{"class":56},[39,143452,18200],{"class":56},[39,143454,131360],{"class":45},[39,143456,136170],{"class":102},[39,143458,143459],{"class":41,"line":106},[39,143460,143461],{"class":102},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[39,143463,143464],{"class":41,"line":112},[39,143465,143466],{"class":102},"  \u002F* transform-origin: left top; *\u002F\n",[39,143468,143469],{"class":41,"line":118},[39,143470,2630],{"class":45},[23054,143472,143474],{"id":143473},"_18133-旋转案例","18.1.3.3 旋转案例",[269,143476],{"style":127353,"src":143477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[29,143479,143480],{"className":127497,"code":143300,"language":127499,"meta":34,"style":34},[36,143481,143482,143488,143504],{"__ignoreMap":34},[39,143483,143484,143486],{"class":41,"line":42},[39,143485,52665],{"class":52354},[39,143487,16628],{"class":45},[39,143489,143490,143492,143494,143496,143498,143500,143502],{"class":41,"line":74},[39,143491,137481],{"class":56},[39,143493,52491],{"class":45},[39,143495,143317],{"class":56},[39,143497,1221],{"class":45},[39,143499,1729],{"class":56},[39,143501,143324],{"class":49},[39,143503,3777],{"class":45},[39,143505,143506],{"class":41,"line":99},[39,143507,2630],{"class":45},[1188,143509,143511],{"id":143510},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23054,143513,143515],{"id":143514},"_18141-scale介绍","18.1.4.1 scale介绍",[19,143517,143518],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[269,143520],{"style":127353,"src":143521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23054,143523,143525],{"id":143524},"_18142-分页按钮","18.1.4.2 分页按钮",[269,143527],{"style":127353,"src":143528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[29,143530,143532],{"className":127497,"code":143531,"language":127499,"meta":34,"style":34},"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",[36,143533,143534,143540,143556,143560,143564,143569,143575,143589,143594],{"__ignoreMap":34},[39,143535,143536,143538],{"class":41,"line":42},[39,143537,52665],{"class":52354},[39,143539,16628],{"class":45},[39,143541,143542,143544,143546,143549,143551,143554],{"class":41,"line":74},[39,143543,137481],{"class":56},[39,143545,52491],{"class":45},[39,143547,143548],{"class":56},"scale",[39,143550,1221],{"class":45},[39,143552,143553],{"class":56},"1.2",[39,143555,3777],{"class":45},[39,143557,143558],{"class":41,"line":99},[39,143559,2630],{"class":45},[39,143561,143562],{"class":41,"line":106},[39,143563,136958],{"class":45},[39,143565,143566],{"class":41,"line":112},[39,143567,143568],{"class":102},"\u002F* 2D 缩放 *\u002F\n",[39,143570,143571,143573],{"class":41,"line":118},[39,143572,52665],{"class":52354},[39,143574,16628],{"class":45},[39,143576,143577,143579,143581,143583,143585,143587],{"class":41,"line":413},[39,143578,137481],{"class":56},[39,143580,52491],{"class":45},[39,143582,143548],{"class":56},[39,143584,1221],{"class":45},[39,143586,143553],{"class":56},[39,143588,3777],{"class":45},[39,143590,143591],{"class":41,"line":419},[39,143592,143593],{"class":102},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[39,143595,143596],{"class":41,"line":425},[39,143597,2630],{"class":45},[19,143599,143600],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[29,143602,143604],{"className":127497,"code":143603,"language":127499,"meta":34,"style":34},"\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",[36,143605,143606,143611,143621,143642,143663,143667,143672,143678,143705],{"__ignoreMap":34},[39,143607,143608],{"class":41,"line":42},[39,143609,143610],{"class":102},"\u002F* 定义动画 *\u002F\n",[39,143612,143613,143616,143619],{"class":41,"line":74},[39,143614,143615],{"class":49},"@keyframes",[39,143617,143618],{"class":254}," move",[39,143620,16628],{"class":45},[39,143622,143623,143626,143628,143630,143632,143635,143637,143639],{"class":41,"line":99},[39,143624,143625],{"class":3021},"  0%",[39,143627,80861],{"class":45},[39,143629,49188],{"class":56},[39,143631,52491],{"class":45},[39,143633,143634],{"class":56},"translateX",[39,143636,1221],{"class":45},[39,143638,260],{"class":56},[39,143640,143641],{"class":45},"); }\n",[39,143643,143644,143647,143649,143651,143653,143655,143657,143659,143661],{"class":41,"line":106},[39,143645,143646],{"class":3021},"  100%",[39,143648,80861],{"class":45},[39,143650,49188],{"class":56},[39,143652,52491],{"class":45},[39,143654,143634],{"class":56},[39,143656,1221],{"class":45},[39,143658,1519],{"class":56},[39,143660,52546],{"class":49},[39,143662,143641],{"class":45},[39,143664,143665],{"class":41,"line":112},[39,143666,2630],{"class":45},[39,143668,143669],{"class":41,"line":118},[39,143670,143671],{"class":102},"\u002F* 调用动画 *\u002F\n",[39,143673,143674,143676],{"class":41,"line":413},[39,143675,52665],{"class":52354},[39,143677,16628],{"class":45},[39,143679,143680,143683,143685,143687,143689,143691,143693,143695,143697,143700,143703],{"class":41,"line":419},[39,143681,143682],{"class":56},"  animation",[39,143684,52491],{"class":45},[39,143686,136183],{"class":56},[39,143688,26175],{"class":56},[39,143690,392],{"class":49},[39,143692,79734],{"class":56},[39,143694,5151],{"class":56},[39,143696,392],{"class":49},[39,143698,143699],{"class":56}," infinite",[39,143701,143702],{"class":56}," alternate",[39,143704,2359],{"class":45},[39,143706,143707],{"class":41,"line":425},[39,143708,2630],{"class":45},[19,143710,143600],{},[29,143712,143715],{"className":143713,"code":143714,"language":6244},[6242],"\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",[36,143716,143714],{"__ignoreMap":34},[23054,143718,143720],{"id":143719},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,143722,143723],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[269,143725],{"style":127353,"src":143726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[29,143728,143729],{"className":127497,"code":143603,"language":127499,"meta":34,"style":34},[36,143730,143731,143735,143743,143761,143781,143785,143789,143795,143819],{"__ignoreMap":34},[39,143732,143733],{"class":41,"line":42},[39,143734,143610],{"class":102},[39,143736,143737,143739,143741],{"class":41,"line":74},[39,143738,143615],{"class":49},[39,143740,143618],{"class":254},[39,143742,16628],{"class":45},[39,143744,143745,143747,143749,143751,143753,143755,143757,143759],{"class":41,"line":99},[39,143746,143625],{"class":3021},[39,143748,80861],{"class":45},[39,143750,49188],{"class":56},[39,143752,52491],{"class":45},[39,143754,143634],{"class":56},[39,143756,1221],{"class":45},[39,143758,260],{"class":56},[39,143760,143641],{"class":45},[39,143762,143763,143765,143767,143769,143771,143773,143775,143777,143779],{"class":41,"line":106},[39,143764,143646],{"class":3021},[39,143766,80861],{"class":45},[39,143768,49188],{"class":56},[39,143770,52491],{"class":45},[39,143772,143634],{"class":56},[39,143774,1221],{"class":45},[39,143776,1519],{"class":56},[39,143778,52546],{"class":49},[39,143780,143641],{"class":45},[39,143782,143783],{"class":41,"line":112},[39,143784,2630],{"class":45},[39,143786,143787],{"class":41,"line":118},[39,143788,143671],{"class":102},[39,143790,143791,143793],{"class":41,"line":413},[39,143792,52665],{"class":52354},[39,143794,16628],{"class":45},[39,143796,143797,143799,143801,143803,143805,143807,143809,143811,143813,143815,143817],{"class":41,"line":419},[39,143798,143682],{"class":56},[39,143800,52491],{"class":45},[39,143802,136183],{"class":56},[39,143804,26175],{"class":56},[39,143806,392],{"class":49},[39,143808,79734],{"class":56},[39,143810,5151],{"class":56},[39,143812,392],{"class":49},[39,143814,143699],{"class":56},[39,143816,143702],{"class":56},[39,143818,2359],{"class":45},[39,143820,143821],{"class":41,"line":425},[39,143822,2630],{"class":45},[19,143824,143825],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[1188,143827,143829],{"id":143828},"_1823-知识点回顾","18.2.3 知识点回顾",[29,143831,143832],{"className":127497,"code":129666,"language":127499,"meta":34,"style":34},[36,143833,143834,143840,143850],{"__ignoreMap":34},[39,143835,143836,143838],{"class":41,"line":42},[39,143837,52665],{"class":52354},[39,143839,16628],{"class":45},[39,143841,143842,143844,143846,143848],{"class":41,"line":74},[39,143843,129679],{"class":56},[39,143845,52491],{"class":45},[39,143847,62790],{"class":56},[39,143849,2359],{"class":45},[39,143851,143852],{"class":41,"line":99},[39,143853,2630],{"class":45},[14,143855,143857],{"id":143856},"_183-3d-转换","18.3 3D 转换",[19,143859,143860],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[1188,143862,143864],{"id":143863},"_1831-坐标轴认识","18.3.1 坐标轴认识",[269,143866],{"style":127353,"src":143867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[1188,143869,143871],{"id":143870},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[269,143873],{"style":127353,"src":143874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143876,143877],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143879,143880],{},"translate3d的效果需要搭配透视perspective来使用",[269,143882],{"style":127353,"src":143883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[1188,143885,143887],{"id":143886},"_1833-透视-perspective","18.3.3 透视 perspective",[269,143889],{"style":127353,"src":143890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143892,143893],{},"透视写在父盒子上，单位为像素",[1188,143895,143897],{"id":143896},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23054,143899,143901],{"id":143900},"_18341-分开解释","18.3.4.1 分开解释",[269,143903],{"style":127353,"src":143904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[269,143906],{"style":127353,"src":143907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[269,143909],{"style":127353,"src":143910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143912,143913],{},"总结来说就是左手原则",[23054,143915,143917],{"id":143916},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[269,143919],{"style":127353,"src":143920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[1188,143922,143924],{"id":143923},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[269,143926],{"style":127353,"src":143927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[269,143929],{"style":127353,"src":143930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[29,143932,143934],{"className":127497,"code":143933,"language":127499,"meta":34,"style":34},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[36,143935,143936,143942,143955,143972],{"__ignoreMap":34},[39,143937,143938,143940],{"class":41,"line":42},[39,143939,52665],{"class":52354},[39,143941,16628],{"class":45},[39,143943,143944,143947,143949,143951,143953],{"class":41,"line":74},[39,143945,143946],{"class":56},"  perspective",[39,143948,52491],{"class":45},[39,143950,66128],{"class":56},[39,143952,52546],{"class":49},[39,143954,2359],{"class":45},[39,143956,143957,143959,143961,143964,143966,143968,143970],{"class":41,"line":99},[39,143958,137481],{"class":56},[39,143960,52491],{"class":45},[39,143962,143963],{"class":56},"rotateX",[39,143965,1221],{"class":45},[39,143967,1729],{"class":56},[39,143969,143324],{"class":49},[39,143971,3777],{"class":45},[39,143973,143974],{"class":41,"line":106},[39,143975,2630],{"class":45},[1188,143977,143979],{"id":143978},"_1836-案例","18.3.6 案例",[23054,143981,143983],{"id":143982},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[269,143985],{"style":127353,"src":143986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[269,143988],{"style":127353,"src":143989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[269,143991],{"style":127353,"src":143992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[29,143994,143996],{"className":127497,"code":143995,"language":127499,"meta":34,"style":34},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[36,143997,143998,144003,144009,144021],{"__ignoreMap":34},[39,143999,144000],{"class":41,"line":42},[39,144001,144002],{"class":102},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[39,144004,144005,144007],{"class":41,"line":74},[39,144006,134494],{"class":3021},[39,144008,16628],{"class":45},[39,144010,144011,144013,144015,144017,144019],{"class":41,"line":99},[39,144012,143946],{"class":56},[39,144014,52491],{"class":45},[39,144016,66128],{"class":56},[39,144018,52546],{"class":49},[39,144020,2359],{"class":45},[39,144022,144023],{"class":41,"line":106},[39,144024,2630],{"class":45},[23054,144026,144028],{"id":144027},"_18362-3d导航栏","18.3.6.2 3D导航栏",[269,144030],{"style":127353,"src":144031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[29,144033,144034],{"className":128244,"code":131601,"language":128246,"meta":34,"style":34},[36,144035,144036,144040,144054,144058],{"__ignoreMap":34},[39,144037,144038],{"class":41,"line":42},[39,144039,131608],{"class":102},[39,144041,144042,144044,144046,144048,144050,144052],{"class":41,"line":74},[39,144043,2108],{"class":45},[39,144045,52665],{"class":52354},[39,144047,54540],{"class":3021},[39,144049,50],{"class":45},[39,144051,131621],{"class":1319},[39,144053,52361],{"class":45},[39,144055,144056],{"class":41,"line":99},[39,144057,131628],{"class":45},[39,144059,144060,144062,144064],{"class":41,"line":106},[39,144061,52839],{"class":45},[39,144063,52665],{"class":52354},[39,144065,52361],{"class":45},[23054,144067,144069],{"id":144068},"_18363-旋转木马","18.3.6.3 旋转木马",[269,144071],{"style":127353,"src":144072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[29,144074,144075],{"className":127497,"code":143300,"language":127499,"meta":34,"style":34},[36,144076,144077,144083,144099],{"__ignoreMap":34},[39,144078,144079,144081],{"class":41,"line":42},[39,144080,52665],{"class":52354},[39,144082,16628],{"class":45},[39,144084,144085,144087,144089,144091,144093,144095,144097],{"class":41,"line":74},[39,144086,137481],{"class":56},[39,144088,52491],{"class":45},[39,144090,143317],{"class":56},[39,144092,1221],{"class":45},[39,144094,1729],{"class":56},[39,144096,143324],{"class":49},[39,144098,3777],{"class":45},[39,144100,144101],{"class":41,"line":99},[39,144102,2630],{"class":45},[1133,144104,144105],{},"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":34,"searchDepth":74,"depth":74,"links":144107},[144108,144115],{"id":143203,"depth":74,"text":143204,"children":144109},[144110,144111,144112,144113,144114],{"id":143227,"depth":99,"text":143228},{"id":143282,"depth":99,"text":143283},{"id":143407,"depth":99,"text":143408},{"id":143510,"depth":99,"text":143511},{"id":143828,"depth":99,"text":143829},{"id":143856,"depth":74,"text":143857,"children":144116},[144117,144118,144119,144120,144121,144122],{"id":143863,"depth":99,"text":143864},{"id":143870,"depth":99,"text":143871},{"id":143886,"depth":99,"text":143887},{"id":143896,"depth":99,"text":143897},{"id":143923,"depth":99,"text":143924},{"id":143978,"depth":99,"text":143979},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143195,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144129,"title":144130,"body":144131,"description":1142,"extension":1143,"meta":144334,"navigation":1145,"path":144335,"seo":144336,"stem":144337,"__hash__":144338},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144132,"toc":144323},[144133,144136,144140,144143,144146,144150,144153,144156,144159,144163,144166,144170,144173,144177,144180,144184,144198,144202,144227,144230,144233,144250,144254,144258,144261,144264,144268,144271,144274,144292,144296,144299,144313,144317,144320],[10,144134,144130],{"id":144135},"_19-移动端基础-前缀现状与视口",[14,144137,144139],{"id":144138},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[269,144141],{"style":127353,"src":144142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144144,144145],{},"意思就是加个前缀，增加兼容性",[14,144147,144149],{"id":144148},"_192-移动端现状认识","19.2 移动端现状认识",[269,144151],{"style":127353,"src":144152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144154,144155],{},"调试方法：",[269,144157],{"style":127353,"src":144158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144160,144162],{"id":144161},"_193-视口","19.3 视口",[19,144164,144165],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[1188,144167,144169],{"id":144168},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[269,144171],{"style":127353,"src":144172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[1188,144174,144176],{"id":144175},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[269,144178],{"style":127353,"src":144179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[1188,144181,144183],{"id":144182},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[2205,144185,144186,144189,144192,144195],{},[1174,144187,144188],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[1174,144190,144191],{},"理想视口，对设备来讲，是最理想的视口尺寸",[1174,144193,144194],{},"需要手动添写meta视口标签通知浏览器操作",[1174,144196,144197],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[1188,144199,144201],{"id":144200},"_1934-meta视口标签","19.3.4 meta视口标签",[29,144203,144205],{"className":128244,"code":144204,"language":128246,"meta":34,"style":34},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[36,144206,144207],{"__ignoreMap":34},[39,144208,144209,144211,144213,144215,144217,144219,144221,144223,144225],{"class":41,"line":42},[39,144210,2108],{"class":45},[39,144212,52398],{"class":52354},[39,144214,15976],{"class":3021},[39,144216,50],{"class":45},[39,144218,52445],{"class":1319},[39,144220,52425],{"class":3021},[39,144222,50],{"class":45},[39,144224,52452],{"class":1319},[39,144226,52361],{"class":45},[269,144228],{"style":127353,"src":144229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144231,144232],{},"标准视口设置：",[1171,144234,144235,144238,144241,144244,144247],{},[1174,144236,144237],{},"视口宽度和设备保持一致",[1174,144239,144240],{},"视口的默认缩放比例1.0",[1174,144242,144243],{},"不允许用户自行缩放",[1174,144245,144246],{},"最大允许的缩放比例1.0",[1174,144248,144249],{},"最小允许的缩放比例1.0",[1188,144251,144253],{"id":144252},"_1935-二倍图","19.3.5 二倍图",[23054,144255,144257],{"id":144256},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[269,144259],{"style":127353,"src":144260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[269,144262],{"style":127353,"src":144263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23054,144265,144267],{"id":144266},"_19352-多倍图","19.3.5.2 多倍图",[269,144269],{"style":127353,"src":144270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144272,144273],{},"二倍图法，代码如下：",[29,144275,144277],{"className":127497,"code":144276,"language":127499,"meta":34,"style":34},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[36,144278,144279,144284],{"__ignoreMap":34},[39,144280,144281],{"class":41,"line":42},[39,144282,144283],{"class":102},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[39,144285,144286,144289],{"class":41,"line":74},[39,144287,144288],{"class":52354},"background-size",[39,144290,144291],{"class":45},": 50% 50%;\n",[23054,144293,144295],{"id":144294},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[269,144297],{"style":127353,"src":144298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[1171,144300,144301,144304,144307,144310],{},[1174,144302,144303],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[1174,144305,144306],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[1174,144308,144309],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[1174,144311,144312],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23054,144314,144316],{"id":144315},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[269,144318],{"style":127353,"src":144319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1133,144321,144322],{},"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":34,"searchDepth":74,"depth":74,"links":144324},[144325,144326,144327],{"id":144138,"depth":74,"text":144139},{"id":144148,"depth":74,"text":144149},{"id":144161,"depth":74,"text":144162,"children":144328},[144329,144330,144331,144332,144333],{"id":144168,"depth":99,"text":144169},{"id":144175,"depth":99,"text":144176},{"id":144182,"depth":99,"text":144183},{"id":144200,"depth":99,"text":144201},{"id":144252,"depth":99,"text":144253},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144130,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144340,"title":144341,"body":144342,"description":1142,"extension":1143,"meta":145219,"navigation":1145,"path":145220,"seo":145221,"stem":145222,"__hash__":145223},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144343,"toc":145203},[144344,144347,144351,144358,144361,144368,144371,144376,144379,144383,144387,144394,144397,144400,144404,144407,144410,144413,144416,144419,144423,144426,144430,144432,144435,144438,144441,144444,144446,144449,144451,144481,144483,144513,144517,144520,144524,144527,144544,144547,144550,144626,144628,144631,144634,144637,144640,144642,144645,144648,144652,144674,144677,144680,144684,144687,144693,144696,144700,144703,144706,144710,144713,144716,144719,144723,144726,144729,144732,144735,144739,144742,144746,144753,144756,144759,144762,144765,144775,144778,144781,144788,144791,144795,144798,144801,144805,144808,144811,144814,144859,144862,144865,144868,144870,144999,145001,145039,145042,145045,145047,145165,145167,145201],[10,144345,144341],{"id":144346},"_20-移动端布局实战上篇",[14,144348,144350],{"id":144349},"_201-移动端主流方案","20.1 移动端主流方案",[1171,144352,144353],{},[1174,144354,144355],{},[304,144356,144357],{},"单独移动端页面（主流）",[269,144359],{"style":127353,"src":144360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[1171,144362,144363],{"start":74},[1174,144364,144365],{},[304,144366,144367],{},"响应式兼容PC移动端",[269,144369],{"style":127353,"src":144370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[1171,144372,144373],{"start":99},[1174,144374,144375],{},"两种页面选型布局方式",[269,144377],{"style":127353,"src":144378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144380,144382],{"id":144381},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[1188,144384,144386],{"id":144385},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,144388,144389,144390],{},"官网地址： ",[46,144391,144392],{"href":144392,"rel":144393},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24921],[269,144395],{"style":127353,"src":144396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[269,144398],{"style":127353,"src":144399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[1188,144401,144403],{"id":144402},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[269,144405],{"style":127353,"src":144406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[269,144408],{"style":127353,"src":144409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,144411,144412],{},"去除高亮：",[19,144414,144415],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,144417,144418],{},"-webkit- tap-highlight-color: transparent;",[14,144420,144422],{"id":144421},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[269,144424],{"style":127353,"src":144425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144427,144429],{"id":144428},"_204-流式布局案例","20.4 流式布局案例",[19,144431,1249],{},[19,144433,144434],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144436,144437],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144439,144440],{},"图片格式：",[269,144442],{"style":127353,"src":144443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144445,136540],{},[269,144447],{"style":127353,"src":144448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144450,140867],{},[29,144452,144453],{"className":128244,"code":134999,"language":128246,"meta":34,"style":34},[36,144454,144455],{"__ignoreMap":34},[39,144456,144457,144459,144461,144463,144465,144467,144469,144471,144473,144475,144477,144479],{"class":41,"line":42},[39,144458,2108],{"class":45},[39,144460,269],{"class":52354},[39,144462,56293],{"class":3021},[39,144464,50],{"class":45},[39,144466,135014],{"class":1319},[39,144468,56301],{"class":3021},[39,144470,50],{"class":45},[39,144472,135021],{"class":1319},[39,144474,135024],{"class":3021},[39,144476,50],{"class":45},[39,144478,135029],{"class":1319},[39,144480,52361],{"class":45},[19,144482,140956],{},[29,144484,144485],{"className":128244,"code":134999,"language":128246,"meta":34,"style":34},[36,144486,144487],{"__ignoreMap":34},[39,144488,144489,144491,144493,144495,144497,144499,144501,144503,144505,144507,144509,144511],{"class":41,"line":42},[39,144490,2108],{"class":45},[39,144492,269],{"class":52354},[39,144494,56293],{"class":3021},[39,144496,50],{"class":45},[39,144498,135014],{"class":1319},[39,144500,56301],{"class":3021},[39,144502,50],{"class":45},[39,144504,135021],{"class":1319},[39,144506,135024],{"class":3021},[39,144508,50],{"class":45},[39,144510,135029],{"class":1319},[39,144512,52361],{"class":45},[14,144514,144516],{"id":144515},"_205-flex布局","20.5 flex布局",[269,144518],{"style":127353,"src":144519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[1188,144521,144523],{"id":144522},"_2051-布局原理","20.5.1 布局原理",[19,144525,144526],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[2205,144528,144529,144532,144535,144538,144541],{},[1174,144530,144531],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[1174,144533,144534],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[1174,144536,144537],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[1174,144539,144540],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[1174,144542,144543],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144545,144546],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144548,144549],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[29,144551,144553],{"className":127497,"code":144552,"language":127499,"meta":34,"style":34},"\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",[36,144554,144555,144560,144567,144577,144589,144600,144611,144622],{"__ignoreMap":34},[39,144556,144557],{"class":41,"line":42},[39,144558,144559],{"class":102},"\u002F* Flex 弹性布局 *\u002F\n",[39,144561,144562,144565],{"class":41,"line":74},[39,144563,144564],{"class":3021},".container",[39,144566,16628],{"class":45},[39,144568,144569,144571,144573,144575],{"class":41,"line":99},[39,144570,129113],{"class":56},[39,144572,52491],{"class":45},[39,144574,52531],{"class":56},[39,144576,2359],{"class":45},[39,144578,144579,144582,144584,144587],{"class":41,"line":106},[39,144580,144581],{"class":56},"  flex-direction",[39,144583,52491],{"class":45},[39,144585,144586],{"class":56},"row",[39,144588,2359],{"class":45},[39,144590,144591,144594,144596,144598],{"class":41,"line":112},[39,144592,144593],{"class":56},"  justify-content",[39,144595,52491],{"class":45},[39,144597,52722],{"class":56},[39,144599,2359],{"class":45},[39,144601,144602,144605,144607,144609],{"class":41,"line":118},[39,144603,144604],{"class":56},"  align-items",[39,144606,52491],{"class":45},[39,144608,52646],{"class":56},[39,144610,2359],{"class":45},[39,144612,144613,144616,144618,144620],{"class":41,"line":413},[39,144614,144615],{"class":56},"  flex-wrap",[39,144617,52491],{"class":45},[39,144619,79664],{"class":56},[39,144621,2359],{"class":45},[39,144623,144624],{"class":41,"line":419},[39,144625,2630],{"class":45},[19,144627,71507],{},[19,144629,144630],{},".form-item .male-label {",[19,144632,144633],{},"   margin-right: 20px;",[19,144635,144636],{},"   display: inline-flex;",[19,144638,144639],{},"   align-items: center;",[19,144641,2144],{},[269,144643],{"style":127353,"src":144644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[269,144646],{"style":127353,"src":144647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[1188,144649,144651],{"id":144650},"_2052-常见父项属性","20.5.2 常见父项属性",[1171,144653,144654,144657,144660,144663,144666,144669,144672],{},[1174,144655,144656],{},"flex-direction：设置主轴的方向",[1174,144658,144659],{},"justify-content：设置主轴上的子元素排列方式",[1174,144661,144662],{},"flex-wrap：设置子元素是否换行",[1174,144664,144665],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[1174,144667,144668],{},"align-items：设置侧轴上的子元素排列方式（单行）",[1174,144670,144671],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[1174,144673,144656],{},[269,144675],{"style":127353,"src":144676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[269,144678],{"style":127353,"src":144679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[1171,144681,144682],{"start":74},[1174,144683,144659],{},[269,144685],{"style":127353,"src":144686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,144688,144689,144692],{},[36,144690,144691],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,144694,144695],{},"跟着主轴走",[1171,144697,144698],{"start":99},[1174,144699,144662],{},[269,144701],{"style":127353,"src":144702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,144704,144705],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[1171,144707,144708],{"start":106},[1174,144709,144665],{},[269,144711],{"style":127353,"src":144712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,144714,144715],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,144717,144718],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[1171,144720,144721],{"start":112},[1174,144722,144668],{},[269,144724],{"style":127353,"src":144725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,144727,144728],{},"align-items与align-content之间的区别：",[19,144730,144731],{},"单找items，多找content",[269,144733],{"style":127353,"src":144734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[1171,144736,144737],{"start":118},[1174,144738,144671],{},[269,144740],{"style":127353,"src":144741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[1188,144743,144745],{"id":144744},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[1171,144747,144748],{},[1174,144749,144750],{},[304,144751,144752],{},"flex 属性",[19,144754,144755],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[269,144757],{"style":127353,"src":144758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,144760,144761],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,144763,144764],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[1171,144766,144767],{"start":74},[1174,144768,144769,14851,144772],{},[304,144770,144771],{},"align-self",[304,144773,144774],{},"控制子项自己在侧轴上的排列方式",[269,144776],{"style":127353,"src":144777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,144779,144780],{},"单个子盒子在父盒子侧轴上的排列方式",[1171,144782,144783],{"start":99},[1174,144784,144785,144787],{},[304,144786,96347],{}," 属性定义项目的排列顺序",[269,144789],{"style":127353,"src":144790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[1188,144792,144794],{"id":144793},"_2054-背景线性渐变","20.5.4 背景线性渐变",[269,144796],{"style":127353,"src":144797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,144799,144800],{},"必须要添加浏览器的私有前缀",[1188,144802,144804],{"id":144803},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144806,144807],{},"学到最重要的知识：",[19,144809,144810],{},"flex处理这样的布局思路",[269,144812],{"style":127353,"src":144813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[29,144815,144817],{"className":127497,"code":144816,"language":127499,"meta":34,"style":34},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[36,144818,144819,144825,144835,144845,144855],{"__ignoreMap":34},[39,144820,144821,144823],{"class":41,"line":42},[39,144822,144564],{"class":3021},[39,144824,16628],{"class":45},[39,144826,144827,144829,144831,144833],{"class":41,"line":74},[39,144828,129113],{"class":56},[39,144830,52491],{"class":45},[39,144832,52531],{"class":56},[39,144834,2359],{"class":45},[39,144836,144837,144839,144841,144843],{"class":41,"line":99},[39,144838,144593],{"class":56},[39,144840,52491],{"class":45},[39,144842,52646],{"class":56},[39,144844,2359],{"class":45},[39,144846,144847,144849,144851,144853],{"class":41,"line":106},[39,144848,144604],{"class":56},[39,144850,52491],{"class":45},[39,144852,52646],{"class":56},[39,144854,2359],{"class":45},[39,144856,144857],{"class":41,"line":112},[39,144858,2630],{"class":45},[19,144860,144861],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144863,144864],{},"使用属性选择器",[269,144866],{"style":127353,"src":144867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144869,69943],{},[29,144871,144873],{"className":128244,"code":144872,"language":128246,"meta":34,"style":34},"\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",[36,144874,144875,144880,144894,144899,144919,144924,144943,144948,144967,144972,144991],{"__ignoreMap":34},[39,144876,144877],{"class":41,"line":42},[39,144878,144879],{"class":102},"\u003C!-- 携程网移动端案例结构 -->\n",[39,144881,144882,144884,144886,144888,144890,144892],{"class":41,"line":74},[39,144883,2108],{"class":45},[39,144885,52665],{"class":52354},[39,144887,54540],{"class":3021},[39,144889,50],{"class":45},[39,144891,93377],{"class":1319},[39,144893,52361],{"class":45},[39,144895,144896],{"class":41,"line":99},[39,144897,144898],{"class":102},"  \u003C!-- 搜索栏 -->\n",[39,144900,144901,144903,144905,144907,144909,144912,144915,144917],{"class":41,"line":106},[39,144902,53198],{"class":45},[39,144904,52665],{"class":52354},[39,144906,54540],{"class":3021},[39,144908,50],{"class":45},[39,144910,144911],{"class":1319},"\"search-index\"",[39,144913,144914],{"class":45},">...\u003C\u002F",[39,144916,52665],{"class":52354},[39,144918,52361],{"class":45},[39,144920,144921],{"class":41,"line":112},[39,144922,144923],{"class":102},"  \u003C!-- 焦点图 -->\n",[39,144925,144926,144928,144930,144932,144934,144937,144939,144941],{"class":41,"line":118},[39,144927,53198],{"class":45},[39,144929,52665],{"class":52354},[39,144931,54540],{"class":3021},[39,144933,50],{"class":45},[39,144935,144936],{"class":1319},"\"focus\"",[39,144938,144914],{"class":45},[39,144940,52665],{"class":52354},[39,144942,52361],{"class":45},[39,144944,144945],{"class":41,"line":413},[39,144946,144947],{"class":102},"  \u003C!-- 主导航 -->\n",[39,144949,144950,144952,144954,144956,144958,144961,144963,144965],{"class":41,"line":419},[39,144951,53198],{"class":45},[39,144953,52665],{"class":52354},[39,144955,54540],{"class":3021},[39,144957,50],{"class":45},[39,144959,144960],{"class":1319},"\"local-nav\"",[39,144962,144914],{"class":45},[39,144964,52665],{"class":52354},[39,144966,52361],{"class":45},[39,144968,144969],{"class":41,"line":425},[39,144970,144971],{"class":102},"  \u003C!-- 子导航 -->\n",[39,144973,144974,144976,144978,144980,144982,144985,144987,144989],{"class":41,"line":443},[39,144975,53198],{"class":45},[39,144977,52665],{"class":52354},[39,144979,54540],{"class":3021},[39,144981,50],{"class":45},[39,144983,144984],{"class":1319},"\"nav-common\"",[39,144986,144914],{"class":45},[39,144988,52665],{"class":52354},[39,144990,52361],{"class":45},[39,144992,144993,144995,144997],{"class":41,"line":449},[39,144994,52839],{"class":45},[39,144996,52665],{"class":52354},[39,144998,52361],{"class":45},[19,145000,71507],{},[29,145002,145003],{"className":127497,"code":137949,"language":127499,"meta":34,"style":34},[36,145004,145005,145019,145035],{"__ignoreMap":34},[39,145006,145007,145009,145011,145013,145015,145017],{"class":41,"line":42},[39,145008,54875],{"class":52354},[39,145010,2088],{"class":45},[39,145012,104052],{"class":3021},[39,145014,50],{"class":49},[39,145016,63753],{"class":1319},[39,145018,137966],{"class":45},[39,145020,145021,145023,145025,145027,145029,145031,145033],{"class":41,"line":74},[39,145022,71950],{"class":56},[39,145024,52491],{"class":45},[39,145026,57],{"class":56},[39,145028,52546],{"class":49},[39,145030,52575],{"class":56},[39,145032,131077],{"class":56},[39,145034,2359],{"class":45},[39,145036,145037],{"class":41,"line":99},[39,145038,2630],{"class":45},[19,145040,145041],{},"总代码和效果展示：",[269,145043],{"style":127353,"src":145044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145046,69943],{},[29,145048,145049],{"className":128244,"code":144872,"language":128246,"meta":34,"style":34},[36,145050,145051,145055,145069,145073,145091,145095,145113,145117,145135,145139,145157],{"__ignoreMap":34},[39,145052,145053],{"class":41,"line":42},[39,145054,144879],{"class":102},[39,145056,145057,145059,145061,145063,145065,145067],{"class":41,"line":74},[39,145058,2108],{"class":45},[39,145060,52665],{"class":52354},[39,145062,54540],{"class":3021},[39,145064,50],{"class":45},[39,145066,93377],{"class":1319},[39,145068,52361],{"class":45},[39,145070,145071],{"class":41,"line":99},[39,145072,144898],{"class":102},[39,145074,145075,145077,145079,145081,145083,145085,145087,145089],{"class":41,"line":106},[39,145076,53198],{"class":45},[39,145078,52665],{"class":52354},[39,145080,54540],{"class":3021},[39,145082,50],{"class":45},[39,145084,144911],{"class":1319},[39,145086,144914],{"class":45},[39,145088,52665],{"class":52354},[39,145090,52361],{"class":45},[39,145092,145093],{"class":41,"line":112},[39,145094,144923],{"class":102},[39,145096,145097,145099,145101,145103,145105,145107,145109,145111],{"class":41,"line":118},[39,145098,53198],{"class":45},[39,145100,52665],{"class":52354},[39,145102,54540],{"class":3021},[39,145104,50],{"class":45},[39,145106,144936],{"class":1319},[39,145108,144914],{"class":45},[39,145110,52665],{"class":52354},[39,145112,52361],{"class":45},[39,145114,145115],{"class":41,"line":413},[39,145116,144947],{"class":102},[39,145118,145119,145121,145123,145125,145127,145129,145131,145133],{"class":41,"line":419},[39,145120,53198],{"class":45},[39,145122,52665],{"class":52354},[39,145124,54540],{"class":3021},[39,145126,50],{"class":45},[39,145128,144960],{"class":1319},[39,145130,144914],{"class":45},[39,145132,52665],{"class":52354},[39,145134,52361],{"class":45},[39,145136,145137],{"class":41,"line":425},[39,145138,144971],{"class":102},[39,145140,145141,145143,145145,145147,145149,145151,145153,145155],{"class":41,"line":443},[39,145142,53198],{"class":45},[39,145144,52665],{"class":52354},[39,145146,54540],{"class":3021},[39,145148,50],{"class":45},[39,145150,144984],{"class":1319},[39,145152,144914],{"class":45},[39,145154,52665],{"class":52354},[39,145156,52361],{"class":45},[39,145158,145159,145161,145163],{"class":41,"line":449},[39,145160,52839],{"class":45},[39,145162,52665],{"class":52354},[39,145164,52361],{"class":45},[19,145166,71507],{},[29,145168,145169],{"className":128244,"code":131601,"language":128246,"meta":34,"style":34},[36,145170,145171,145175,145189,145193],{"__ignoreMap":34},[39,145172,145173],{"class":41,"line":42},[39,145174,131608],{"class":102},[39,145176,145177,145179,145181,145183,145185,145187],{"class":41,"line":74},[39,145178,2108],{"class":45},[39,145180,52665],{"class":52354},[39,145182,54540],{"class":3021},[39,145184,50],{"class":45},[39,145186,131621],{"class":1319},[39,145188,52361],{"class":45},[39,145190,145191],{"class":41,"line":99},[39,145192,131628],{"class":45},[39,145194,145195,145197,145199],{"class":41,"line":106},[39,145196,52839],{"class":45},[39,145198,52665],{"class":52354},[39,145200,52361],{"class":45},[1133,145202,138898],{},{"title":34,"searchDepth":74,"depth":74,"links":145204},[145205,145206,145210,145211,145212],{"id":144349,"depth":74,"text":144350},{"id":144381,"depth":74,"text":144382,"children":145207},[145208,145209],{"id":144385,"depth":99,"text":144386},{"id":144402,"depth":99,"text":144403},{"id":144421,"depth":74,"text":144422},{"id":144428,"depth":74,"text":144429},{"id":144515,"depth":74,"text":144516,"children":145213},[145214,145215,145216,145217,145218],{"id":144522,"depth":99,"text":144523},{"id":144650,"depth":99,"text":144651},{"id":144744,"depth":99,"text":144745},{"id":144793,"depth":99,"text":144794},{"id":144803,"depth":99,"text":144804},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144341,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145225,"title":145226,"body":145227,"description":1142,"extension":1143,"meta":146454,"navigation":1145,"path":146455,"seo":146456,"stem":146457,"__hash__":146458},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145228,"toc":146432},[145229,145232,145236,145240,145243,145246,145250,145255,145258,145261,145264,145267,145270,145327,145330,145335,145338,145341,145345,145356,145360,145363,145366,145373,145378,145382,145385,145391,145394,145398,145401,145408,145411,145414,145421,145424,145431,145434,145437,145444,145447,145450,145452,145469,145473,145476,145479,145482,145486,145489,145492,145495,145498,145501,145504,145506,145509,145512,145574,145577,145687,145694,145700,145703,145706,145710,145713,145717,145722,145725,145732,145735,145741,145746,145749,145752,145755,145758,145761,145764,145767,145770,145826,145828,145854,145858,145861,145864,145867,145875,145878,145881,145885,145941,145944,145948,145954,145965,145968,145973,145976,145979,145985,145988,145991,145994,145997,146000,146003,146006,146009,146034,146040,146043,146046,146049,146052,146055,146058,146063,146066,146069,146072,146080,146083,146090,146093,146096,146098,146122,146124,146127,146130,146133,146136,146139,146142,146145,146179,146182,146185,146219,146226,146229,146232,146235,146238,146241,146244,146251,146254,146257,146260,146263,146270,146273,146276,146283,146286,146289,146293,146296,146299,146302,146305,146308,146311,146314,146317,146319,146343,146345,146369,146373,146384,146387,146390,146393,146396,146399,146402,146405,146408,146411,146414,146417,146420,146423,146426,146429],[10,145230,145226],{"id":145231},"_21-移动端布局实战下篇",[14,145233,145235],{"id":145234},"_211-rem适配布局","21.1 rem适配布局",[1188,145237,145239],{"id":145238},"_2111-rem单位","21.1.1 rem单位",[269,145241],{"style":127353,"src":145242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145244,145245],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[1188,145247,145249],{"id":145248},"_2112-媒体查询","21.1.2 媒体查询",[1171,145251,145252],{},[1174,145253,145254],{},"参数介绍",[269,145256],{"style":127353,"src":145257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[269,145259],{"style":127353,"src":145260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[269,145262],{"style":127353,"src":145263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[269,145265],{"style":127353,"src":145266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[269,145268],{"style":127353,"src":145269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[29,145271,145273],{"className":127497,"code":145272,"language":127499,"meta":34,"style":34},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[36,145274,145275,145280,145299,145306,145319,145323],{"__ignoreMap":34},[39,145276,145277],{"class":41,"line":42},[39,145278,145279],{"class":102},"\u002F* 媒体查询 *\u002F\n",[39,145281,145282,145285,145287,145290,145292,145295,145297],{"class":41,"line":74},[39,145283,145284],{"class":49},"@media",[39,145286,2716],{"class":45},[39,145288,145289],{"class":56},"max-width",[39,145291,52491],{"class":45},[39,145293,145294],{"class":56},"768",[39,145296,52546],{"class":49},[39,145298,13498],{"class":45},[39,145300,145301,145304],{"class":41,"line":99},[39,145302,145303],{"class":3021},"  .container",[39,145305,16628],{"class":45},[39,145307,145308,145311,145313,145315,145317],{"class":41,"line":106},[39,145309,145310],{"class":56},"    width",[39,145312,52491],{"class":45},[39,145314,1519],{"class":56},[39,145316,1534],{"class":49},[39,145318,2359],{"class":45},[39,145320,145321],{"class":41,"line":112},[39,145322,128293],{"class":45},[39,145324,145325],{"class":41,"line":118},[39,145326,2630],{"class":45},[19,145328,145329],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[1171,145331,145332],{"start":74},[1174,145333,145334],{},"引入资源",[269,145336],{"style":127353,"src":145337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,145339,145340],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[1188,145342,145344],{"id":145343},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[2205,145346,145347,145350,145353],{},[1174,145348,145349],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[1174,145351,145352],{},"媒体查询可以根据不同设备宽度来修改样式",[1174,145354,145355],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145357,145359],{"id":145358},"_212-less基础","21.2 Less基础",[19,145361,145362],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,145364,145365],{},"Less可以解决该问题，它是css的扩展语言",[19,145367,145368,145369],{},"Less中文网址： ",[46,145370,145371],{"href":145371,"rel":145372},"http:\u002F\u002Flesscss.cn\u002F",[24921],[19,145374,145375],{},[304,145376,145377],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[1188,145379,145381],{"id":145380},"_2121-less安装","21.2.1 less安装",[19,145383,145384],{},"如果使用vscode，则无需进行下方安装步骤",[19,145386,145387],{},[46,145388,145389],{"href":145389,"rel":145390},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24921],[269,145392],{"style":127353,"src":145393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[1188,145395,145397],{"id":145396},"_2122-less使用","21.2.2 less使用",[19,145399,145400],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[1171,145402,145403],{},[1174,145404,145405],{},[304,145406,145407],{},"Less 变量",[269,145409],{"style":127353,"src":145410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[269,145412],{"style":127353,"src":145413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[1171,145415,145416],{"start":74},[1174,145417,145418],{},[304,145419,145420],{},"Less 编译",[269,145422],{"style":127353,"src":145423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[1171,145425,145426],{"start":99},[1174,145427,145428],{},[304,145429,145430],{},"Less 嵌套",[269,145432],{"style":127353,"src":145433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[269,145435],{"style":127353,"src":145436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[1171,145438,145439],{"start":106},[1174,145440,145441],{},[304,145442,145443],{},"Less 运算",[269,145445],{"style":127353,"src":145446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145448,145449],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145451,1249],{},[2205,145453,145454,145457,145460,145463,145466],{},[1174,145455,145456],{},"乘号（*）和除号（\u002F）的写法",[1174,145458,145459],{},"运算符中间左右有个空格隔开 1px + 5",[1174,145461,145462],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[1174,145464,145465],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[1174,145467,145468],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145470,145472],{"id":145471},"_213-rem-适配方案","21.3 rem 适配方案",[19,145474,145475],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145477,145478],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[269,145480],{"style":127353,"src":145481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[1188,145483,145485],{"id":145484},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145487,145488],{},"rem + 媒体查询 + less 技术",[269,145490],{"style":127353,"src":145491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145493,145494],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145496,145497],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[269,145499],{"style":127353,"src":145500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145502,145503],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145505,15689],{},[269,145507],{"style":127353,"src":145508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,145510,145511],{},"index.html:",[29,145513,145515],{"className":127497,"code":145514,"language":127499,"meta":34,"style":34},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[36,145516,145517,145522,145528,145544,145548,145554,145570],{"__ignoreMap":34},[39,145518,145519],{"class":41,"line":42},[39,145520,145521],{"class":102},"\u002F* rem 适配方案 *\u002F\n",[39,145523,145524,145526],{"class":41,"line":74},[39,145525,51689],{"class":52354},[39,145527,16628],{"class":45},[39,145529,145530,145532,145534,145537,145539,145541],{"class":41,"line":99},[39,145531,71680],{"class":56},[39,145533,52491],{"class":45},[39,145535,145536],{"class":56},"62.5",[39,145538,1534],{"class":49},[39,145540,131360],{"class":45},[39,145542,145543],{"class":102},"\u002F* 1rem = 10px *\u002F\n",[39,145545,145546],{"class":41,"line":106},[39,145547,2630],{"class":45},[39,145549,145550,145552],{"class":41,"line":112},[39,145551,131345],{"class":3021},[39,145553,16628],{"class":45},[39,145555,145556,145558,145560,145562,145565,145567],{"class":41,"line":118},[39,145557,71622],{"class":56},[39,145559,52491],{"class":45},[39,145561,146],{"class":56},[39,145563,145564],{"class":49},"rem",[39,145566,131360],{"class":45},[39,145568,145569],{"class":102},"\u002F* 100px *\u002F\n",[39,145571,145572],{"class":41,"line":413},[39,145573,2630],{"class":45},[19,145575,145576],{},"common.less",[29,145578,145580],{"className":127497,"code":145579,"language":127499,"meta":34,"style":34},"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",[36,145581,145582,145588,145603,145607,145613,145627,145631,145635,145639,145645,145659,145663,145669,145683],{"__ignoreMap":34},[39,145583,145584,145586],{"class":41,"line":42},[39,145585,51689],{"class":52354},[39,145587,16628],{"class":45},[39,145589,145590,145592,145594,145596,145598,145600],{"class":41,"line":74},[39,145591,71680],{"class":56},[39,145593,52491],{"class":45},[39,145595,145536],{"class":56},[39,145597,1534],{"class":49},[39,145599,27124],{"class":45},[39,145601,145602],{"class":102},"\u002F* 10px *\u002F\n",[39,145604,145605],{"class":41,"line":99},[39,145606,2630],{"class":45},[39,145608,145609,145611],{"class":41,"line":106},[39,145610,52665],{"class":52354},[39,145612,16628],{"class":45},[39,145614,145615,145617,145619,145621,145623,145625],{"class":41,"line":112},[39,145616,71622],{"class":56},[39,145618,52491],{"class":45},[39,145620,146],{"class":56},[39,145622,145564],{"class":49},[39,145624,27124],{"class":45},[39,145626,145569],{"class":102},[39,145628,145629],{"class":41,"line":118},[39,145630,2630],{"class":45},[39,145632,145633],{"class":41,"line":413},[39,145634,136958],{"class":45},[39,145636,145637],{"class":41,"line":419},[39,145638,145521],{"class":102},[39,145640,145641,145643],{"class":41,"line":425},[39,145642,51689],{"class":52354},[39,145644,16628],{"class":45},[39,145646,145647,145649,145651,145653,145655,145657],{"class":41,"line":443},[39,145648,71680],{"class":56},[39,145650,52491],{"class":45},[39,145652,145536],{"class":56},[39,145654,1534],{"class":49},[39,145656,131360],{"class":45},[39,145658,145543],{"class":102},[39,145660,145661],{"class":41,"line":449},[39,145662,2630],{"class":45},[39,145664,145665,145667],{"class":41,"line":455},[39,145666,131345],{"class":3021},[39,145668,16628],{"class":45},[39,145670,145671,145673,145675,145677,145679,145681],{"class":41,"line":461},[39,145672,71622],{"class":56},[39,145674,52491],{"class":45},[39,145676,146],{"class":56},[39,145678,145564],{"class":49},[39,145680,131360],{"class":45},[39,145682,145569],{"class":102},[39,145684,145685],{"class":41,"line":475},[39,145686,2630],{"class":45},[19,145688,145689,145690,145693],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[24609,145691,145692],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[29,145695,145698],{"className":145696,"code":145697,"language":6244},[6242],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[36,145699,145697],{"__ignoreMap":34},[19,145701,145702],{},"less保存时会自动变成.css文件",[19,145704,145705],{},"好好搞懂上述代码写法",[1188,145707,145709],{"id":145708},"_2132-样式导入样式","21.3.2 样式导入样式",[269,145711],{"style":127353,"src":145712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[1188,145714,145716],{"id":145715},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[1171,145718,145719],{},[1174,145720,145721],{},"准备工作",[269,145723],{"style":127353,"src":145724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,145726,145727,145728],{},"github地址：",[46,145729,145730],{"href":145730,"rel":145731},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24921],[19,145733,145734],{},"下载之后，将index.js文件拖到项目中就可以了",[19,145736,145737,145738],{},"js文件引入到index.html中使用的是",[36,145739,145740],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[1171,145742,145743],{"start":74},[1174,145744,145745],{},"vscode插件",[269,145747],{"style":127353,"src":145748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,145750,145751],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,145753,145754],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[269,145756],{"style":127353,"src":145757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,145759,145760],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[269,145762],{"style":127353,"src":145763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,145765,145766],{},"修改成75就可以，alt+z为快捷键",[19,145768,145769],{},"index.css：",[29,145771,145772],{"className":127497,"code":145514,"language":127499,"meta":34,"style":34},[36,145773,145774,145778,145784,145798,145802,145808,145822],{"__ignoreMap":34},[39,145775,145776],{"class":41,"line":42},[39,145777,145521],{"class":102},[39,145779,145780,145782],{"class":41,"line":74},[39,145781,51689],{"class":52354},[39,145783,16628],{"class":45},[39,145785,145786,145788,145790,145792,145794,145796],{"class":41,"line":99},[39,145787,71680],{"class":56},[39,145789,52491],{"class":45},[39,145791,145536],{"class":56},[39,145793,1534],{"class":49},[39,145795,131360],{"class":45},[39,145797,145543],{"class":102},[39,145799,145800],{"class":41,"line":106},[39,145801,2630],{"class":45},[39,145803,145804,145806],{"class":41,"line":112},[39,145805,131345],{"class":3021},[39,145807,16628],{"class":45},[39,145809,145810,145812,145814,145816,145818,145820],{"class":41,"line":118},[39,145811,71622],{"class":56},[39,145813,52491],{"class":45},[39,145815,146],{"class":56},[39,145817,145564],{"class":49},[39,145819,131360],{"class":45},[39,145821,145569],{"class":102},[39,145823,145824],{"class":41,"line":413},[39,145825,2630],{"class":45},[19,145827,145511],{},[29,145829,145830],{"className":127497,"code":127901,"language":127499,"meta":34,"style":34},[36,145831,145832,145838,145850],{"__ignoreMap":34},[39,145833,145834,145836],{"class":41,"line":42},[39,145835,52854],{"class":52354},[39,145837,16628],{"class":45},[39,145839,145840,145842,145844,145846,145848],{"class":41,"line":74},[39,145841,71680],{"class":56},[39,145843,52491],{"class":45},[39,145845,1801],{"class":56},[39,145847,52546],{"class":49},[39,145849,2359],{"class":45},[39,145851,145852],{"class":41,"line":99},[39,145853,2630],{"class":45},[14,145855,145857],{"id":145856},"_214-响应式开发","21.4 响应式开发",[19,145859,145860],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[269,145862],{"style":127353,"src":145863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145865,145866],{},"做法：",[2205,145868,145869,145872],{},[1174,145870,145871],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[1174,145873,145874],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[269,145876],{"style":127353,"src":145877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145879,145880],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[1188,145882,145884],{"id":145883},"_2141-简单代码示范","21.4.1 简单代码示范",[29,145886,145887],{"className":127497,"code":145514,"language":127499,"meta":34,"style":34},[36,145888,145889,145893,145899,145913,145917,145923,145937],{"__ignoreMap":34},[39,145890,145891],{"class":41,"line":42},[39,145892,145521],{"class":102},[39,145894,145895,145897],{"class":41,"line":74},[39,145896,51689],{"class":52354},[39,145898,16628],{"class":45},[39,145900,145901,145903,145905,145907,145909,145911],{"class":41,"line":99},[39,145902,71680],{"class":56},[39,145904,52491],{"class":45},[39,145906,145536],{"class":56},[39,145908,1534],{"class":49},[39,145910,131360],{"class":45},[39,145912,145543],{"class":102},[39,145914,145915],{"class":41,"line":106},[39,145916,2630],{"class":45},[39,145918,145919,145921],{"class":41,"line":112},[39,145920,131345],{"class":3021},[39,145922,16628],{"class":45},[39,145924,145925,145927,145929,145931,145933,145935],{"class":41,"line":118},[39,145926,71622],{"class":56},[39,145928,52491],{"class":45},[39,145930,146],{"class":56},[39,145932,145564],{"class":49},[39,145934,131360],{"class":45},[39,145936,145569],{"class":102},[39,145938,145939],{"class":41,"line":413},[39,145940,2630],{"class":45},[19,145942,145943],{},"父盒子一般命名为container",[1188,145945,145947],{"id":145946},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145949,145950,145951],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[304,145952,145953],{},"使得 Web 开发更加快捷",[2205,145955,145956],{},[1174,145957,145958,145959],{},"官网：",[304,145960,145961],{},[46,145962,145963],{"href":145963,"rel":145964},"http:\u002F\u002Fgetbootstrap.com\u002F",[24921],[19,145966,145967],{},"可以直接去官网拿现成的东西",[1171,145969,145970],{},[1174,145971,145972],{},"Bootstrap的使用",[19,145974,145975],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145977,145978],{},"Bootstrap 使用四步曲：",[19,145980,145981,145984],{},[304,145982,145983],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[269,145986],{"style":127353,"src":145987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145989,145990],{},"打开Bootstrap官网，然后下载",[269,145992],{"style":127353,"src":145993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[269,145995],{"style":127353,"src":145996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145998,145999],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146001,146002],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146004,146005],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[269,146007],{"style":127353,"src":146008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[29,146010,146012],{"className":127497,"code":146011,"language":127499,"meta":34,"style":34},".center {\n  color: red;\n}\n",[36,146013,146014,146020,146030],{"__ignoreMap":34},[39,146015,146016,146018],{"class":41,"line":42},[39,146017,127788],{"class":3021},[39,146019,16628],{"class":45},[39,146021,146022,146024,146026,146028],{"class":41,"line":74},[39,146023,71959],{"class":56},[39,146025,52491],{"class":45},[39,146027,58475],{"class":56},[39,146029,2359],{"class":45},[39,146031,146032],{"class":41,"line":99},[39,146033,2630],{"class":45},[19,146035,146036,146039],{},[36,146037,146038],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[269,146041],{"style":127353,"src":146042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[269,146044],{"style":127353,"src":146045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[269,146047],{"style":127353,"src":146048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146050,146051],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[269,146053],{"style":127353,"src":146054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146056,146057],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[1171,146059,146060],{"start":74},[1174,146061,146062],{},"布局容器",[269,146064],{"style":127353,"src":146065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146067,146068],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146070,146071],{},"container-fluid用于移动式布局比较方便",[1171,146073,146074],{"start":99},[1174,146075,146076,146077],{},"bootstrap ",[304,146078,146079],{},"栅格系统原理",[269,146081],{"style":127353,"src":146082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[1171,146084,146085],{"start":106},[1174,146086,146087],{},[304,146088,146089],{},"栅格选项参数",[269,146091],{"style":127353,"src":146092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146094,146095],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146097,15689],{},[29,146099,146100],{"className":127497,"code":146011,"language":127499,"meta":34,"style":34},[36,146101,146102,146108,146118],{"__ignoreMap":34},[39,146103,146104,146106],{"class":41,"line":42},[39,146105,127788],{"class":3021},[39,146107,16628],{"class":45},[39,146109,146110,146112,146114,146116],{"class":41,"line":74},[39,146111,71959],{"class":56},[39,146113,52491],{"class":45},[39,146115,58475],{"class":56},[39,146117,2359],{"class":45},[39,146119,146120],{"class":41,"line":99},[39,146121,2630],{"class":45},[19,146123,136540],{},[269,146125],{"style":127353,"src":146126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146128,146129],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146131,146132],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146134,146135],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146137,146138],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146140,146141],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146143,146144],{},"汇总展示说明：",[29,146146,146147],{"className":128244,"code":131601,"language":128246,"meta":34,"style":34},[36,146148,146149,146153,146167,146171],{"__ignoreMap":34},[39,146150,146151],{"class":41,"line":42},[39,146152,131608],{"class":102},[39,146154,146155,146157,146159,146161,146163,146165],{"class":41,"line":74},[39,146156,2108],{"class":45},[39,146158,52665],{"class":52354},[39,146160,54540],{"class":3021},[39,146162,50],{"class":45},[39,146164,131621],{"class":1319},[39,146166,52361],{"class":45},[39,146168,146169],{"class":41,"line":99},[39,146170,131628],{"class":45},[39,146172,146173,146175,146177],{"class":41,"line":106},[39,146174,52839],{"class":45},[39,146176,52665],{"class":52354},[39,146178,52361],{"class":45},[269,146180],{"style":127353,"src":146181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146183,146184],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[29,146186,146187],{"className":128244,"code":131601,"language":128246,"meta":34,"style":34},[36,146188,146189,146193,146207,146211],{"__ignoreMap":34},[39,146190,146191],{"class":41,"line":42},[39,146192,131608],{"class":102},[39,146194,146195,146197,146199,146201,146203,146205],{"class":41,"line":74},[39,146196,2108],{"class":45},[39,146198,52665],{"class":52354},[39,146200,54540],{"class":3021},[39,146202,50],{"class":45},[39,146204,131621],{"class":1319},[39,146206,52361],{"class":45},[39,146208,146209],{"class":41,"line":99},[39,146210,131628],{"class":45},[39,146212,146213,146215,146217],{"class":41,"line":106},[39,146214,52839],{"class":45},[39,146216,52665],{"class":52354},[39,146218,52361],{"class":45},[1171,146220,146221],{"start":112},[1174,146222,146223],{},[304,146224,146225],{},"列嵌套",[269,146227],{"style":127353,"src":146228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146230,146231],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146233,146234],{},"没加row内部这样：",[269,146236],{"style":127353,"src":146237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146239,146240],{},"加上row之后内部为：",[269,146242],{"style":127353,"src":146243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[1171,146245,146246],{"start":118},[1174,146247,146248],{},[304,146249,146250],{},"列偏移",[269,146252],{"style":127353,"src":146253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146255,146256],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146258,146259],{},"要加偏移量，即偏移份数",[19,146261,146262],{},"偏移的份数=12-两个盒子的份数",[1171,146264,146265],{"start":413},[1174,146266,146267],{},[304,146268,146269],{},"列排序",[269,146271],{"style":127353,"src":146272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146274,146275],{},"pull拉左；push推右",[1171,146277,146278],{"start":419},[1174,146279,146280],{},[304,146281,146282],{},"响应式工具",[269,146284],{"style":127353,"src":146285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146287,146288],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[1188,146290,146292],{"id":146291},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146294,146295],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146297,146298],{},"ul {",[19,146300,146301],{},"list-style: none;",[19,146303,146304],{},"margin:0;",[19,146306,146307],{},"padding:0; }",[269,146309],{"style":127353,"src":146310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[269,146312],{"style":127353,"src":146313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146315,146316],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,146318,69943],{},[29,146320,146321],{"className":127497,"code":140167,"language":127499,"meta":34,"style":34},[36,146322,146323,146329,146339],{"__ignoreMap":34},[39,146324,146325,146327],{"class":41,"line":42},[39,146326,131345],{"class":3021},[39,146328,16628],{"class":45},[39,146330,146331,146333,146335,146337],{"class":41,"line":74},[39,146332,131977],{"class":56},[39,146334,52491],{"class":45},[39,146336,24792],{"class":56},[39,146338,2359],{"class":45},[39,146340,146341],{"class":41,"line":99},[39,146342,2630],{"class":45},[19,146344,71507],{},[29,146346,146347],{"className":127497,"code":140167,"language":127499,"meta":34,"style":34},[36,146348,146349,146355,146365],{"__ignoreMap":34},[39,146350,146351,146353],{"class":41,"line":42},[39,146352,131345],{"class":3021},[39,146354,16628],{"class":45},[39,146356,146357,146359,146361,146363],{"class":41,"line":74},[39,146358,131977],{"class":56},[39,146360,52491],{"class":45},[39,146362,24792],{"class":56},[39,146364,2359],{"class":45},[39,146366,146367],{"class":41,"line":99},[39,146368,2630],{"class":45},[14,146370,146372],{"id":146371},"_215-swiper-插件使用","21.5 swiper 插件使用",[2205,146374,146375,146378,146381],{},[1174,146376,146377],{},"下载需要的css和js文件html页面中 引入相关文件",[1174,146379,146380],{},"官网找到类似案例，复制html结构，css样式 js 语法",[1174,146382,146383],{},"根据需求定制修改模块",[269,146385],{"style":127353,"src":146386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,146388,146389],{},"解压后将这两部分放到项目中",[269,146391],{"style":127353,"src":146392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,146394,146395],{},"这个插件可以帮助我们实现轮播图效果",[19,146397,146398],{},"用法：",[269,146400],{"style":127353,"src":146401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,146403,146404],{},"找到自己喜欢的",[269,146406],{"style":127353,"src":146407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,146409,146410],{},"右键，查看网页源代码",[269,146412],{"style":127353,"src":146413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,146415,146416],{},"复制人家的结构内容",[19,146418,146419],{},"然后去看API文档：",[269,146421],{"style":127353,"src":146422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,146424,146425],{},"可以看看如何修改样式",[19,146427,146428],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1133,146430,146431],{},"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":34,"searchDepth":74,"depth":74,"links":146433},[146434,146439,146443,146448,146453],{"id":145234,"depth":74,"text":145235,"children":146435},[146436,146437,146438],{"id":145238,"depth":99,"text":145239},{"id":145248,"depth":99,"text":145249},{"id":145343,"depth":99,"text":145344},{"id":145358,"depth":74,"text":145359,"children":146440},[146441,146442],{"id":145380,"depth":99,"text":145381},{"id":145396,"depth":99,"text":145397},{"id":145471,"depth":74,"text":145472,"children":146444},[146445,146446,146447],{"id":145484,"depth":99,"text":145485},{"id":145708,"depth":99,"text":145709},{"id":145715,"depth":99,"text":145716},{"id":145856,"depth":74,"text":145857,"children":146449},[146450,146451,146452],{"id":145883,"depth":99,"text":145884},{"id":145946,"depth":99,"text":145947},{"id":146291,"depth":99,"text":146292},{"id":146371,"depth":74,"text":146372},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145226,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146460,"title":146461,"body":146462,"description":1142,"extension":1143,"meta":146682,"navigation":1145,"path":146683,"seo":146684,"stem":146685,"__hash__":146686},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146463,"toc":146678},[146464,146467,146471,146474,146489,146494,146497,146502,146537,146542,146554,146559,146572,146577,146594,146599,146619,146624,146642,146645,146648,146651,146654,146658,146661,146664,146667,146670,146673,146676],[10,146465,146461],{"id":146466},"_22-代码提交与新型相对单位",[14,146468,146470],{"id":146469},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146472,146473],{},"法1：",[1171,146475,146476,146483,146486],{},[1174,146477,146478,146479],{},"登录网站注册：",[46,146480,146481],{"href":146481,"rel":146482},"https:\u002F\u002Fgitee.com\u002F",[24921],[1174,146484,146485],{},"码云创建新的仓库",[1174,146487,146488],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[2205,146490,146491],{},[1174,146492,146493],{},"在网站根目录右键-- Git Bash Here",[269,146495],{"style":127353,"src":146496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[2205,146498,146499],{},[1174,146500,146501],{},"如果是第一次利用git提交，请配置好全局选项",[29,146503,146505],{"className":118241,"code":146504,"language":118243,"meta":34,"style":34},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[36,146506,146507,146523],{"__ignoreMap":34},[39,146508,146509,146512,146514,146517,146520],{"class":41,"line":42},[39,146510,146511],{"class":3021},"git",[39,146513,120664],{"class":1319},[39,146515,146516],{"class":56}," --global",[39,146518,146519],{"class":1319}," user.name",[39,146521,146522],{"class":1319}," \"你的名字\"\n",[39,146524,146525,146527,146529,146531,146534],{"class":41,"line":74},[39,146526,146511],{"class":3021},[39,146528,120664],{"class":1319},[39,146530,146516],{"class":56},[39,146532,146533],{"class":1319}," user.email",[39,146535,146536],{"class":1319}," \"你的邮箱\"\n",[2205,146538,146539],{},[1174,146540,146541],{},"初始化仓库",[29,146543,146545],{"className":118241,"code":146544,"language":118243,"meta":34,"style":34},"git init\n",[36,146546,146547],{"__ignoreMap":34},[39,146548,146549,146551],{"class":41,"line":42},[39,146550,146511],{"class":3021},[39,146552,146553],{"class":1319}," init\n",[2205,146555,146556],{},[1174,146557,146558],{},"把本地文件放到暂存区",[29,146560,146562],{"className":118241,"code":146561,"language":118243,"meta":34,"style":34},"git add .\n",[36,146563,146564],{"__ignoreMap":34},[39,146565,146566,146568,146570],{"class":41,"line":42},[39,146567,146511],{"class":3021},[39,146569,6266],{"class":1319},[39,146571,29798],{"class":1319},[2205,146573,146574],{},[1174,146575,146576],{},"把本地文件放到本地仓库里面",[29,146578,146580],{"className":118241,"code":146579,"language":118243,"meta":34,"style":34},"git commit -m \"first commit\"\n",[36,146581,146582],{"__ignoreMap":34},[39,146583,146584,146586,146589,146591],{"class":41,"line":42},[39,146585,146511],{"class":3021},[39,146587,146588],{"class":1319}," commit",[39,146590,101827],{"class":56},[39,146592,146593],{"class":1319}," \"first commit\"\n",[2205,146595,146596],{},[1174,146597,146598],{},"链接远程仓库",[29,146600,146602],{"className":118241,"code":146601,"language":118243,"meta":34,"style":34},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[36,146603,146604],{"__ignoreMap":34},[39,146605,146606,146608,146611,146613,146616],{"class":41,"line":42},[39,146607,146511],{"class":3021},[39,146609,146610],{"class":1319}," remote",[39,146612,6266],{"class":1319},[39,146614,146615],{"class":1319}," origin",[39,146617,146618],{"class":1319}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[2205,146620,146621],{},[1174,146622,146623],{},"把本地仓库的文件推送到远程仓库 push",[29,146625,146627],{"className":118241,"code":146626,"language":118243,"meta":34,"style":34},"git push -u origin master\n",[36,146628,146629],{"__ignoreMap":34},[39,146630,146631,146633,146635,146637,146639],{"class":41,"line":42},[39,146632,146511],{"class":3021},[39,146634,30073],{"class":1319},[39,146636,29347],{"class":56},[39,146638,146615],{"class":1319},[39,146640,146641],{"class":1319}," master\n",[269,146643],{"style":127353,"src":146644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,146646,146647],{},"上方方法暂未实现，后边学完git后在整",[19,146649,146650],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[269,146652],{"style":127353,"src":146653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,146655,146657],{"id":146656},"_222-新型相对单位","22.2 新型相对单位",[269,146659],{"style":127353,"src":146660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[269,146662],{"style":127353,"src":146663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,146665,146666],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,146668,146669],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[269,146671],{"style":127353,"src":146672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,146674,146675],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1133,146677,25014],{},{"title":34,"searchDepth":74,"depth":74,"links":146679},[146680,146681],{"id":146469,"depth":74,"text":146470},{"id":146656,"depth":74,"text":146657},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146461,"description":1142},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146688,"title":146689,"body":146690,"description":146694,"extension":1143,"meta":146695,"navigation":1145,"path":146696,"seo":146697,"stem":146698,"__hash__":146699},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146691,"toc":146692},[],{"title":34,"searchDepth":74,"depth":74,"links":146693},[],"自己正经开始学编程的第一门语言！",{"category":93893},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146689,"description":146694},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146701,"title":146702,"body":146703,"description":1142,"extension":1143,"meta":147850,"navigation":1145,"path":147851,"seo":147852,"stem":147853,"__hash__":147854},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146704,"toc":147826},[146705,146708,146712,146715,146718,146743,146746,146752,146756,146759,146786,146789,146829,146832,146844,146847,146853,146857,146861,146888,146905,146912,146916,146919,146945,146948,146952,146955,146995,146998,147015,147021,147025,147030,147074,147077,147095,147098,147166,147170,147177,147180,147195,147198,147207,147210,147221,147224,147233,147236,147253,147256,147271,147275,147279,147282,147284,147304,147308,147311,147314,147325,147328,147334,147338,147344,147371,147374,147386,147389,147400,147403,147409,147413,147419,147469,147472,147514,147517,147550,147553,147587,147591,147594,147614,147617,147653,147656,147669,147673,147677,147683,147686,147699,147703,147706,147712,147715,147719,147722,147725,147774,147778,147794,147800,147807,147813,147823],[10,146706,146702],{"id":146707},"_1-python环境与第一个程序",[14,146709,146711],{"id":146710},"_11-什么是python","1.1 什么是Python",[19,146713,146714],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,146716,146717],{},"理解 Python 时抓住三个关键词：",[1171,146719,146720,146723,146726],{},[1174,146721,146722],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[1174,146724,146725],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[1174,146727,146728,146729,1425,146732,1425,146735,1425,146738,1425,146740,29442],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[36,146730,146731],{},"os",[36,146733,146734],{},"sys",[36,146736,146737],{},"json",[36,146739,58914],{},[36,146741,146742],{},"datetime",[19,146744,146745],{},"Python 程序的运行链路：",[29,146747,146750],{"className":146748,"code":146749,"language":6244,"meta":34},[6242],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[36,146751,146749],{"__ignoreMap":34},[14,146753,146755],{"id":146754},"_12-python解释器","1.2 Python解释器",[19,146757,146758],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[29,146760,146762],{"className":24878,"code":146761,"language":24880,"meta":34,"style":34},"python --version\npython3 --version\npython\npython3\n",[36,146763,146764,146770,146776,146781],{"__ignoreMap":34},[39,146765,146766,146768],{"class":41,"line":42},[39,146767,33],{"class":3021},[39,146769,27350],{"class":56},[39,146771,146772,146774],{"class":41,"line":74},[39,146773,101824],{"class":3021},[39,146775,27350],{"class":56},[39,146777,146778],{"class":41,"line":99},[39,146779,146780],{"class":3021},"python\n",[39,146782,146783],{"class":41,"line":106},[39,146784,146785],{"class":3021},"python3\n",[19,146787,146788],{},"进入交互模式后，可以直接输入表达式：",[29,146790,146792],{"className":31,"code":146791,"language":33,"meta":34,"style":34},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[36,146793,146794,146805,146810,146824],{"__ignoreMap":34},[39,146795,146796,146799,146801,146803],{"class":41,"line":42},[39,146797,146798],{"class":49},">>>",[39,146800,26175],{"class":56},[39,146802,46621],{"class":49},[39,146804,48777],{"class":56},[39,146806,146807],{"class":41,"line":74},[39,146808,146809],{"class":56},"3\n",[39,146811,146812,146814,146817,146819,146822],{"class":41,"line":99},[39,146813,146798],{"class":49},[39,146815,146816],{"class":56}," print",[39,146818,1221],{"class":45},[39,146820,146821],{"class":1319},"\"hello python\"",[39,146823,209],{"class":45},[39,146825,146826],{"class":41,"line":106},[39,146827,146828],{"class":45},"hello python\n",[19,146830,146831],{},"退出交互模式：",[29,146833,146835],{"className":31,"code":146834,"language":33,"meta":34,"style":34},"exit()\n",[36,146836,146837],{"__ignoreMap":34},[39,146838,146839,146842],{"class":41,"line":42},[39,146840,146841],{"class":56},"exit",[39,146843,3034],{"class":45},[19,146845,146846],{},"或使用快捷键：",[29,146848,146851],{"className":146849,"code":146850,"language":6244,"meta":34},[6242],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[36,146852,146850],{"__ignoreMap":34},[14,146854,146856],{"id":146855},"_13-安装python","1.3 安装Python",[1188,146858,146860],{"id":146859},"_131-windows安装","1.3.1 Windows安装",[1171,146862,146863,146870,146873,146879,146885],{},[1174,146864,146865,146866],{},"打开 Python 官网：",[46,146867,146868],{"href":146868,"rel":146869},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24921],[1174,146871,146872],{},"下载 Windows Installer。",[1174,146874,146875,146876,29442],{},"安装时勾选 ",[36,146877,146878],{},"Add Python to PATH",[1174,146880,146881,146882,29442],{},"点击 ",[36,146883,146884],{},"Install Now",[1174,146886,146887],{},"安装完成后打开命令提示符验证：",[29,146889,146891],{"className":24878,"code":146890,"language":24880,"meta":34,"style":34},"python --version\npip --version\n",[36,146892,146893,146899],{"__ignoreMap":34},[39,146894,146895,146897],{"class":41,"line":42},[39,146896,33],{"class":3021},[39,146898,27350],{"class":56},[39,146900,146901,146903],{"class":41,"line":74},[39,146902,24887],{"class":3021},[39,146904,27350],{"class":56},[19,146906,146907,146908,146911],{},"如果提示 ",[36,146909,146910],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[1188,146913,146915],{"id":146914},"_132-macos安装","1.3.2 macOS安装",[19,146917,146918],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[29,146920,146922],{"className":24878,"code":146921,"language":24880,"meta":34,"style":34},"brew install python\npython3 --version\npip3 --version\n",[36,146923,146924,146933,146939],{"__ignoreMap":34},[39,146925,146926,146929,146931],{"class":41,"line":42},[39,146927,146928],{"class":3021},"brew",[39,146930,24890],{"class":1319},[39,146932,125263],{"class":1319},[39,146934,146935,146937],{"class":41,"line":74},[39,146936,101824],{"class":3021},[39,146938,27350],{"class":56},[39,146940,146941,146943],{"class":41,"line":99},[39,146942,120645],{"class":3021},[39,146944,27350],{"class":56},[19,146946,146947],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[1188,146949,146951],{"id":146950},"_133-linux安装","1.3.3 Linux安装",[19,146953,146954],{},"Ubuntu\u002FDebian：",[29,146956,146958],{"className":24878,"code":146957,"language":24880,"meta":34,"style":34},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[36,146959,146960,146968,146983,146989],{"__ignoreMap":34},[39,146961,146962,146964,146966],{"class":41,"line":42},[39,146963,25633],{"class":3021},[39,146965,118262],{"class":1319},[39,146967,27299],{"class":1319},[39,146969,146970,146972,146974,146976,146978,146980],{"class":41,"line":74},[39,146971,25633],{"class":3021},[39,146973,118262],{"class":1319},[39,146975,24890],{"class":1319},[39,146977,105348],{"class":1319},[39,146979,101743],{"class":1319},[39,146981,146982],{"class":1319}," python3-venv\n",[39,146984,146985,146987],{"class":41,"line":99},[39,146986,101824],{"class":3021},[39,146988,27350],{"class":56},[39,146990,146991,146993],{"class":41,"line":106},[39,146992,120645],{"class":3021},[39,146994,27350],{"class":56},[19,146996,146997],{},"Fedora：",[29,146999,147001],{"className":24878,"code":147000,"language":24880,"meta":34,"style":34},"sudo dnf install python3 python3-pip\n",[36,147002,147003],{"__ignoreMap":34},[39,147004,147005,147007,147009,147011,147013],{"class":41,"line":42},[39,147006,25633],{"class":3021},[39,147008,27372],{"class":1319},[39,147010,24890],{"class":1319},[39,147012,105348],{"class":1319},[39,147014,120710],{"class":1319},[19,147016,147017,147018,147020],{},"Linux 上通常使用 ",[36,147019,101824],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147022,147024],{"id":147023},"_14-pip包管理器","1.4 pip包管理器",[19,147026,147027,147029],{},[36,147028,24887],{}," 用来安装第三方库。",[29,147031,147033],{"className":24878,"code":147032,"language":24880,"meta":34,"style":34},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[36,147034,147035,147044,147053,147061,147067],{"__ignoreMap":34},[39,147036,147037,147039,147041],{"class":41,"line":42},[39,147038,24887],{"class":3021},[39,147040,24890],{"class":1319},[39,147042,147043],{"class":1319}," requests\n",[39,147045,147046,147048,147051],{"class":41,"line":74},[39,147047,24887],{"class":3021},[39,147049,147050],{"class":1319}," uninstall",[39,147052,147043],{"class":1319},[39,147054,147055,147057,147059],{"class":41,"line":99},[39,147056,24887],{"class":3021},[39,147058,118519],{"class":1319},[39,147060,147043],{"class":1319},[39,147062,147063,147065],{"class":41,"line":106},[39,147064,24887],{"class":3021},[39,147066,119900],{"class":1319},[39,147068,147069,147071],{"class":41,"line":112},[39,147070,24887],{"class":3021},[39,147072,147073],{"class":1319}," freeze\n",[19,147075,147076],{},"国内网络较慢时可以临时使用镜像：",[29,147078,147080],{"className":24878,"code":147079,"language":24880,"meta":34,"style":34},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[36,147081,147082],{"__ignoreMap":34},[39,147083,147084,147086,147088,147091,147093],{"class":41,"line":42},[39,147085,24887],{"class":3021},[39,147087,24890],{"class":1319},[39,147089,147090],{"class":1319}," requests",[39,147092,27487],{"class":56},[39,147094,120673],{"class":1319},[19,147096,147097],{},"常见第三方库：",[1352,147099,147100,147109],{},[1355,147101,147102],{},[1358,147103,147104,147107],{},[1361,147105,147106],{},"库",[1361,147108,103641],{},[1398,147110,147111,147119,147126,147134,147142,147150,147158],{},[1358,147112,147113,147116],{},[1403,147114,147115],{},"requests",[1403,147117,147118],{},"网络请求",[1358,147120,147121,147123],{},[1403,147122,101571],{},[1403,147124,147125],{},"数值计算",[1358,147127,147128,147131],{},[1403,147129,147130],{},"pandas",[1403,147132,147133],{},"表格数据处理",[1358,147135,147136,147139],{},[1403,147137,147138],{},"matplotlib",[1403,147140,147141],{},"绘图",[1358,147143,147144,147147],{},[1403,147145,147146],{},"pyecharts",[1403,147148,147149],{},"ECharts 图表",[1358,147151,147152,147155],{},[1403,147153,147154],{},"flask",[1403,147156,147157],{},"Web 后端",[1358,147159,147160,147163],{},[1403,147161,147162],{},"pytest",[1403,147164,147165],{},"自动化测试",[14,147167,147169],{"id":147168},"_15-虚拟环境","1.5 虚拟环境",[19,147171,147172,147173,147176],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[36,147174,147175],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147178,147179],{},"创建虚拟环境：",[29,147181,147183],{"className":24878,"code":147182,"language":24880,"meta":34,"style":34},"python -m venv .venv\n",[36,147184,147185],{"__ignoreMap":34},[39,147186,147187,147189,147191,147193],{"class":41,"line":42},[39,147188,33],{"class":3021},[39,147190,101827],{"class":56},[39,147192,101830],{"class":1319},[39,147194,101833],{"class":1319},[19,147196,147197],{},"Windows 激活：",[29,147199,147201],{"className":24878,"code":147200,"language":24880,"meta":34,"style":34},".venv\\Scripts\\activate\n",[36,147202,147203],{"__ignoreMap":34},[39,147204,147205],{"class":41,"line":42},[39,147206,147200],{"class":3021},[19,147208,147209],{},"macOS\u002FLinux 激活：",[29,147211,147213],{"className":24878,"code":147212,"language":24880,"meta":34,"style":34},"source .venv\u002Fbin\u002Factivate\n",[36,147214,147215],{"__ignoreMap":34},[39,147216,147217,147219],{"class":41,"line":42},[39,147218,101838],{"class":56},[39,147220,101841],{"class":1319},[19,147222,147223],{},"退出虚拟环境：",[29,147225,147227],{"className":24878,"code":147226,"language":24880,"meta":34,"style":34},"deactivate\n",[36,147228,147229],{"__ignoreMap":34},[39,147230,147231],{"class":41,"line":42},[39,147232,147226],{"class":3021},[19,147234,147235],{},"保存依赖：",[29,147237,147239],{"className":24878,"code":147238,"language":24880,"meta":34,"style":34},"pip freeze > requirements.txt\n",[36,147240,147241],{"__ignoreMap":34},[39,147242,147243,147245,147248,147250],{"class":41,"line":42},[39,147244,24887],{"class":3021},[39,147246,147247],{"class":1319}," freeze",[39,147249,27279],{"class":49},[39,147251,147252],{"class":1319}," requirements.txt\n",[19,147254,147255],{},"安装依赖：",[29,147257,147259],{"className":24878,"code":147258,"language":24880,"meta":34,"style":34},"pip install -r requirements.txt\n",[36,147260,147261],{"__ignoreMap":34},[39,147262,147263,147265,147267,147269],{"class":41,"line":42},[39,147264,24887],{"class":3021},[39,147266,24890],{"class":1319},[39,147268,120584],{"class":56},[39,147270,147252],{"class":1319},[14,147272,147274],{"id":147273},"_16-开发工具","1.6 开发工具",[1188,147276,147278],{"id":147277},"_161-pycharm","1.6.1 PyCharm",[19,147280,147281],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147283,123007],{},[1171,147285,147286,147289,147292,147298,147301],{},[1174,147287,147288],{},"New Project：创建项目。",[1174,147290,147291],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[1174,147293,147294,147295,126928],{},"New Python File：创建 ",[36,147296,147297],{},".py",[1174,147299,147300],{},"Run：运行当前文件。",[1174,147302,147303],{},"Debug：断点调试。",[1188,147305,147307],{"id":147306},"_162-vs-code","1.6.2 VS Code",[19,147309,147310],{},"VS Code 轻量，适合后续多语言开发。",[19,147312,147313],{},"建议安装插件：",[1171,147315,147316,147319,147322],{},[1174,147317,147318],{},"Python。",[1174,147320,147321],{},"Pylance。",[1174,147323,147324],{},"Jupyter。",[19,147326,147327],{},"选择解释器：",[29,147329,147332],{"className":147330,"code":147331,"language":6244,"meta":34},[6242],"Ctrl + Shift + P -> Python: Select Interpreter\n",[36,147333,147331],{"__ignoreMap":34},[14,147335,147337],{"id":147336},"_17-第一个python程序","1.7 第一个Python程序",[19,147339,147340,147341,25675],{},"创建文件 ",[36,147342,147343],{},"hello.py",[29,147345,147347],{"className":31,"code":147346,"language":33,"meta":34,"style":34},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[36,147348,147349,147360],{"__ignoreMap":34},[39,147350,147351,147353,147355,147358],{"class":41,"line":42},[39,147352,31470],{"class":56},[39,147354,1221],{"class":45},[39,147356,147357],{"class":1319},"\"Hello World\"",[39,147359,209],{"class":45},[39,147361,147362,147364,147366,147369],{"class":41,"line":74},[39,147363,31470],{"class":56},[39,147365,1221],{"class":45},[39,147367,147368],{"class":1319},"\"你好，Python\"",[39,147370,209],{"class":45},[19,147372,147373],{},"在终端运行：",[29,147375,147377],{"className":24878,"code":147376,"language":24880,"meta":34,"style":34},"python hello.py\n",[36,147378,147379],{"__ignoreMap":34},[39,147380,147381,147383],{"class":41,"line":42},[39,147382,33],{"class":3021},[39,147384,147385],{"class":1319}," hello.py\n",[19,147387,147388],{},"或：",[29,147390,147392],{"className":24878,"code":147391,"language":24880,"meta":34,"style":34},"python3 hello.py\n",[36,147393,147394],{"__ignoreMap":34},[39,147395,147396,147398],{"class":41,"line":42},[39,147397,101824],{"class":3021},[39,147399,147385],{"class":1319},[19,147401,147402],{},"输出：",[29,147404,147407],{"className":147405,"code":147406,"language":6244,"meta":34},[6242],"Hello World\n你好，Python\n",[36,147408,147406],{"__ignoreMap":34},[14,147410,147412],{"id":147411},"_18-print函数","1.8 print函数",[19,147414,147415,147418],{},[36,147416,147417],{},"print()"," 用来输出内容。",[29,147420,147422],{"className":31,"code":147421,"language":33,"meta":34,"style":34},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[36,147423,147424,147434,147444,147454],{"__ignoreMap":34},[39,147425,147426,147428,147430,147432],{"class":41,"line":42},[39,147427,31470],{"class":56},[39,147429,1221],{"class":45},[39,147431,6900],{"class":1319},[39,147433,209],{"class":45},[39,147435,147436,147438,147440,147442],{"class":41,"line":74},[39,147437,31470],{"class":56},[39,147439,1221],{"class":45},[39,147441,1519],{"class":56},[39,147443,209],{"class":45},[39,147445,147446,147448,147450,147452],{"class":41,"line":99},[39,147447,31470],{"class":56},[39,147449,1221],{"class":45},[39,147451,1267],{"class":56},[39,147453,209],{"class":45},[39,147455,147456,147458,147460,147463,147465,147467],{"class":41,"line":106},[39,147457,31470],{"class":56},[39,147459,1221],{"class":45},[39,147461,147462],{"class":1319},"\"年龄:\"",[39,147464,13491],{"class":45},[39,147466,1849],{"class":56},[39,147468,209],{"class":45},[19,147470,147471],{},"多个内容用逗号隔开，默认中间加空格：",[29,147473,147475],{"className":31,"code":147474,"language":33,"meta":34,"style":34},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[36,147476,147477,147487,147497],{"__ignoreMap":34},[39,147478,147479,147482,147484],{"class":41,"line":42},[39,147480,147481],{"class":45},"name ",[39,147483,50],{"class":49},[39,147485,147486],{"class":1319}," \"张三\"\n",[39,147488,147489,147492,147494],{"class":41,"line":74},[39,147490,147491],{"class":45},"age ",[39,147493,50],{"class":49},[39,147495,147496],{"class":56}," 18\n",[39,147498,147499,147501,147503,147506,147509,147511],{"class":41,"line":99},[39,147500,31470],{"class":56},[39,147502,1221],{"class":45},[39,147504,147505],{"class":1319},"\"姓名:\"",[39,147507,147508],{"class":45},", name, ",[39,147510,147462],{"class":1319},[39,147512,147513],{"class":45},", age)\n",[19,147515,147516],{},"修改分隔符：",[29,147518,147520],{"className":31,"code":147519,"language":33,"meta":34,"style":34},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[36,147521,147522],{"__ignoreMap":34},[39,147523,147524,147526,147528,147531,147533,147535,147537,147539,147541,147544,147546,147548],{"class":41,"line":42},[39,147525,31470],{"class":56},[39,147527,1221],{"class":45},[39,147529,147530],{"class":1319},"\"2024\"",[39,147532,13491],{"class":45},[39,147534,55370],{"class":1319},[39,147536,13491],{"class":45},[39,147538,55370],{"class":1319},[39,147540,13491],{"class":45},[39,147542,147543],{"class":254},"sep",[39,147545,50],{"class":49},[39,147547,33538],{"class":1319},[39,147549,209],{"class":45},[19,147551,147552],{},"修改结尾符：",[29,147554,147556],{"className":31,"code":147555,"language":33,"meta":34,"style":34},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[36,147557,147558,147576],{"__ignoreMap":34},[39,147559,147560,147562,147564,147566,147568,147570,147572,147574],{"class":41,"line":42},[39,147561,31470],{"class":56},[39,147563,1221],{"class":45},[39,147565,6900],{"class":1319},[39,147567,13491],{"class":45},[39,147569,46856],{"class":254},[39,147571,50],{"class":49},[39,147573,5417],{"class":1319},[39,147575,209],{"class":45},[39,147577,147578,147580,147582,147585],{"class":41,"line":74},[39,147579,31470],{"class":56},[39,147581,1221],{"class":45},[39,147583,147584],{"class":1319},"\"python\"",[39,147586,209],{"class":45},[14,147588,147590],{"id":147589},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,147592,147593],{},"交互运行适合临时验证：",[29,147595,147597],{"className":31,"code":147596,"language":33,"meta":34,"style":34},">>> 10 * 3\n30\n",[36,147598,147599,147609],{"__ignoreMap":34},[39,147600,147601,147603,147605,147607],{"class":41,"line":42},[39,147602,146798],{"class":49},[39,147604,3096],{"class":56},[39,147606,7574],{"class":49},[39,147608,120981],{"class":56},[39,147610,147611],{"class":41,"line":74},[39,147612,147613],{"class":56},"30\n",[19,147615,147616],{},"脚本运行适合保存程序：",[29,147618,147620],{"className":31,"code":147619,"language":33,"meta":34,"style":34},"price = 8\ncount = 5\nprint(price * count)\n",[36,147621,147622,147632,147641],{"__ignoreMap":34},[39,147623,147624,147627,147629],{"class":41,"line":42},[39,147625,147626],{"class":45},"price ",[39,147628,50],{"class":49},[39,147630,147631],{"class":56}," 8\n",[39,147633,147634,147637,147639],{"class":41,"line":74},[39,147635,147636],{"class":45},"count ",[39,147638,50],{"class":49},[39,147640,55481],{"class":56},[39,147642,147643,147645,147648,147650],{"class":41,"line":99},[39,147644,31470],{"class":56},[39,147646,147647],{"class":45},"(price ",[39,147649,1657],{"class":49},[39,147651,147652],{"class":45}," count)\n",[19,147654,147655],{},"实际学习中推荐：",[1171,147657,147658,147661,147666],{},[1174,147659,147660],{},"临时试一个语法，用交互模式。",[1174,147662,147663,147664,126928],{},"写完整练习，用 ",[36,147665,147297],{},[1174,147667,147668],{},"写项目，用独立目录和虚拟环境。",[14,147670,147672],{"id":147671},"_110-常见错误","1.10 常见错误",[1188,147674,147676],{"id":147675},"_1101-命令找不到","1.10.1 命令找不到",[29,147678,147681],{"className":147679,"code":147680,"language":6244,"meta":34},[6242],"python: command not found\n",[36,147682,147680],{"__ignoreMap":34},[19,147684,147685],{},"原因：",[1171,147687,147688,147691,147694],{},[1174,147689,147690],{},"没安装 Python。",[1174,147692,147693],{},"PATH 没配置。",[1174,147695,147696,147697,29442],{},"Linux\u002FmacOS 应该使用 ",[36,147698,101824],{},[1188,147700,147702],{"id":147701},"_1102-文件名冲突","1.10.2 文件名冲突",[19,147704,147705],{},"不要把文件命名为：",[29,147707,147710],{"className":147708,"code":147709,"language":6244,"meta":34},[6242],"random.py\njson.py\ntime.py\nrequests.py\n",[36,147711,147709],{"__ignoreMap":34},[19,147713,147714],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[1188,147716,147718],{"id":147717},"_1103-中文乱码","1.10.3 中文乱码",[19,147720,147721],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,147723,147724],{},"如果读写文件出现乱码，要明确指定编码：",[29,147726,147728],{"className":31,"code":147727,"language":33,"meta":34,"style":34},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[36,147729,147730,147764],{"__ignoreMap":34},[39,147731,147732,147734,147737,147739,147742,147744,147747,147749,147752,147754,147757,147759,147761],{"class":41,"line":42},[39,147733,108778],{"class":49},[39,147735,147736],{"class":56}," open",[39,147738,1221],{"class":45},[39,147740,147741],{"class":1319},"\"data.txt\"",[39,147743,13491],{"class":45},[39,147745,147746],{"class":1319},"\"r\"",[39,147748,13491],{"class":45},[39,147750,147751],{"class":254},"encoding",[39,147753,50],{"class":49},[39,147755,147756],{"class":1319},"\"utf-8\"",[39,147758,14770],{"class":45},[39,147760,32438],{"class":49},[39,147762,147763],{"class":45}," f:\n",[39,147765,147766,147769,147771],{"class":41,"line":74},[39,147767,147768],{"class":45},"    content ",[39,147770,50],{"class":49},[39,147772,147773],{"class":45}," f.read()\n",[14,147775,147777],{"id":147776},"_111-本章练习","1.11 本章练习",[1171,147779,147780,147783,147789],{},[1174,147781,147782],{},"安装 Python，并在终端输出版本号。",[1174,147784,147785,147786,147788],{},"新建 ",[36,147787,147343],{},"，输出自己的姓名、年龄、学习目标。",[1174,147790,105311,147791,147793],{},[36,147792,147417],{}," 输出下面格式：",[29,147795,147798],{"className":147796,"code":147797,"language":6244,"meta":34},[6242],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[36,147799,147797],{"__ignoreMap":34},[1171,147801,147802],{"start":106},[1174,147803,105311,147804,147806],{},[36,147805,147543],{}," 输出日期：",[29,147808,147811],{"className":147809,"code":147810,"language":6244,"meta":34},[6242],"2024-10-10\n",[36,147812,147810],{"__ignoreMap":34},[1171,147814,147815],{"start":112},[1174,147816,105311,147817,147819,147820,147822],{},[36,147818,46856],{}," 让两次 ",[36,147821,147417],{}," 输出在同一行。",[1133,147824,147825],{},"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":34,"searchDepth":74,"depth":74,"links":147827},[147828,147829,147830,147835,147836,147837,147841,147842,147843,147844,147849],{"id":146710,"depth":74,"text":146711},{"id":146754,"depth":74,"text":146755},{"id":146855,"depth":74,"text":146856,"children":147831},[147832,147833,147834],{"id":146859,"depth":99,"text":146860},{"id":146914,"depth":99,"text":146915},{"id":146950,"depth":99,"text":146951},{"id":147023,"depth":74,"text":147024},{"id":147168,"depth":74,"text":147169},{"id":147273,"depth":74,"text":147274,"children":147838},[147839,147840],{"id":147277,"depth":99,"text":147278},{"id":147306,"depth":99,"text":147307},{"id":147336,"depth":74,"text":147337},{"id":147411,"depth":74,"text":147412},{"id":147589,"depth":74,"text":147590},{"id":147671,"depth":74,"text":147672,"children":147845},[147846,147847,147848],{"id":147675,"depth":99,"text":147676},{"id":147701,"depth":99,"text":147702},{"id":147717,"depth":99,"text":147718},{"id":147776,"depth":74,"text":147777},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146702,"description":1142},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147856,"title":147857,"body":147858,"description":1142,"extension":1143,"meta":150262,"navigation":1145,"path":150263,"seo":150264,"stem":150265,"__hash__":150266},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147859,"toc":150247},[147860,147863,147867,147870,147873,147890,147893,147935,147938,147942,147945,147948,147985,147988,148022,148025,148117,148121,148135,148138,148165,148168,148172,148275,148282,148285,148302,148306,148313,148502,148505,148578,148582,148585,148669,148672,148704,148708,148912,148915,148919,148925,149027,149030,149286,149290,149293,149296,149310,149312,149498,149502,149864,149870,149874,149877,150001,150004,150183,150186,150190,150223,150227,150244],[10,147861,147857],{"id":147862},"_10-json与pyecharts折线图",[14,147864,147866],{"id":147865},"_101-数据可视化","10.1 数据可视化",[19,147868,147869],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147871,147872],{},"常见图表：",[1171,147874,147875,147878,147881,147884,147887],{},[1174,147876,147877],{},"折线图：看趋势。",[1174,147879,147880],{},"柱状图：看分类对比。",[1174,147882,147883],{},"饼图：看占比。",[1174,147885,147886],{},"地图：看地域分布。",[1174,147888,147889],{},"散点图：看两个变量之间的关系。",[19,147891,147892],{},"Python 可视化常用库：",[1352,147894,147895,147903],{},[1355,147896,147897],{},[1358,147898,147899,147901],{},[1361,147900,147106],{},[1361,147902,24796],{},[1398,147904,147905,147912,147920,147927],{},[1358,147906,147907,147909],{},[1403,147908,147138],{},[1403,147910,147911],{},"基础、经典、可定制",[1358,147913,147914,147917],{},[1403,147915,147916],{},"seaborn",[1403,147918,147919],{},"统计图表更美观",[1358,147921,147922,147924],{},[1403,147923,147146],{},[1403,147925,147926],{},"生成交互式网页图表",[1358,147928,147929,147932],{},[1403,147930,147931],{},"plotly",[1403,147933,147934],{},"交互图表能力强",[19,147936,147937],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147939,147941],{"id":147940},"_102-json回顾","10.2 JSON回顾",[19,147943,147944],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147946,147947],{},"Python 字典：",[29,147949,147951],{"className":31,"code":147950,"language":33,"meta":34,"style":34},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[36,147952,147953,147961,147972,147981],{"__ignoreMap":34},[39,147954,147955,147957,147959],{"class":41,"line":42},[39,147956,102603],{"class":45},[39,147958,50],{"class":49},[39,147960,16628],{"class":45},[39,147962,147963,147966,147968,147970],{"class":41,"line":74},[39,147964,147965],{"class":1319},"    \"name\"",[39,147967,52491],{"class":45},[39,147969,70323],{"class":1319},[39,147971,32521],{"class":45},[39,147973,147974,147977,147979],{"class":41,"line":99},[39,147975,147976],{"class":1319},"    \"value\"",[39,147978,52491],{"class":45},[39,147980,98507],{"class":56},[39,147982,147983],{"class":41,"line":106},[39,147984,2630],{"class":45},[19,147986,147987],{},"JSON 字符串：",[29,147989,147992],{"className":147990,"code":147991,"language":146737,"meta":34,"style":34},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[36,147993,147994,147998,148009,148018],{"__ignoreMap":34},[39,147995,147996],{"class":41,"line":42},[39,147997,2611],{"class":45},[39,147999,148000,148003,148005,148007],{"class":41,"line":74},[39,148001,148002],{"class":56},"  \"name\"",[39,148004,52491],{"class":45},[39,148006,70323],{"class":1319},[39,148008,32521],{"class":45},[39,148010,148011,148014,148016],{"class":41,"line":99},[39,148012,148013],{"class":56},"  \"value\"",[39,148015,52491],{"class":45},[39,148017,98507],{"class":56},[39,148019,148020],{"class":41,"line":106},[39,148021,2630],{"class":45},[19,148023,148024],{},"Python 与 JSON 的转换：",[29,148026,148028],{"className":31,"code":148027,"language":33,"meta":34,"style":34},"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",[36,148029,148030,148037,148041,148066,148070,148089,148096,148100,148110],{"__ignoreMap":34},[39,148031,148032,148034],{"class":41,"line":42},[39,148033,31447],{"class":49},[39,148035,148036],{"class":45}," json\n",[39,148038,148039],{"class":41,"line":74},[39,148040,3458],{"emptyLinePlaceholder":1145},[39,148042,148043,148045,148047,148049,148051,148053,148055,148057,148060,148062,148064],{"class":41,"line":99},[39,148044,102603],{"class":45},[39,148046,50],{"class":49},[39,148048,5506],{"class":45},[39,148050,63733],{"class":1319},[39,148052,52491],{"class":45},[39,148054,70323],{"class":1319},[39,148056,13491],{"class":45},[39,148058,148059],{"class":1319},"\"value\"",[39,148061,52491],{"class":45},[39,148063,1519],{"class":56},[39,148065,2630],{"class":45},[39,148067,148068],{"class":41,"line":106},[39,148069,3458],{"emptyLinePlaceholder":1145},[39,148071,148072,148075,148077,148080,148083,148085,148087],{"class":41,"line":112},[39,148073,148074],{"class":45},"json_text ",[39,148076,50],{"class":49},[39,148078,148079],{"class":45}," json.dumps(data, ",[39,148081,148082],{"class":254},"ensure_ascii",[39,148084,50],{"class":49},[39,148086,35042],{"class":56},[39,148088,209],{"class":45},[39,148090,148091,148093],{"class":41,"line":118},[39,148092,31470],{"class":56},[39,148094,148095],{"class":45},"(json_text)\n",[39,148097,148098],{"class":41,"line":413},[39,148099,3458],{"emptyLinePlaceholder":1145},[39,148101,148102,148105,148107],{"class":41,"line":419},[39,148103,148104],{"class":45},"new_data ",[39,148106,50],{"class":49},[39,148108,148109],{"class":45}," json.loads(json_text)\n",[39,148111,148112,148114],{"class":41,"line":425},[39,148113,31470],{"class":56},[39,148115,148116],{"class":45},"(new_data)\n",[14,148118,148120],{"id":148119},"_103-安装pyecharts","10.3 安装pyecharts",[29,148122,148124],{"className":24878,"code":148123,"language":24880,"meta":34,"style":34},"pip install pyecharts\n",[36,148125,148126],{"__ignoreMap":34},[39,148127,148128,148130,148132],{"class":41,"line":42},[39,148129,24887],{"class":3021},[39,148131,24890],{"class":1319},[39,148133,148134],{"class":1319}," pyecharts\n",[19,148136,148137],{},"验证：",[29,148139,148141],{"className":31,"code":148140,"language":33,"meta":34,"style":34},"import pyecharts\n\nprint(pyecharts.__version__)\n",[36,148142,148143,148149,148153],{"__ignoreMap":34},[39,148144,148145,148147],{"class":41,"line":42},[39,148146,31447],{"class":49},[39,148148,148134],{"class":45},[39,148150,148151],{"class":41,"line":74},[39,148152,3458],{"emptyLinePlaceholder":1145},[39,148154,148155,148157,148160,148163],{"class":41,"line":99},[39,148156,31470],{"class":56},[39,148158,148159],{"class":45},"(pyecharts.",[39,148161,148162],{"class":56},"__version__",[39,148164,209],{"class":45},[19,148166,148167],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148169,148171],{"id":148170},"_104-第一个折线图","10.4 第一个折线图",[29,148173,148175],{"className":31,"code":148174,"language":33,"meta":34,"style":34},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[36,148176,148177,148189,148193,148203,148233,148265],{"__ignoreMap":34},[39,148178,148179,148181,148184,148186],{"class":41,"line":42},[39,148180,31792],{"class":49},[39,148182,148183],{"class":45}," pyecharts.charts ",[39,148185,31447],{"class":49},[39,148187,148188],{"class":45}," Line\n",[39,148190,148191],{"class":41,"line":74},[39,148192,3458],{"emptyLinePlaceholder":1145},[39,148194,148195,148198,148200],{"class":41,"line":99},[39,148196,148197],{"class":45},"line ",[39,148199,50],{"class":49},[39,148201,148202],{"class":45}," Line()\n",[39,148204,148205,148208,148211,148213,148216,148218,148221,148223,148226,148228,148231],{"class":41,"line":106},[39,148206,148207],{"class":45},"line.add_xaxis([",[39,148209,148210],{"class":1319},"\"周一\"",[39,148212,13491],{"class":45},[39,148214,148215],{"class":1319},"\"周二\"",[39,148217,13491],{"class":45},[39,148219,148220],{"class":1319},"\"周三\"",[39,148222,13491],{"class":45},[39,148224,148225],{"class":1319},"\"周四\"",[39,148227,13491],{"class":45},[39,148229,148230],{"class":1319},"\"周五\"",[39,148232,71],{"class":45},[39,148234,148235,148238,148241,148243,148245,148247,148249,148251,148253,148255,148258,148260,148263],{"class":41,"line":112},[39,148236,148237],{"class":45},"line.add_yaxis(",[39,148239,148240],{"class":1319},"\"销售额\"",[39,148242,78572],{"class":45},[39,148244,1519],{"class":56},[39,148246,13491],{"class":45},[39,148248,2015],{"class":56},[39,148250,13491],{"class":45},[39,148252,2060],{"class":56},[39,148254,13491],{"class":45},[39,148256,148257],{"class":56},"150",[39,148259,13491],{"class":45},[39,148261,148262],{"class":56},"180",[39,148264,71],{"class":45},[39,148266,148267,148270,148273],{"class":41,"line":118},[39,148268,148269],{"class":45},"line.render(",[39,148271,148272],{"class":1319},"\"line.html\"",[39,148274,209],{"class":45},[19,148276,148277,148278,148281],{},"运行后会生成 ",[36,148279,148280],{},"line.html","，用浏览器打开即可看到图表。",[19,148283,148284],{},"核心步骤：",[1171,148286,148287,148290,148293,148296,148299],{},[1174,148288,148289],{},"导入图表类。",[1174,148291,148292],{},"创建图表对象。",[1174,148294,148295],{},"添加 x 轴数据。",[1174,148297,148298],{},"添加 y 轴数据。",[1174,148300,148301],{},"渲染为 HTML。",[14,148303,148305],{"id":148304},"_105-全局配置","10.5 全局配置",[19,148307,148308,148309,148312],{},"常用配置在 ",[36,148310,148311],{},"pyecharts.options"," 中。",[29,148314,148316],{"className":31,"code":148315,"language":33,"meta":34,"style":34},"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",[36,148317,148318,148335,148345,148349,148357,148381,148409,148414,148433,148452,148470,148490,148494],{"__ignoreMap":34},[39,148319,148320,148322,148325,148327,148330,148332],{"class":41,"line":42},[39,148321,31792],{"class":49},[39,148323,148324],{"class":45}," pyecharts ",[39,148326,31447],{"class":49},[39,148328,148329],{"class":45}," options ",[39,148331,32438],{"class":49},[39,148333,148334],{"class":45}," opts\n",[39,148336,148337,148339,148341,148343],{"class":41,"line":74},[39,148338,31792],{"class":49},[39,148340,148183],{"class":45},[39,148342,31447],{"class":49},[39,148344,148188],{"class":45},[39,148346,148347],{"class":41,"line":99},[39,148348,3458],{"emptyLinePlaceholder":1145},[39,148350,148351,148353,148355],{"class":41,"line":106},[39,148352,148197],{"class":45},[39,148354,50],{"class":49},[39,148356,148202],{"class":45},[39,148358,148359,148361,148363,148365,148367,148369,148371,148373,148375,148377,148379],{"class":41,"line":112},[39,148360,148207],{"class":45},[39,148362,148210],{"class":1319},[39,148364,13491],{"class":45},[39,148366,148215],{"class":1319},[39,148368,13491],{"class":45},[39,148370,148220],{"class":1319},[39,148372,13491],{"class":45},[39,148374,148225],{"class":1319},[39,148376,13491],{"class":45},[39,148378,148230],{"class":1319},[39,148380,71],{"class":45},[39,148382,148383,148385,148387,148389,148391,148393,148395,148397,148399,148401,148403,148405,148407],{"class":41,"line":118},[39,148384,148237],{"class":45},[39,148386,148240],{"class":1319},[39,148388,78572],{"class":45},[39,148390,1519],{"class":56},[39,148392,13491],{"class":45},[39,148394,2015],{"class":56},[39,148396,13491],{"class":45},[39,148398,2060],{"class":56},[39,148400,13491],{"class":45},[39,148402,148257],{"class":56},[39,148404,13491],{"class":45},[39,148406,148262],{"class":56},[39,148408,71],{"class":45},[39,148410,148411],{"class":41,"line":413},[39,148412,148413],{"class":45},"line.set_global_opts(\n",[39,148415,148416,148419,148421,148424,148426,148428,148431],{"class":41,"line":419},[39,148417,148418],{"class":254},"    title_opts",[39,148420,50],{"class":49},[39,148422,148423],{"class":45},"opts.TitleOpts(",[39,148425,52461],{"class":254},[39,148427,50],{"class":49},[39,148429,148430],{"class":1319},"\"一周销售额\"",[39,148432,39102],{"class":45},[39,148434,148435,148438,148440,148443,148445,148447,148450],{"class":41,"line":425},[39,148436,148437],{"class":254},"    xaxis_opts",[39,148439,50],{"class":49},[39,148441,148442],{"class":45},"opts.AxisOpts(",[39,148444,80864],{"class":254},[39,148446,50],{"class":49},[39,148448,148449],{"class":1319},"\"日期\"",[39,148451,39102],{"class":45},[39,148453,148454,148457,148459,148461,148463,148465,148468],{"class":41,"line":443},[39,148455,148456],{"class":254},"    yaxis_opts",[39,148458,50],{"class":49},[39,148460,148442],{"class":45},[39,148462,80864],{"class":254},[39,148464,50],{"class":49},[39,148466,148467],{"class":1319},"\"金额\"",[39,148469,39102],{"class":45},[39,148471,148472,148475,148477,148480,148483,148485,148488],{"class":41,"line":449},[39,148473,148474],{"class":254},"    tooltip_opts",[39,148476,50],{"class":49},[39,148478,148479],{"class":45},"opts.TooltipOpts(",[39,148481,148482],{"class":254},"trigger",[39,148484,50],{"class":49},[39,148486,148487],{"class":1319},"\"axis\"",[39,148489,39102],{"class":45},[39,148491,148492],{"class":41,"line":455},[39,148493,209],{"class":45},[39,148495,148496,148498,148500],{"class":41,"line":461},[39,148497,148269],{"class":45},[39,148499,148272],{"class":1319},[39,148501,209],{"class":45},[19,148503,148504],{},"常见全局配置：",[1352,148506,148507,148516],{},[1355,148508,148509],{},[1358,148510,148511,148514],{},[1361,148512,148513],{},"配置",[1361,148515,103641],{},[1398,148517,148518,148528,148538,148548,148558,148568],{},[1358,148519,148520,148525],{},[1403,148521,148522],{},[36,148523,148524],{},"TitleOpts",[1403,148526,148527],{},"标题",[1358,148529,148530,148535],{},[1403,148531,148532],{},[36,148533,148534],{},"LegendOpts",[1403,148536,148537],{},"图例",[1358,148539,148540,148545],{},[1403,148541,148542],{},[36,148543,148544],{},"TooltipOpts",[1403,148546,148547],{},"提示框",[1358,148549,148550,148555],{},[1403,148551,148552],{},[36,148553,148554],{},"AxisOpts",[1403,148556,148557],{},"坐标轴",[1358,148559,148560,148565],{},[1403,148561,148562],{},[36,148563,148564],{},"VisualMapOpts",[1403,148566,148567],{},"视觉映射",[1358,148569,148570,148575],{},[1403,148571,148572],{},[36,148573,148574],{},"DataZoomOpts",[1403,148576,148577],{},"区域缩放",[14,148579,148581],{"id":148580},"_106-系列配置","10.6 系列配置",[19,148583,148584],{},"系列配置作用于某一组数据。",[29,148586,148588],{"className":31,"code":148587,"language":33,"meta":34,"style":34},"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",[36,148589,148590,148595,148606,148635,148646,148665],{"__ignoreMap":34},[39,148591,148592],{"class":41,"line":42},[39,148593,148594],{"class":45},"line.add_yaxis(\n",[39,148596,148597,148600,148602,148604],{"class":41,"line":74},[39,148598,148599],{"class":254},"    series_name",[39,148601,50],{"class":49},[39,148603,148240],{"class":1319},[39,148605,32521],{"class":45},[39,148607,148608,148611,148613,148615,148617,148619,148621,148623,148625,148627,148629,148631,148633],{"class":41,"line":99},[39,148609,148610],{"class":254},"    y_axis",[39,148612,50],{"class":49},[39,148614,2088],{"class":45},[39,148616,1519],{"class":56},[39,148618,13491],{"class":45},[39,148620,2015],{"class":56},[39,148622,13491],{"class":45},[39,148624,2060],{"class":56},[39,148626,13491],{"class":45},[39,148628,148257],{"class":56},[39,148630,13491],{"class":45},[39,148632,148262],{"class":56},[39,148634,88890],{"class":45},[39,148636,148637,148640,148642,148644],{"class":41,"line":106},[39,148638,148639],{"class":254},"    is_smooth",[39,148641,50],{"class":49},[39,148643,32531],{"class":56},[39,148645,32521],{"class":45},[39,148647,148648,148651,148653,148656,148659,148661,148663],{"class":41,"line":112},[39,148649,148650],{"class":254},"    label_opts",[39,148652,50],{"class":49},[39,148654,148655],{"class":45},"opts.LabelOpts(",[39,148657,148658],{"class":254},"is_show",[39,148660,50],{"class":49},[39,148662,32531],{"class":56},[39,148664,39102],{"class":45},[39,148666,148667],{"class":41,"line":118},[39,148668,209],{"class":45},[19,148670,148671],{},"常用参数：",[1171,148673,148674,148680,148686,148692,148698],{},[1174,148675,148676,148679],{},[36,148677,148678],{},"series_name","：系列名称。",[1174,148681,148682,148685],{},[36,148683,148684],{},"y_axis","：y 轴数据。",[1174,148687,148688,148691],{},[36,148689,148690],{},"is_smooth","：是否平滑曲线。",[1174,148693,148694,148697],{},[36,148695,148696],{},"label_opts","：标签配置。",[1174,148699,148700,148703],{},[36,148701,148702],{},"symbol_size","：标记点大小。",[14,148705,148707],{"id":148706},"_107-多条折线","10.7 多条折线",[29,148709,148711],{"className":31,"code":148710,"language":33,"meta":34,"style":34},"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",[36,148712,148713,148727,148737,148741,148770,148774,148782,148787,148825,148862,148866,148883,148899,148903],{"__ignoreMap":34},[39,148714,148715,148717,148719,148721,148723,148725],{"class":41,"line":42},[39,148716,31792],{"class":49},[39,148718,148324],{"class":45},[39,148720,31447],{"class":49},[39,148722,148329],{"class":45},[39,148724,32438],{"class":49},[39,148726,148334],{"class":45},[39,148728,148729,148731,148733,148735],{"class":41,"line":74},[39,148730,31792],{"class":49},[39,148732,148183],{"class":45},[39,148734,31447],{"class":49},[39,148736,148188],{"class":45},[39,148738,148739],{"class":41,"line":99},[39,148740,3458],{"emptyLinePlaceholder":1145},[39,148742,148743,148746,148748,148750,148752,148754,148756,148758,148760,148762,148764,148766,148768],{"class":41,"line":106},[39,148744,148745],{"class":45},"dates ",[39,148747,50],{"class":49},[39,148749,53280],{"class":45},[39,148751,148210],{"class":1319},[39,148753,13491],{"class":45},[39,148755,148215],{"class":1319},[39,148757,13491],{"class":45},[39,148759,148220],{"class":1319},[39,148761,13491],{"class":45},[39,148763,148225],{"class":1319},[39,148765,13491],{"class":45},[39,148767,148230],{"class":1319},[39,148769,34301],{"class":45},[39,148771,148772],{"class":41,"line":112},[39,148773,3458],{"emptyLinePlaceholder":1145},[39,148775,148776,148778,148780],{"class":41,"line":118},[39,148777,148197],{"class":45},[39,148779,50],{"class":49},[39,148781,148202],{"class":45},[39,148783,148784],{"class":41,"line":413},[39,148785,148786],{"class":45},"line.add_xaxis(dates)\n",[39,148788,148789,148791,148794,148796,148798,148800,148803,148805,148807,148809,148811,148813,148815,148817,148819,148821,148823],{"class":41,"line":419},[39,148790,148237],{"class":45},[39,148792,148793],{"class":1319},"\"线上销售\"",[39,148795,78572],{"class":45},[39,148797,1519],{"class":56},[39,148799,13491],{"class":45},[39,148801,148802],{"class":56},"130",[39,148804,13491],{"class":45},[39,148806,2015],{"class":56},[39,148808,13491],{"class":45},[39,148810,22104],{"class":56},[39,148812,13491],{"class":45},[39,148814,2780],{"class":56},[39,148816,113147],{"class":45},[39,148818,148690],{"class":254},[39,148820,50],{"class":49},[39,148822,32531],{"class":56},[39,148824,209],{"class":45},[39,148826,148827,148829,148832,148834,148836,148838,148840,148842,148844,148846,148848,148850,148852,148854,148856,148858,148860],{"class":41,"line":425},[39,148828,148237],{"class":45},[39,148830,148831],{"class":1319},"\"线下销售\"",[39,148833,78572],{"class":45},[39,148835,1812],{"class":56},[39,148837,13491],{"class":45},[39,148839,2060],{"class":56},[39,148841,13491],{"class":45},[39,148843,1519],{"class":56},[39,148845,13491],{"class":45},[39,148847,2015],{"class":56},[39,148849,13491],{"class":45},[39,148851,148257],{"class":56},[39,148853,113147],{"class":45},[39,148855,148690],{"class":254},[39,148857,50],{"class":49},[39,148859,32531],{"class":56},[39,148861,209],{"class":45},[39,148863,148864],{"class":41,"line":443},[39,148865,148413],{"class":45},[39,148867,148868,148870,148872,148874,148876,148878,148881],{"class":41,"line":449},[39,148869,148418],{"class":254},[39,148871,50],{"class":49},[39,148873,148423],{"class":45},[39,148875,52461],{"class":254},[39,148877,50],{"class":49},[39,148879,148880],{"class":1319},"\"线上线下销售趋势\"",[39,148882,39102],{"class":45},[39,148884,148885,148887,148889,148891,148893,148895,148897],{"class":41,"line":455},[39,148886,148474],{"class":254},[39,148888,50],{"class":49},[39,148890,148479],{"class":45},[39,148892,148482],{"class":254},[39,148894,50],{"class":49},[39,148896,148487],{"class":1319},[39,148898,39102],{"class":45},[39,148900,148901],{"class":41,"line":461},[39,148902,209],{"class":45},[39,148904,148905,148907,148910],{"class":41,"line":475},[39,148906,148269],{"class":45},[39,148908,148909],{"class":1319},"\"sales.html\"",[39,148911,209],{"class":45},[19,148913,148914],{},"多条折线适合比较不同指标或不同地区。",[14,148916,148918],{"id":148917},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148920,148921,148922,25675],{},"假设 ",[36,148923,148924],{},"sales.json",[29,148926,148928],{"className":147990,"code":148927,"language":146737,"meta":34,"style":34},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[36,148929,148930,148935,148967,148995,149023],{"__ignoreMap":34},[39,148931,148932],{"class":41,"line":42},[39,148933,148934],{"class":45},"[\n",[39,148936,148937,148940,148943,148945,148947,148949,148952,148954,148956,148958,148961,148963,148965],{"class":41,"line":74},[39,148938,148939],{"class":45},"  {",[39,148941,148942],{"class":56},"\"date\"",[39,148944,52491],{"class":45},[39,148946,148210],{"class":1319},[39,148948,13491],{"class":45},[39,148950,148951],{"class":56},"\"online\"",[39,148953,52491],{"class":45},[39,148955,1519],{"class":56},[39,148957,13491],{"class":45},[39,148959,148960],{"class":56},"\"offline\"",[39,148962,52491],{"class":45},[39,148964,1812],{"class":56},[39,148966,5987],{"class":45},[39,148968,148969,148971,148973,148975,148977,148979,148981,148983,148985,148987,148989,148991,148993],{"class":41,"line":99},[39,148970,148939],{"class":45},[39,148972,148942],{"class":56},[39,148974,52491],{"class":45},[39,148976,148215],{"class":1319},[39,148978,13491],{"class":45},[39,148980,148951],{"class":56},[39,148982,52491],{"class":45},[39,148984,148802],{"class":56},[39,148986,13491],{"class":45},[39,148988,148960],{"class":56},[39,148990,52491],{"class":45},[39,148992,2060],{"class":56},[39,148994,5987],{"class":45},[39,148996,148997,148999,149001,149003,149005,149007,149009,149011,149013,149015,149017,149019,149021],{"class":41,"line":106},[39,148998,148939],{"class":45},[39,149000,148942],{"class":56},[39,149002,52491],{"class":45},[39,149004,148220],{"class":1319},[39,149006,13491],{"class":45},[39,149008,148951],{"class":56},[39,149010,52491],{"class":45},[39,149012,2015],{"class":56},[39,149014,13491],{"class":45},[39,149016,148960],{"class":56},[39,149018,52491],{"class":45},[39,149020,1519],{"class":56},[39,149022,2630],{"class":45},[39,149024,149025],{"class":41,"line":112},[39,149026,34301],{"class":45},[19,149028,149029],{},"读取并绘图：",[29,149031,149033],{"className":31,"code":149032,"language":33,"meta":34,"style":34},"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",[36,149034,149035,149041,149055,149065,149069,149101,149114,149118,149126,149135,149144,149148,149160,149169,149178,149187,149191,149199,149203,149220,149237,149241,149258,149274,149278],{"__ignoreMap":34},[39,149036,149037,149039],{"class":41,"line":42},[39,149038,31447],{"class":49},[39,149040,148036],{"class":45},[39,149042,149043,149045,149047,149049,149051,149053],{"class":41,"line":74},[39,149044,31792],{"class":49},[39,149046,148324],{"class":45},[39,149048,31447],{"class":49},[39,149050,148329],{"class":45},[39,149052,32438],{"class":49},[39,149054,148334],{"class":45},[39,149056,149057,149059,149061,149063],{"class":41,"line":99},[39,149058,31792],{"class":49},[39,149060,148183],{"class":45},[39,149062,31447],{"class":49},[39,149064,148188],{"class":45},[39,149066,149067],{"class":41,"line":106},[39,149068,3458],{"emptyLinePlaceholder":1145},[39,149070,149071,149073,149075,149077,149080,149082,149084,149086,149088,149090,149092,149094,149096,149099],{"class":41,"line":112},[39,149072,108778],{"class":49},[39,149074,147736],{"class":56},[39,149076,1221],{"class":45},[39,149078,149079],{"class":1319},"\"sales.json\"",[39,149081,13491],{"class":45},[39,149083,147746],{"class":1319},[39,149085,13491],{"class":45},[39,149087,147751],{"class":254},[39,149089,50],{"class":49},[39,149091,147756],{"class":1319},[39,149093,14770],{"class":45},[39,149095,32438],{"class":49},[39,149097,149098],{"class":254}," file",[39,149100,4797],{"class":45},[39,149102,149103,149105,149107,149110,149112],{"class":41,"line":118},[39,149104,102366],{"class":45},[39,149106,50],{"class":49},[39,149108,149109],{"class":45}," json.load(",[39,149111,46409],{"class":254},[39,149113,209],{"class":45},[39,149115,149116],{"class":41,"line":413},[39,149117,3458],{"emptyLinePlaceholder":1145},[39,149119,149120,149122,149124],{"class":41,"line":419},[39,149121,148745],{"class":45},[39,149123,50],{"class":49},[39,149125,52892],{"class":45},[39,149127,149128,149131,149133],{"class":41,"line":425},[39,149129,149130],{"class":45},"online_sales ",[39,149132,50],{"class":49},[39,149134,52892],{"class":45},[39,149136,149137,149140,149142],{"class":41,"line":443},[39,149138,149139],{"class":45},"offline_sales ",[39,149141,50],{"class":49},[39,149143,52892],{"class":45},[39,149145,149146],{"class":41,"line":449},[39,149147,3458],{"emptyLinePlaceholder":1145},[39,149149,149150,149152,149155,149157],{"class":41,"line":455},[39,149151,4083],{"class":49},[39,149153,149154],{"class":45}," item ",[39,149156,27100],{"class":49},[39,149158,149159],{"class":45}," data:\n",[39,149161,149162,149165,149167],{"class":41,"line":461},[39,149163,149164],{"class":45},"    dates.append(item[",[39,149166,148942],{"class":1319},[39,149168,71],{"class":45},[39,149170,149171,149174,149176],{"class":41,"line":475},[39,149172,149173],{"class":45},"    online_sales.append(item[",[39,149175,148951],{"class":1319},[39,149177,71],{"class":45},[39,149179,149180,149183,149185],{"class":41,"line":665},[39,149181,149182],{"class":45},"    offline_sales.append(item[",[39,149184,148960],{"class":1319},[39,149186,71],{"class":45},[39,149188,149189],{"class":41,"line":671},[39,149190,3458],{"emptyLinePlaceholder":1145},[39,149192,149193,149195,149197],{"class":41,"line":684},[39,149194,148197],{"class":45},[39,149196,50],{"class":49},[39,149198,148202],{"class":45},[39,149200,149201],{"class":41,"line":2732},[39,149202,148786],{"class":45},[39,149204,149205,149207,149209,149212,149214,149216,149218],{"class":41,"line":2737},[39,149206,148237],{"class":45},[39,149208,148793],{"class":1319},[39,149210,149211],{"class":45},", online_sales, ",[39,149213,148690],{"class":254},[39,149215,50],{"class":49},[39,149217,32531],{"class":56},[39,149219,209],{"class":45},[39,149221,149222,149224,149226,149229,149231,149233,149235],{"class":41,"line":2751},[39,149223,148237],{"class":45},[39,149225,148831],{"class":1319},[39,149227,149228],{"class":45},", offline_sales, ",[39,149230,148690],{"class":254},[39,149232,50],{"class":49},[39,149234,32531],{"class":56},[39,149236,209],{"class":45},[39,149238,149239],{"class":41,"line":2756},[39,149240,148413],{"class":45},[39,149242,149243,149245,149247,149249,149251,149253,149256],{"class":41,"line":2785},[39,149244,148418],{"class":254},[39,149246,50],{"class":49},[39,149248,148423],{"class":45},[39,149250,52461],{"class":254},[39,149252,50],{"class":49},[39,149254,149255],{"class":1319},"\"销售趋势\"",[39,149257,39102],{"class":45},[39,149259,149260,149262,149264,149266,149268,149270,149272],{"class":41,"line":2790},[39,149261,148474],{"class":254},[39,149263,50],{"class":49},[39,149265,148479],{"class":45},[39,149267,148482],{"class":254},[39,149269,50],{"class":49},[39,149271,148487],{"class":1319},[39,149273,39102],{"class":45},[39,149275,149276],{"class":41,"line":2807},[39,149277,209],{"class":45},[39,149279,149280,149282,149284],{"class":41,"line":2812},[39,149281,148269],{"class":45},[39,149283,148909],{"class":1319},[39,149285,209],{"class":45},[14,149287,149289],{"id":149288},"_109-数据清洗","10.9 数据清洗",[19,149291,149292],{},"真实数据经常不整齐，需要清洗。",[19,149294,149295],{},"常见问题：",[1171,149297,149298,149301,149304,149307],{},[1174,149299,149300],{},"数字是字符串。",[1174,149302,149303],{},"字段缺失。",[1174,149305,149306],{},"空值。",[1174,149308,149309],{},"日期格式不统一。",[19,149311,16191],{},[29,149313,149315],{"className":31,"code":149314,"language":33,"meta":34,"style":34},"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",[36,149316,149317,149326,149349,149369,149390,149394,149398,149406,149415,149419,149430,149444,149453,149458,149462,149470,149480,149484,149491],{"__ignoreMap":34},[39,149318,149319,149322,149324],{"class":41,"line":42},[39,149320,149321],{"class":45},"raw_data ",[39,149323,50],{"class":49},[39,149325,56501],{"class":45},[39,149327,149328,149331,149333,149335,149337,149339,149342,149344,149347],{"class":41,"line":74},[39,149329,149330],{"class":45},"    {",[39,149332,148942],{"class":1319},[39,149334,52491],{"class":45},[39,149336,148210],{"class":1319},[39,149338,13491],{"class":45},[39,149340,149341],{"class":1319},"\"sales\"",[39,149343,52491],{"class":45},[39,149345,149346],{"class":1319},"\"100\"",[39,149348,5987],{"class":45},[39,149350,149351,149353,149355,149357,149359,149361,149363,149365,149367],{"class":41,"line":99},[39,149352,149330],{"class":45},[39,149354,148942],{"class":1319},[39,149356,52491],{"class":45},[39,149358,148215],{"class":1319},[39,149360,13491],{"class":45},[39,149362,149341],{"class":1319},[39,149364,52491],{"class":45},[39,149366,8708],{"class":1319},[39,149368,5987],{"class":45},[39,149370,149371,149373,149375,149377,149379,149381,149383,149385,149388],{"class":41,"line":106},[39,149372,149330],{"class":45},[39,149374,148942],{"class":1319},[39,149376,52491],{"class":45},[39,149378,148220],{"class":1319},[39,149380,13491],{"class":45},[39,149382,149341],{"class":1319},[39,149384,52491],{"class":45},[39,149386,149387],{"class":1319},"\"120\"",[39,149389,5987],{"class":45},[39,149391,149392],{"class":41,"line":112},[39,149393,34301],{"class":45},[39,149395,149396],{"class":41,"line":118},[39,149397,3458],{"emptyLinePlaceholder":1145},[39,149399,149400,149402,149404],{"class":41,"line":413},[39,149401,148745],{"class":45},[39,149403,50],{"class":49},[39,149405,52892],{"class":45},[39,149407,149408,149411,149413],{"class":41,"line":419},[39,149409,149410],{"class":45},"sales ",[39,149412,50],{"class":49},[39,149414,52892],{"class":45},[39,149416,149417],{"class":41,"line":425},[39,149418,3458],{"emptyLinePlaceholder":1145},[39,149420,149421,149423,149425,149427],{"class":41,"line":443},[39,149422,4083],{"class":49},[39,149424,149154],{"class":45},[39,149426,27100],{"class":49},[39,149428,149429],{"class":45}," raw_data:\n",[39,149431,149432,149435,149437,149440,149442],{"class":41,"line":449},[39,149433,149434],{"class":45},"    value ",[39,149436,50],{"class":49},[39,149438,149439],{"class":45}," item.get(",[39,149441,149341],{"class":1319},[39,149443,209],{"class":45},[39,149445,149446,149448,149450],{"class":41,"line":455},[39,149447,4159],{"class":49},[39,149449,39985],{"class":49},[39,149451,149452],{"class":45}," value:\n",[39,149454,149455],{"class":41,"line":461},[39,149456,149457],{"class":49},"        continue\n",[39,149459,149460],{"class":41,"line":475},[39,149461,3458],{"emptyLinePlaceholder":1145},[39,149463,149464,149466,149468],{"class":41,"line":665},[39,149465,149164],{"class":45},[39,149467,148942],{"class":1319},[39,149469,71],{"class":45},[39,149471,149472,149475,149477],{"class":41,"line":671},[39,149473,149474],{"class":45},"    sales.append(",[39,149476,1224],{"class":56},[39,149478,149479],{"class":45},"(value))\n",[39,149481,149482],{"class":41,"line":684},[39,149483,3458],{"emptyLinePlaceholder":1145},[39,149485,149486,149488],{"class":41,"line":2732},[39,149487,31470],{"class":56},[39,149489,149490],{"class":45},"(dates)\n",[39,149492,149493,149495],{"class":41,"line":2737},[39,149494,31470],{"class":56},[39,149496,149497],{"class":45},"(sales)\n",[14,149499,149501],{"id":149500},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[29,149503,149505],{"className":31,"code":149504,"language":33,"meta":34,"style":34},"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",[36,149506,149507,149521,149531,149535,149543,149564,149586,149608,149630,149652,149656,149660,149682,149703,149707,149715,149719,149723,149733,149742,149752,149768,149772,149776,149793,149809,149825,149841,149851,149855],{"__ignoreMap":34},[39,149508,149509,149511,149513,149515,149517,149519],{"class":41,"line":42},[39,149510,31792],{"class":49},[39,149512,148324],{"class":45},[39,149514,31447],{"class":49},[39,149516,148329],{"class":45},[39,149518,32438],{"class":49},[39,149520,148334],{"class":45},[39,149522,149523,149525,149527,149529],{"class":41,"line":74},[39,149524,31792],{"class":49},[39,149526,148183],{"class":45},[39,149528,31447],{"class":49},[39,149530,148188],{"class":45},[39,149532,149533],{"class":41,"line":99},[39,149534,3458],{"emptyLinePlaceholder":1145},[39,149536,149537,149539,149541],{"class":41,"line":106},[39,149538,149410],{"class":45},[39,149540,50],{"class":49},[39,149542,56501],{"class":45},[39,149544,149545,149547,149549,149551,149554,149556,149558,149560,149562],{"class":41,"line":112},[39,149546,149330],{"class":45},[39,149548,148942],{"class":1319},[39,149550,52491],{"class":45},[39,149552,149553],{"class":1319},"\"2024-10-01\"",[39,149555,13491],{"class":45},[39,149557,85138],{"class":1319},[39,149559,52491],{"class":45},[39,149561,93077],{"class":56},[39,149563,5987],{"class":45},[39,149565,149566,149568,149570,149572,149575,149577,149579,149581,149584],{"class":41,"line":118},[39,149567,149330],{"class":45},[39,149569,148942],{"class":1319},[39,149571,52491],{"class":45},[39,149573,149574],{"class":1319},"\"2024-10-02\"",[39,149576,13491],{"class":45},[39,149578,85138],{"class":1319},[39,149580,52491],{"class":45},[39,149582,149583],{"class":56},"1800",[39,149585,5987],{"class":45},[39,149587,149588,149590,149592,149594,149597,149599,149601,149603,149606],{"class":41,"line":413},[39,149589,149330],{"class":45},[39,149591,148942],{"class":1319},[39,149593,52491],{"class":45},[39,149595,149596],{"class":1319},"\"2024-10-03\"",[39,149598,13491],{"class":45},[39,149600,85138],{"class":1319},[39,149602,52491],{"class":45},[39,149604,149605],{"class":56},"1500",[39,149607,5987],{"class":45},[39,149609,149610,149612,149614,149616,149619,149621,149623,149625,149628],{"class":41,"line":419},[39,149611,149330],{"class":45},[39,149613,148942],{"class":1319},[39,149615,52491],{"class":45},[39,149617,149618],{"class":1319},"\"2024-10-04\"",[39,149620,13491],{"class":45},[39,149622,85138],{"class":1319},[39,149624,52491],{"class":45},[39,149626,149627],{"class":56},"2100",[39,149629,5987],{"class":45},[39,149631,149632,149634,149636,149638,149641,149643,149645,149647,149650],{"class":41,"line":425},[39,149633,149330],{"class":45},[39,149635,148942],{"class":1319},[39,149637,52491],{"class":45},[39,149639,149640],{"class":1319},"\"2024-10-05\"",[39,149642,13491],{"class":45},[39,149644,85138],{"class":1319},[39,149646,52491],{"class":45},[39,149648,149649],{"class":56},"2600",[39,149651,5987],{"class":45},[39,149653,149654],{"class":41,"line":443},[39,149655,34301],{"class":45},[39,149657,149658],{"class":41,"line":449},[39,149659,3458],{"emptyLinePlaceholder":1145},[39,149661,149662,149664,149666,149669,149671,149673,149675,149677,149679],{"class":41,"line":455},[39,149663,148745],{"class":45},[39,149665,50],{"class":49},[39,149667,149668],{"class":45}," [item[",[39,149670,148942],{"class":1319},[39,149672,5501],{"class":45},[39,149674,4083],{"class":49},[39,149676,149154],{"class":45},[39,149678,27100],{"class":49},[39,149680,149681],{"class":45}," sales]\n",[39,149683,149684,149687,149689,149691,149693,149695,149697,149699,149701],{"class":41,"line":461},[39,149685,149686],{"class":45},"amounts ",[39,149688,50],{"class":49},[39,149690,149668],{"class":45},[39,149692,85138],{"class":1319},[39,149694,5501],{"class":45},[39,149696,4083],{"class":49},[39,149698,149154],{"class":45},[39,149700,27100],{"class":49},[39,149702,149681],{"class":45},[39,149704,149705],{"class":41,"line":475},[39,149706,3458],{"emptyLinePlaceholder":1145},[39,149708,149709,149711,149713],{"class":41,"line":665},[39,149710,148197],{"class":45},[39,149712,50],{"class":49},[39,149714,148202],{"class":45},[39,149716,149717],{"class":41,"line":671},[39,149718,148786],{"class":45},[39,149720,149721],{"class":41,"line":684},[39,149722,148594],{"class":45},[39,149724,149725,149727,149729,149731],{"class":41,"line":2732},[39,149726,148599],{"class":254},[39,149728,50],{"class":49},[39,149730,148240],{"class":1319},[39,149732,32521],{"class":45},[39,149734,149735,149737,149739],{"class":41,"line":2737},[39,149736,148610],{"class":254},[39,149738,50],{"class":49},[39,149740,149741],{"class":45},"amounts,\n",[39,149743,149744,149746,149748,149750],{"class":41,"line":2751},[39,149745,148639],{"class":254},[39,149747,50],{"class":49},[39,149749,32531],{"class":56},[39,149751,32521],{"class":45},[39,149753,149754,149756,149758,149760,149762,149764,149766],{"class":41,"line":2756},[39,149755,148650],{"class":254},[39,149757,50],{"class":49},[39,149759,148655],{"class":45},[39,149761,148658],{"class":254},[39,149763,50],{"class":49},[39,149765,32531],{"class":56},[39,149767,39102],{"class":45},[39,149769,149770],{"class":41,"line":2785},[39,149771,209],{"class":45},[39,149773,149774],{"class":41,"line":2790},[39,149775,148413],{"class":45},[39,149777,149778,149780,149782,149784,149786,149788,149791],{"class":41,"line":2807},[39,149779,148418],{"class":254},[39,149781,50],{"class":49},[39,149783,148423],{"class":45},[39,149785,52461],{"class":254},[39,149787,50],{"class":49},[39,149789,149790],{"class":1319},"\"每日销售额\"",[39,149792,39102],{"class":45},[39,149794,149795,149797,149799,149801,149803,149805,149807],{"class":41,"line":2812},[39,149796,148437],{"class":254},[39,149798,50],{"class":49},[39,149800,148442],{"class":45},[39,149802,80864],{"class":254},[39,149804,50],{"class":49},[39,149806,148449],{"class":1319},[39,149808,39102],{"class":45},[39,149810,149811,149813,149815,149817,149819,149821,149823],{"class":41,"line":2817},[39,149812,148456],{"class":254},[39,149814,50],{"class":49},[39,149816,148442],{"class":45},[39,149818,80864],{"class":254},[39,149820,50],{"class":49},[39,149822,148467],{"class":1319},[39,149824,39102],{"class":45},[39,149826,149827,149829,149831,149833,149835,149837,149839],{"class":41,"line":2822},[39,149828,148474],{"class":254},[39,149830,50],{"class":49},[39,149832,148479],{"class":45},[39,149834,148482],{"class":254},[39,149836,50],{"class":49},[39,149838,148487],{"class":1319},[39,149840,39102],{"class":45},[39,149842,149843,149846,149848],{"class":41,"line":2836},[39,149844,149845],{"class":254},"    datazoom_opts",[39,149847,50],{"class":49},[39,149849,149850],{"class":45},"[opts.DataZoomOpts()],\n",[39,149852,149853],{"class":41,"line":2841},[39,149854,209],{"class":45},[39,149856,149857,149859,149862],{"class":41,"line":3635},[39,149858,148269],{"class":45},[39,149860,149861],{"class":1319},"\"daily_sales.html\"",[39,149863,209],{"class":45},[19,149865,149866,149869],{},[36,149867,149868],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149871,149873],{"id":149872},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149875,149876],{},"如果数据结构如下：",[29,149878,149880],{"className":31,"code":149879,"language":33,"meta":34,"style":34},"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",[36,149881,149882,149890,149898,149920,149941,149946,149953,149973,149993,149997],{"__ignoreMap":34},[39,149883,149884,149886,149888],{"class":41,"line":42},[39,149885,102603],{"class":45},[39,149887,50],{"class":49},[39,149889,16628],{"class":45},[39,149891,149892,149895],{"class":41,"line":74},[39,149893,149894],{"class":1319},"    \"北京\"",[39,149896,149897],{"class":45},": [\n",[39,149899,149900,149902,149904,149906,149909,149911,149914,149916,149918],{"class":41,"line":99},[39,149901,5974],{"class":45},[39,149903,148942],{"class":1319},[39,149905,52491],{"class":45},[39,149907,149908],{"class":1319},"\"2024-01-01\"",[39,149910,13491],{"class":45},[39,149912,149913],{"class":1319},"\"confirm\"",[39,149915,52491],{"class":45},[39,149917,146],{"class":56},[39,149919,5987],{"class":45},[39,149921,149922,149924,149926,149928,149931,149933,149935,149937,149939],{"class":41,"line":106},[39,149923,5974],{"class":45},[39,149925,148942],{"class":1319},[39,149927,52491],{"class":45},[39,149929,149930],{"class":1319},"\"2024-01-02\"",[39,149932,13491],{"class":45},[39,149934,149913],{"class":1319},[39,149936,52491],{"class":45},[39,149938,1699],{"class":56},[39,149940,5987],{"class":45},[39,149942,149943],{"class":41,"line":112},[39,149944,149945],{"class":45},"    ],\n",[39,149947,149948,149951],{"class":41,"line":118},[39,149949,149950],{"class":1319},"    \"上海\"",[39,149952,149897],{"class":45},[39,149954,149955,149957,149959,149961,149963,149965,149967,149969,149971],{"class":41,"line":413},[39,149956,5974],{"class":45},[39,149958,148942],{"class":1319},[39,149960,52491],{"class":45},[39,149962,149908],{"class":1319},[39,149964,13491],{"class":45},[39,149966,149913],{"class":1319},[39,149968,52491],{"class":45},[39,149970,1598],{"class":56},[39,149972,5987],{"class":45},[39,149974,149975,149977,149979,149981,149983,149985,149987,149989,149991],{"class":41,"line":419},[39,149976,5974],{"class":45},[39,149978,148942],{"class":1319},[39,149980,52491],{"class":45},[39,149982,149930],{"class":1319},[39,149984,13491],{"class":45},[39,149986,149913],{"class":1319},[39,149988,52491],{"class":45},[39,149990,156],{"class":56},[39,149992,5987],{"class":45},[39,149994,149995],{"class":41,"line":425},[39,149996,149945],{"class":45},[39,149998,149999],{"class":41,"line":443},[39,150000,2630],{"class":45},[19,150002,150003],{},"绘制多地区趋势：",[29,150005,150007],{"className":31,"code":150006,"language":33,"meta":34,"style":34},"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",[36,150008,150009,150023,150033,150037,150062,150066,150074,150078,150082,150094,150116,150129,150133,150137,150154,150170,150174],{"__ignoreMap":34},[39,150010,150011,150013,150015,150017,150019,150021],{"class":41,"line":42},[39,150012,31792],{"class":49},[39,150014,148324],{"class":45},[39,150016,31447],{"class":49},[39,150018,148329],{"class":45},[39,150020,32438],{"class":49},[39,150022,148334],{"class":45},[39,150024,150025,150027,150029,150031],{"class":41,"line":74},[39,150026,31792],{"class":49},[39,150028,148183],{"class":45},[39,150030,31447],{"class":49},[39,150032,148188],{"class":45},[39,150034,150035],{"class":41,"line":99},[39,150036,3458],{"emptyLinePlaceholder":1145},[39,150038,150039,150041,150043,150045,150047,150049,150051,150053,150055,150058,150060],{"class":41,"line":106},[39,150040,148745],{"class":45},[39,150042,50],{"class":49},[39,150044,149668],{"class":45},[39,150046,148942],{"class":1319},[39,150048,5501],{"class":45},[39,150050,4083],{"class":49},[39,150052,149154],{"class":45},[39,150054,27100],{"class":49},[39,150056,150057],{"class":45}," data[",[39,150059,70323],{"class":1319},[39,150061,78581],{"class":45},[39,150063,150064],{"class":41,"line":112},[39,150065,3458],{"emptyLinePlaceholder":1145},[39,150067,150068,150070,150072],{"class":41,"line":118},[39,150069,148197],{"class":45},[39,150071,50],{"class":49},[39,150073,148202],{"class":45},[39,150075,150076],{"class":41,"line":413},[39,150077,148786],{"class":45},[39,150079,150080],{"class":41,"line":419},[39,150081,3458],{"emptyLinePlaceholder":1145},[39,150083,150084,150086,150089,150091],{"class":41,"line":425},[39,150085,4083],{"class":49},[39,150087,150088],{"class":45}," city, records ",[39,150090,27100],{"class":49},[39,150092,150093],{"class":45}," data.items():\n",[39,150095,150096,150099,150101,150103,150105,150107,150109,150111,150113],{"class":41,"line":443},[39,150097,150098],{"class":45},"    values ",[39,150100,50],{"class":49},[39,150102,149668],{"class":45},[39,150104,149913],{"class":1319},[39,150106,5501],{"class":45},[39,150108,4083],{"class":49},[39,150110,149154],{"class":45},[39,150112,27100],{"class":49},[39,150114,150115],{"class":45}," records]\n",[39,150117,150118,150121,150123,150125,150127],{"class":41,"line":449},[39,150119,150120],{"class":45},"    line.add_yaxis(city, values, ",[39,150122,148690],{"class":254},[39,150124,50],{"class":49},[39,150126,32531],{"class":56},[39,150128,209],{"class":45},[39,150130,150131],{"class":41,"line":455},[39,150132,3458],{"emptyLinePlaceholder":1145},[39,150134,150135],{"class":41,"line":461},[39,150136,148413],{"class":45},[39,150138,150139,150141,150143,150145,150147,150149,150152],{"class":41,"line":475},[39,150140,148418],{"class":254},[39,150142,50],{"class":49},[39,150144,148423],{"class":45},[39,150146,52461],{"class":254},[39,150148,50],{"class":49},[39,150150,150151],{"class":1319},"\"多地区趋势图\"",[39,150153,39102],{"class":45},[39,150155,150156,150158,150160,150162,150164,150166,150168],{"class":41,"line":665},[39,150157,148474],{"class":254},[39,150159,50],{"class":49},[39,150161,148479],{"class":45},[39,150163,148482],{"class":254},[39,150165,50],{"class":49},[39,150167,148487],{"class":1319},[39,150169,39102],{"class":45},[39,150171,150172],{"class":41,"line":671},[39,150173,209],{"class":45},[39,150175,150176,150178,150181],{"class":41,"line":684},[39,150177,148269],{"class":45},[39,150179,150180],{"class":1319},"\"trend.html\"",[39,150182,209],{"class":45},[19,150184,150185],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150187,150189],{"id":150188},"_1012-易错点","10.12 易错点",[1171,150191,150192,150198,150204,150214,150220],{},[1174,150193,150194,150197],{},[36,150195,150196],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[1174,150199,150200,150203],{},[36,150201,150202],{},"render()"," 生成的是 HTML，不是图片。",[1174,150205,150206,150207,150210,150211,29442],{},"JSON 字符串用 ",[36,150208,150209],{},"json.loads()","，JSON 文件用 ",[36,150212,150213],{},"json.load()",[1174,150215,150216,150217,29442],{},"中文 JSON 保存时加 ",[36,150218,150219],{},"ensure_ascii=False",[1174,150221,150222],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150224,150226],{"id":150225},"_1013-本章练习","10.13 本章练习",[1171,150228,150229,150232,150235,150238,150241],{},[1174,150230,150231],{},"安装 pyecharts 并生成第一个折线图。",[1174,150233,150234],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[1174,150236,150237],{},"绘制两条折线，对比线上和线下销售额。",[1174,150239,150240],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[1174,150242,150243],{},"对含有空值的销售数据进行清洗后再绘图。",[1133,150245,150246],{},"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":34,"searchDepth":74,"depth":74,"links":150248},[150249,150250,150251,150252,150253,150254,150255,150256,150257,150258,150259,150260,150261],{"id":147865,"depth":74,"text":147866},{"id":147940,"depth":74,"text":147941},{"id":148119,"depth":74,"text":148120},{"id":148170,"depth":74,"text":148171},{"id":148304,"depth":74,"text":148305},{"id":148580,"depth":74,"text":148581},{"id":148706,"depth":74,"text":148707},{"id":148917,"depth":74,"text":148918},{"id":149288,"depth":74,"text":149289},{"id":149500,"depth":74,"text":149501},{"id":149872,"depth":74,"text":149873},{"id":150188,"depth":74,"text":150189},{"id":150225,"depth":74,"text":150226},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147857,"description":1142},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150268,"title":150269,"body":150270,"description":1142,"extension":1143,"meta":152630,"navigation":1145,"path":152631,"seo":152632,"stem":152633,"__hash__":152634},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150271,"toc":152607},[150272,150275,150279,150282,150285,150361,150364,150455,150458,150462,150465,150509,150522,150526,150529,150596,150599,150603,150606,150690,150698,150702,150707,150848,150851,150862,150868,150874,150988,150992,150995,150998,151251,151254,151258,151261,151365,151368,151372,151523,151527,151534,151647,151651,151654,151760,151763,151767,151770,151801,151804,151909,151912,151916,151920,151930,151998,152002,152009,152073,152076,152080,152086,152182,152191,152195,152519,152528,152532,152560,152564,152604],[10,150273,150269],{"id":150274},"_11-面向对象基础",[14,150276,150278],{"id":150277},"_111-什么是面向对象","11.1 什么是面向对象",[19,150280,150281],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150283,150284],{},"面向过程：",[29,150286,150288],{"className":31,"code":150287,"language":33,"meta":34,"style":34},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[36,150289,150290,150299,150307,150311,150321,150352,150356],{"__ignoreMap":34},[39,150291,150292,150294,150296],{"class":41,"line":42},[39,150293,147481],{"class":45},[39,150295,50],{"class":49},[39,150297,150298],{"class":1319}," \"小明\"\n",[39,150300,150301,150303,150305],{"class":41,"line":74},[39,150302,147491],{"class":45},[39,150304,50],{"class":49},[39,150306,147496],{"class":56},[39,150308,150309],{"class":41,"line":99},[39,150310,3458],{"emptyLinePlaceholder":1145},[39,150312,150313,150315,150318],{"class":41,"line":106},[39,150314,33002],{"class":49},[39,150316,150317],{"class":3021}," introduce",[39,150319,150320],{"class":45},"(name, age):\n",[39,150322,150323,150325,150327,150329,150332,150334,150336,150338,150341,150343,150345,150347,150350],{"class":41,"line":112},[39,150324,32354],{"class":56},[39,150326,1221],{"class":45},[39,150328,1270],{"class":49},[39,150330,150331],{"class":1319},"\"我叫",[39,150333,2094],{"class":56},[39,150335,80864],{"class":45},[39,150337,2144],{"class":56},[39,150339,150340],{"class":1319},"，今年",[39,150342,2094],{"class":56},[39,150344,71275],{"class":45},[39,150346,2144],{"class":56},[39,150348,150349],{"class":1319},"岁\"",[39,150351,209],{"class":45},[39,150353,150354],{"class":41,"line":118},[39,150355,3458],{"emptyLinePlaceholder":1145},[39,150357,150358],{"class":41,"line":413},[39,150359,150360],{"class":45},"introduce(name, age)\n",[19,150362,150363],{},"面向对象：",[29,150365,150367],{"className":31,"code":150366,"language":33,"meta":34,"style":34},"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",[36,150368,150369,150377,150385,150414,150418,150422,150432,150441,150450],{"__ignoreMap":34},[39,150370,150371,150373,150375],{"class":41,"line":42},[39,150372,15750],{"class":49},[39,150374,8954],{"class":3021},[39,150376,4797],{"class":45},[39,150378,150379,150381,150383],{"class":41,"line":74},[39,150380,31856],{"class":49},[39,150382,150317],{"class":3021},[39,150384,31862],{"class":45},[39,150386,150387,150389,150391,150393,150395,150398,150400,150402,150404,150406,150408,150410,150412],{"class":41,"line":99},[39,150388,33506],{"class":56},[39,150390,1221],{"class":45},[39,150392,1270],{"class":49},[39,150394,150331],{"class":1319},[39,150396,150397],{"class":56},"{self",[39,150399,81355],{"class":45},[39,150401,2144],{"class":56},[39,150403,150340],{"class":1319},[39,150405,150397],{"class":56},[39,150407,81367],{"class":45},[39,150409,2144],{"class":56},[39,150411,150349],{"class":1319},[39,150413,209],{"class":45},[39,150415,150416],{"class":41,"line":106},[39,150417,3458],{"emptyLinePlaceholder":1145},[39,150419,150420],{"class":41,"line":112},[39,150421,3458],{"emptyLinePlaceholder":1145},[39,150423,150424,150427,150429],{"class":41,"line":118},[39,150425,150426],{"class":45},"student ",[39,150428,50],{"class":49},[39,150430,150431],{"class":45}," Student()\n",[39,150433,150434,150437,150439],{"class":41,"line":413},[39,150435,150436],{"class":45},"student.name ",[39,150438,50],{"class":49},[39,150440,150298],{"class":1319},[39,150442,150443,150446,150448],{"class":41,"line":419},[39,150444,150445],{"class":45},"student.age ",[39,150447,50],{"class":49},[39,150449,147496],{"class":56},[39,150451,150452],{"class":41,"line":425},[39,150453,150454],{"class":45},"student.introduce()\n",[19,150456,150457],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150459,150461],{"id":150460},"_112-类和对象","11.2 类和对象",[19,150463,150464],{},"类是模板，对象是根据模板创建出来的具体实例。",[29,150466,150468],{"className":31,"code":150467,"language":33,"meta":34,"style":34},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[36,150469,150470,150478,150483,150487,150491,150500],{"__ignoreMap":34},[39,150471,150472,150474,150476],{"class":41,"line":42},[39,150473,15750],{"class":49},[39,150475,8954],{"class":3021},[39,150477,4797],{"class":45},[39,150479,150480],{"class":41,"line":74},[39,150481,150482],{"class":49},"    pass\n",[39,150484,150485],{"class":41,"line":99},[39,150486,3458],{"emptyLinePlaceholder":1145},[39,150488,150489],{"class":41,"line":106},[39,150490,3458],{"emptyLinePlaceholder":1145},[39,150492,150493,150496,150498],{"class":41,"line":112},[39,150494,150495],{"class":45},"student1 ",[39,150497,50],{"class":49},[39,150499,150431],{"class":45},[39,150501,150502,150505,150507],{"class":41,"line":118},[39,150503,150504],{"class":45},"student2 ",[39,150506,50],{"class":49},[39,150508,150431],{"class":45},[19,150510,150511,150514,150515,101963,150518,150521],{},[36,150512,150513],{},"Student"," 是类，",[36,150516,150517],{},"student1",[36,150519,150520],{},"student2"," 是对象。",[14,150523,150525],{"id":150524},"_113-属性","11.3 属性",[19,150527,150528],{},"属性是对象保存的数据。",[29,150530,150532],{"className":31,"code":150531,"language":33,"meta":34,"style":34},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[36,150533,150534,150542,150546,150550,150554,150562,150570,150578,150582,150589],{"__ignoreMap":34},[39,150535,150536,150538,150540],{"class":41,"line":42},[39,150537,15750],{"class":49},[39,150539,8954],{"class":3021},[39,150541,4797],{"class":45},[39,150543,150544],{"class":41,"line":74},[39,150545,150482],{"class":49},[39,150547,150548],{"class":41,"line":99},[39,150549,3458],{"emptyLinePlaceholder":1145},[39,150551,150552],{"class":41,"line":106},[39,150553,3458],{"emptyLinePlaceholder":1145},[39,150555,150556,150558,150560],{"class":41,"line":112},[39,150557,150426],{"class":45},[39,150559,50],{"class":49},[39,150561,150431],{"class":45},[39,150563,150564,150566,150568],{"class":41,"line":118},[39,150565,150436],{"class":45},[39,150567,50],{"class":49},[39,150569,150298],{"class":1319},[39,150571,150572,150574,150576],{"class":41,"line":413},[39,150573,150445],{"class":45},[39,150575,50],{"class":49},[39,150577,147496],{"class":56},[39,150579,150580],{"class":41,"line":419},[39,150581,3458],{"emptyLinePlaceholder":1145},[39,150583,150584,150586],{"class":41,"line":425},[39,150585,31470],{"class":56},[39,150587,150588],{"class":45},"(student.name)\n",[39,150590,150591,150593],{"class":41,"line":443},[39,150592,31470],{"class":56},[39,150594,150595],{"class":45},"(student.age)\n",[19,150597,150598],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,150600,150602],{"id":150601},"_114-方法","11.4 方法",[19,150604,150605],{},"类中的函数叫方法。",[29,150607,150608],{"className":31,"code":150366,"language":33,"meta":34,"style":34},[36,150609,150610,150618,150626,150654,150658,150662,150670,150678,150686],{"__ignoreMap":34},[39,150611,150612,150614,150616],{"class":41,"line":42},[39,150613,15750],{"class":49},[39,150615,8954],{"class":3021},[39,150617,4797],{"class":45},[39,150619,150620,150622,150624],{"class":41,"line":74},[39,150621,31856],{"class":49},[39,150623,150317],{"class":3021},[39,150625,31862],{"class":45},[39,150627,150628,150630,150632,150634,150636,150638,150640,150642,150644,150646,150648,150650,150652],{"class":41,"line":99},[39,150629,33506],{"class":56},[39,150631,1221],{"class":45},[39,150633,1270],{"class":49},[39,150635,150331],{"class":1319},[39,150637,150397],{"class":56},[39,150639,81355],{"class":45},[39,150641,2144],{"class":56},[39,150643,150340],{"class":1319},[39,150645,150397],{"class":56},[39,150647,81367],{"class":45},[39,150649,2144],{"class":56},[39,150651,150349],{"class":1319},[39,150653,209],{"class":45},[39,150655,150656],{"class":41,"line":106},[39,150657,3458],{"emptyLinePlaceholder":1145},[39,150659,150660],{"class":41,"line":112},[39,150661,3458],{"emptyLinePlaceholder":1145},[39,150663,150664,150666,150668],{"class":41,"line":118},[39,150665,150426],{"class":45},[39,150667,50],{"class":49},[39,150669,150431],{"class":45},[39,150671,150672,150674,150676],{"class":41,"line":413},[39,150673,150436],{"class":45},[39,150675,50],{"class":49},[39,150677,150298],{"class":1319},[39,150679,150680,150682,150684],{"class":41,"line":419},[39,150681,150445],{"class":45},[39,150683,50],{"class":49},[39,150685,147496],{"class":56},[39,150687,150688],{"class":41,"line":425},[39,150689,150454],{"class":45},[19,150691,150692,150694,150695,150697],{},[36,150693,31878],{}," 表示当前对象。调用方法时不需要手动传入 ",[36,150696,31878],{},"，Python 会自动传。",[14,150699,150701],{"id":150700},"_115-构造方法__init__","11.5 构造方法__init__",[19,150703,150704,150706],{},[36,150705,31884],{}," 在对象创建时自动执行，用于初始化属性。",[29,150708,150710],{"className":31,"code":150709,"language":33,"meta":34,"style":34},"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",[36,150711,150712,150720,150729,150741,150753,150764,150768,150776,150814,150818,150822,150844],{"__ignoreMap":34},[39,150713,150714,150716,150718],{"class":41,"line":42},[39,150715,15750],{"class":49},[39,150717,8954],{"class":3021},[39,150719,4797],{"class":45},[39,150721,150722,150724,150726],{"class":41,"line":74},[39,150723,31856],{"class":49},[39,150725,31859],{"class":56},[39,150727,150728],{"class":45},"(self, name, age, score):\n",[39,150730,150731,150733,150736,150738],{"class":41,"line":99},[39,150732,31900],{"class":56},[39,150734,150735],{"class":45},".name ",[39,150737,50],{"class":49},[39,150739,150740],{"class":45}," name\n",[39,150742,150743,150745,150748,150750],{"class":41,"line":106},[39,150744,31900],{"class":56},[39,150746,150747],{"class":45},".age ",[39,150749,50],{"class":49},[39,150751,150752],{"class":45}," age\n",[39,150754,150755,150757,150760,150762],{"class":41,"line":112},[39,150756,31900],{"class":56},[39,150758,150759],{"class":45},".score ",[39,150761,50],{"class":49},[39,150763,2644],{"class":45},[39,150765,150766],{"class":41,"line":118},[39,150767,3458],{"emptyLinePlaceholder":1145},[39,150769,150770,150772,150774],{"class":41,"line":413},[39,150771,31856],{"class":49},[39,150773,150317],{"class":3021},[39,150775,31862],{"class":45},[39,150777,150778,150780,150782,150784,150786,150788,150790,150792,150794,150796,150798,150800,150803,150805,150808,150810,150812],{"class":41,"line":419},[39,150779,33506],{"class":56},[39,150781,1221],{"class":45},[39,150783,1270],{"class":49},[39,150785,150331],{"class":1319},[39,150787,150397],{"class":56},[39,150789,81355],{"class":45},[39,150791,2144],{"class":56},[39,150793,150340],{"class":1319},[39,150795,150397],{"class":56},[39,150797,81367],{"class":45},[39,150799,2144],{"class":56},[39,150801,150802],{"class":1319},"岁，成绩",[39,150804,150397],{"class":56},[39,150806,150807],{"class":45},".score",[39,150809,2144],{"class":56},[39,150811,1462],{"class":1319},[39,150813,209],{"class":45},[39,150815,150816],{"class":41,"line":425},[39,150817,3458],{"emptyLinePlaceholder":1145},[39,150819,150820],{"class":41,"line":443},[39,150821,3458],{"emptyLinePlaceholder":1145},[39,150823,150824,150826,150828,150831,150834,150836,150838,150840,150842],{"class":41,"line":449},[39,150825,150426],{"class":45},[39,150827,50],{"class":49},[39,150829,150830],{"class":45}," Student(",[39,150832,150833],{"class":1319},"\"小明\"",[39,150835,13491],{"class":45},[39,150837,1849],{"class":56},[39,150839,13491],{"class":45},[39,150841,2187],{"class":56},[39,150843,209],{"class":45},[39,150845,150846],{"class":41,"line":455},[39,150847,150454],{"class":45},[19,150849,150850],{},"构造方法的好处：",[1171,150852,150853,150856,150859],{},[1174,150854,150855],{},"创建对象时必须提供必要数据。",[1174,150857,150858],{},"属性初始化集中，不容易漏。",[1174,150860,150861],{},"对象状态更完整。",[14,150863,150865,150866],{"id":150864},"_116-str","11.6 ",[304,150867,2368],{},[19,150869,150870,150871,29442],{},"直接打印对象时，默认输出不直观。可以定义 ",[36,150872,150873],{},"__str__",[29,150875,150877],{"className":31,"code":150876,"language":33,"meta":34,"style":34},"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",[36,150878,150879,150887,150896,150906,150916,150920,150929,150957,150961,150965,150981],{"__ignoreMap":34},[39,150880,150881,150883,150885],{"class":41,"line":42},[39,150882,15750],{"class":49},[39,150884,8954],{"class":3021},[39,150886,4797],{"class":45},[39,150888,150889,150891,150893],{"class":41,"line":74},[39,150890,31856],{"class":49},[39,150892,31859],{"class":56},[39,150894,150895],{"class":45},"(self, name, age):\n",[39,150897,150898,150900,150902,150904],{"class":41,"line":99},[39,150899,31900],{"class":56},[39,150901,150735],{"class":45},[39,150903,50],{"class":49},[39,150905,150740],{"class":45},[39,150907,150908,150910,150912,150914],{"class":41,"line":106},[39,150909,31900],{"class":56},[39,150911,150747],{"class":45},[39,150913,50],{"class":49},[39,150915,150752],{"class":45},[39,150917,150918],{"class":41,"line":112},[39,150919,3458],{"emptyLinePlaceholder":1145},[39,150921,150922,150924,150927],{"class":41,"line":118},[39,150923,31856],{"class":49},[39,150925,150926],{"class":56}," __str__",[39,150928,31862],{"class":45},[39,150930,150931,150933,150936,150939,150941,150943,150945,150948,150950,150952,150954],{"class":41,"line":413},[39,150932,15808],{"class":49},[39,150934,150935],{"class":49}," f",[39,150937,150938],{"class":1319},"\"Student(name=",[39,150940,150397],{"class":56},[39,150942,81355],{"class":45},[39,150944,2144],{"class":56},[39,150946,150947],{"class":1319},", age=",[39,150949,150397],{"class":56},[39,150951,81367],{"class":45},[39,150953,2144],{"class":56},[39,150955,150956],{"class":1319},")\"\n",[39,150958,150959],{"class":41,"line":419},[39,150960,3458],{"emptyLinePlaceholder":1145},[39,150962,150963],{"class":41,"line":425},[39,150964,3458],{"emptyLinePlaceholder":1145},[39,150966,150967,150969,150971,150973,150975,150977,150979],{"class":41,"line":443},[39,150968,150426],{"class":45},[39,150970,50],{"class":49},[39,150972,150830],{"class":45},[39,150974,150833],{"class":1319},[39,150976,13491],{"class":45},[39,150978,1849],{"class":56},[39,150980,209],{"class":45},[39,150982,150983,150985],{"class":41,"line":449},[39,150984,31470],{"class":56},[39,150986,150987],{"class":45},"(student)\n",[14,150989,150991],{"id":150990},"_117-封装","11.7 封装",[19,150993,150994],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150996,150997],{},"Python 中以双下划线开头的属性通常视为私有属性。",[29,150999,151001],{"className":31,"code":151000,"language":33,"meta":34,"style":34},"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",[36,151002,151003,151012,151021,151033,151045,151049,151058,151067,151071,151081,151094,151105,151110,151121,151125,151134,151146,151157,151161,151174,151185,151189,151200,151204,151208,151226,151235,151244],{"__ignoreMap":34},[39,151004,151005,151007,151010],{"class":41,"line":42},[39,151006,15750],{"class":49},[39,151008,151009],{"class":3021}," Account",[39,151011,4797],{"class":45},[39,151013,151014,151016,151018],{"class":41,"line":74},[39,151015,31856],{"class":49},[39,151017,31859],{"class":56},[39,151019,151020],{"class":45},"(self, owner, balance):\n",[39,151022,151023,151025,151028,151030],{"class":41,"line":99},[39,151024,31900],{"class":56},[39,151026,151027],{"class":45},".owner ",[39,151029,50],{"class":49},[39,151031,151032],{"class":45}," owner\n",[39,151034,151035,151037,151040,151042],{"class":41,"line":106},[39,151036,31900],{"class":56},[39,151038,151039],{"class":45},".__balance ",[39,151041,50],{"class":49},[39,151043,151044],{"class":45}," balance\n",[39,151046,151047],{"class":41,"line":112},[39,151048,3458],{"emptyLinePlaceholder":1145},[39,151050,151051,151053,151056],{"class":41,"line":118},[39,151052,31856],{"class":49},[39,151054,151055],{"class":3021}," get_balance",[39,151057,31862],{"class":45},[39,151059,151060,151062,151064],{"class":41,"line":413},[39,151061,15808],{"class":49},[39,151063,39928],{"class":56},[39,151065,151066],{"class":45},".__balance\n",[39,151068,151069],{"class":41,"line":419},[39,151070,3458],{"emptyLinePlaceholder":1145},[39,151072,151073,151075,151078],{"class":41,"line":425},[39,151074,31856],{"class":49},[39,151076,151077],{"class":3021}," deposit",[39,151079,151080],{"class":45},"(self, money):\n",[39,151082,151083,151085,151088,151090,151092],{"class":41,"line":443},[39,151084,3555],{"class":49},[39,151086,151087],{"class":45}," money ",[39,151089,2653],{"class":49},[39,151091,5151],{"class":56},[39,151093,4797],{"class":45},[39,151095,151096,151098,151100,151103],{"class":41,"line":449},[39,151097,35705],{"class":56},[39,151099,1221],{"class":45},[39,151101,151102],{"class":1319},"\"存款金额必须大于0\"",[39,151104,209],{"class":45},[39,151106,151107],{"class":41,"line":455},[39,151108,151109],{"class":49},"            return\n",[39,151111,151112,151114,151116,151118],{"class":41,"line":461},[39,151113,31900],{"class":56},[39,151115,151039],{"class":45},[39,151117,10533],{"class":49},[39,151119,151120],{"class":45}," money\n",[39,151122,151123],{"class":41,"line":475},[39,151124,3458],{"emptyLinePlaceholder":1145},[39,151126,151127,151129,151132],{"class":41,"line":665},[39,151128,31856],{"class":49},[39,151130,151131],{"class":3021}," withdraw",[39,151133,151080],{"class":45},[39,151135,151136,151138,151140,151142,151144],{"class":41,"line":671},[39,151137,3555],{"class":49},[39,151139,151087],{"class":45},[39,151141,2653],{"class":49},[39,151143,5151],{"class":56},[39,151145,4797],{"class":45},[39,151147,151148,151150,151152,151155],{"class":41,"line":684},[39,151149,35705],{"class":56},[39,151151,1221],{"class":45},[39,151153,151154],{"class":1319},"\"取款金额必须大于0\"",[39,151156,209],{"class":45},[39,151158,151159],{"class":41,"line":2732},[39,151160,151109],{"class":49},[39,151162,151163,151165,151167,151169,151171],{"class":41,"line":2737},[39,151164,3555],{"class":49},[39,151166,151087],{"class":45},[39,151168,2158],{"class":49},[39,151170,39928],{"class":56},[39,151172,151173],{"class":45},".__balance:\n",[39,151175,151176,151178,151180,151183],{"class":41,"line":2751},[39,151177,35705],{"class":56},[39,151179,1221],{"class":45},[39,151181,151182],{"class":1319},"\"余额不足\"",[39,151184,209],{"class":45},[39,151186,151187],{"class":41,"line":2756},[39,151188,151109],{"class":49},[39,151190,151191,151193,151195,151198],{"class":41,"line":2785},[39,151192,31900],{"class":56},[39,151194,151039],{"class":45},[39,151196,151197],{"class":49},"-=",[39,151199,151120],{"class":45},[39,151201,151202],{"class":41,"line":2790},[39,151203,3458],{"emptyLinePlaceholder":1145},[39,151205,151206],{"class":41,"line":2807},[39,151207,3458],{"emptyLinePlaceholder":1145},[39,151209,151210,151213,151215,151218,151220,151222,151224],{"class":41,"line":2812},[39,151211,151212],{"class":45},"account ",[39,151214,50],{"class":49},[39,151216,151217],{"class":45}," Account(",[39,151219,150833],{"class":1319},[39,151221,13491],{"class":45},[39,151223,7466],{"class":56},[39,151225,209],{"class":45},[39,151227,151228,151231,151233],{"class":41,"line":2817},[39,151229,151230],{"class":45},"account.deposit(",[39,151232,2780],{"class":56},[39,151234,209],{"class":45},[39,151236,151237,151240,151242],{"class":41,"line":2822},[39,151238,151239],{"class":45},"account.withdraw(",[39,151241,1519],{"class":56},[39,151243,209],{"class":45},[39,151245,151246,151248],{"class":41,"line":2836},[39,151247,31470],{"class":56},[39,151249,151250],{"class":45},"(account.get_balance())\n",[19,151252,151253],{},"封装的意义是避免外部随意修改内部状态。",[14,151255,151257],{"id":151256},"_118-继承","11.8 继承",[19,151259,151260],{},"继承可以让子类复用父类的属性和方法。",[29,151262,151264],{"className":31,"code":151263,"language":33,"meta":34,"style":34},"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",[36,151265,151266,151275,151284,151295,151299,151303,151317,151326,151337,151341,151345,151355,151360],{"__ignoreMap":34},[39,151267,151268,151270,151273],{"class":41,"line":42},[39,151269,15750],{"class":49},[39,151271,151272],{"class":3021}," Animal",[39,151274,4797],{"class":45},[39,151276,151277,151279,151282],{"class":41,"line":74},[39,151278,31856],{"class":49},[39,151280,151281],{"class":3021}," eat",[39,151283,31862],{"class":45},[39,151285,151286,151288,151290,151293],{"class":41,"line":99},[39,151287,33506],{"class":56},[39,151289,1221],{"class":45},[39,151291,151292],{"class":1319},"\"吃东西\"",[39,151294,209],{"class":45},[39,151296,151297],{"class":41,"line":106},[39,151298,3458],{"emptyLinePlaceholder":1145},[39,151300,151301],{"class":41,"line":112},[39,151302,3458],{"emptyLinePlaceholder":1145},[39,151304,151305,151307,151310,151312,151315],{"class":41,"line":118},[39,151306,15750],{"class":49},[39,151308,151309],{"class":3021}," Dog",[39,151311,1221],{"class":45},[39,151313,151314],{"class":3021},"Animal",[39,151316,31841],{"class":45},[39,151318,151319,151321,151324],{"class":41,"line":413},[39,151320,31856],{"class":49},[39,151322,151323],{"class":3021}," bark",[39,151325,31862],{"class":45},[39,151327,151328,151330,151332,151335],{"class":41,"line":419},[39,151329,33506],{"class":56},[39,151331,1221],{"class":45},[39,151333,151334],{"class":1319},"\"汪汪\"",[39,151336,209],{"class":45},[39,151338,151339],{"class":41,"line":425},[39,151340,3458],{"emptyLinePlaceholder":1145},[39,151342,151343],{"class":41,"line":443},[39,151344,3458],{"emptyLinePlaceholder":1145},[39,151346,151347,151350,151352],{"class":41,"line":449},[39,151348,151349],{"class":45},"dog ",[39,151351,50],{"class":49},[39,151353,151354],{"class":45}," Dog()\n",[39,151356,151357],{"class":41,"line":455},[39,151358,151359],{"class":45},"dog.eat()\n",[39,151361,151362],{"class":41,"line":461},[39,151363,151364],{"class":45},"dog.bark()\n",[19,151366,151367],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151369,151371],{"id":151370},"_119-方法重写","11.9 方法重写",[29,151373,151375],{"className":31,"code":151374,"language":33,"meta":34,"style":34},"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",[36,151376,151377,151385,151394,151405,151409,151413,151425,151433,151443,151447,151451,151464,151472,151483,151487,151491,151499,151509,151513,151518],{"__ignoreMap":34},[39,151378,151379,151381,151383],{"class":41,"line":42},[39,151380,15750],{"class":49},[39,151382,151272],{"class":3021},[39,151384,4797],{"class":45},[39,151386,151387,151389,151392],{"class":41,"line":74},[39,151388,31856],{"class":49},[39,151390,151391],{"class":3021}," speak",[39,151393,31862],{"class":45},[39,151395,151396,151398,151400,151403],{"class":41,"line":99},[39,151397,33506],{"class":56},[39,151399,1221],{"class":45},[39,151401,151402],{"class":1319},"\"动物叫\"",[39,151404,209],{"class":45},[39,151406,151407],{"class":41,"line":106},[39,151408,3458],{"emptyLinePlaceholder":1145},[39,151410,151411],{"class":41,"line":112},[39,151412,3458],{"emptyLinePlaceholder":1145},[39,151414,151415,151417,151419,151421,151423],{"class":41,"line":118},[39,151416,15750],{"class":49},[39,151418,151309],{"class":3021},[39,151420,1221],{"class":45},[39,151422,151314],{"class":3021},[39,151424,31841],{"class":45},[39,151426,151427,151429,151431],{"class":41,"line":413},[39,151428,31856],{"class":49},[39,151430,151391],{"class":3021},[39,151432,31862],{"class":45},[39,151434,151435,151437,151439,151441],{"class":41,"line":419},[39,151436,33506],{"class":56},[39,151438,1221],{"class":45},[39,151440,151334],{"class":1319},[39,151442,209],{"class":45},[39,151444,151445],{"class":41,"line":425},[39,151446,3458],{"emptyLinePlaceholder":1145},[39,151448,151449],{"class":41,"line":443},[39,151450,3458],{"emptyLinePlaceholder":1145},[39,151452,151453,151455,151458,151460,151462],{"class":41,"line":449},[39,151454,15750],{"class":49},[39,151456,151457],{"class":3021}," Cat",[39,151459,1221],{"class":45},[39,151461,151314],{"class":3021},[39,151463,31841],{"class":45},[39,151465,151466,151468,151470],{"class":41,"line":455},[39,151467,31856],{"class":49},[39,151469,151391],{"class":3021},[39,151471,31862],{"class":45},[39,151473,151474,151476,151478,151481],{"class":41,"line":461},[39,151475,33506],{"class":56},[39,151477,1221],{"class":45},[39,151479,151480],{"class":1319},"\"喵喵\"",[39,151482,209],{"class":45},[39,151484,151485],{"class":41,"line":475},[39,151486,3458],{"emptyLinePlaceholder":1145},[39,151488,151489],{"class":41,"line":665},[39,151490,3458],{"emptyLinePlaceholder":1145},[39,151492,151493,151495,151497],{"class":41,"line":671},[39,151494,151349],{"class":45},[39,151496,50],{"class":49},[39,151498,151354],{"class":45},[39,151500,151501,151504,151506],{"class":41,"line":684},[39,151502,151503],{"class":45},"cat ",[39,151505,50],{"class":49},[39,151507,151508],{"class":45}," Cat()\n",[39,151510,151511],{"class":41,"line":2732},[39,151512,3458],{"emptyLinePlaceholder":1145},[39,151514,151515],{"class":41,"line":2737},[39,151516,151517],{"class":45},"dog.speak()\n",[39,151519,151520],{"class":41,"line":2751},[39,151521,151522],{"class":45},"cat.speak()\n",[14,151524,151526],{"id":151525},"_1110-super","11.10 super",[19,151528,151529,151530,151533],{},"子类可以通过 ",[36,151531,151532],{},"super()"," 调用父类方法。",[29,151535,151537],{"className":31,"code":151536,"language":33,"meta":34,"style":34},"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",[36,151538,151539,151547,151556,151566,151570,151574,151586,151595,151606,151616,151620,151624,151640],{"__ignoreMap":34},[39,151540,151541,151543,151545],{"class":41,"line":42},[39,151542,15750],{"class":49},[39,151544,16625],{"class":3021},[39,151546,4797],{"class":45},[39,151548,151549,151551,151553],{"class":41,"line":74},[39,151550,31856],{"class":49},[39,151552,31859],{"class":56},[39,151554,151555],{"class":45},"(self, name):\n",[39,151557,151558,151560,151562,151564],{"class":41,"line":99},[39,151559,31900],{"class":56},[39,151561,150735],{"class":45},[39,151563,50],{"class":49},[39,151565,150740],{"class":45},[39,151567,151568],{"class":41,"line":106},[39,151569,3458],{"emptyLinePlaceholder":1145},[39,151571,151572],{"class":41,"line":112},[39,151573,3458],{"emptyLinePlaceholder":1145},[39,151575,151576,151578,151580,151582,151584],{"class":41,"line":118},[39,151577,15750],{"class":49},[39,151579,8954],{"class":3021},[39,151581,1221],{"class":45},[39,151583,20102],{"class":3021},[39,151585,31841],{"class":45},[39,151587,151588,151590,151592],{"class":41,"line":413},[39,151589,31856],{"class":49},[39,151591,31859],{"class":56},[39,151593,151594],{"class":45},"(self, name, score):\n",[39,151596,151597,151599,151601,151603],{"class":41,"line":419},[39,151598,31872],{"class":56},[39,151600,18317],{"class":45},[39,151602,31884],{"class":56},[39,151604,151605],{"class":45},"(name)\n",[39,151607,151608,151610,151612,151614],{"class":41,"line":425},[39,151609,31900],{"class":56},[39,151611,150759],{"class":45},[39,151613,50],{"class":49},[39,151615,2644],{"class":45},[39,151617,151618],{"class":41,"line":443},[39,151619,3458],{"emptyLinePlaceholder":1145},[39,151621,151622],{"class":41,"line":449},[39,151623,3458],{"emptyLinePlaceholder":1145},[39,151625,151626,151628,151630,151632,151634,151636,151638],{"class":41,"line":455},[39,151627,150426],{"class":45},[39,151629,50],{"class":49},[39,151631,150830],{"class":45},[39,151633,150833],{"class":1319},[39,151635,13491],{"class":45},[39,151637,2187],{"class":56},[39,151639,209],{"class":45},[39,151641,151642,151644],{"class":41,"line":461},[39,151643,31470],{"class":56},[39,151645,151646],{"class":45},"(student.name, student.score)\n",[14,151648,151650],{"id":151649},"_1111-多态","11.11 多态",[19,151652,151653],{},"多态指不同对象响应同一个方法，表现出不同结果。",[29,151655,151657],{"className":31,"code":151656,"language":33,"meta":34,"style":34},"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",[36,151658,151659,151667,151675,151685,151689,151693,151701,151709,151719,151723,151727,151737,151742,151746,151750,151755],{"__ignoreMap":34},[39,151660,151661,151663,151665],{"class":41,"line":42},[39,151662,15750],{"class":49},[39,151664,151309],{"class":3021},[39,151666,4797],{"class":45},[39,151668,151669,151671,151673],{"class":41,"line":74},[39,151670,31856],{"class":49},[39,151672,151391],{"class":3021},[39,151674,31862],{"class":45},[39,151676,151677,151679,151681,151683],{"class":41,"line":99},[39,151678,33506],{"class":56},[39,151680,1221],{"class":45},[39,151682,151334],{"class":1319},[39,151684,209],{"class":45},[39,151686,151687],{"class":41,"line":106},[39,151688,3458],{"emptyLinePlaceholder":1145},[39,151690,151691],{"class":41,"line":112},[39,151692,3458],{"emptyLinePlaceholder":1145},[39,151694,151695,151697,151699],{"class":41,"line":118},[39,151696,15750],{"class":49},[39,151698,151457],{"class":3021},[39,151700,4797],{"class":45},[39,151702,151703,151705,151707],{"class":41,"line":413},[39,151704,31856],{"class":49},[39,151706,151391],{"class":3021},[39,151708,31862],{"class":45},[39,151710,151711,151713,151715,151717],{"class":41,"line":419},[39,151712,33506],{"class":56},[39,151714,1221],{"class":45},[39,151716,151480],{"class":1319},[39,151718,209],{"class":45},[39,151720,151721],{"class":41,"line":425},[39,151722,3458],{"emptyLinePlaceholder":1145},[39,151724,151725],{"class":41,"line":443},[39,151726,3458],{"emptyLinePlaceholder":1145},[39,151728,151729,151731,151734],{"class":41,"line":449},[39,151730,33002],{"class":49},[39,151732,151733],{"class":3021}," make_sound",[39,151735,151736],{"class":45},"(animal):\n",[39,151738,151739],{"class":41,"line":455},[39,151740,151741],{"class":45},"    animal.speak()\n",[39,151743,151744],{"class":41,"line":461},[39,151745,3458],{"emptyLinePlaceholder":1145},[39,151747,151748],{"class":41,"line":475},[39,151749,3458],{"emptyLinePlaceholder":1145},[39,151751,151752],{"class":41,"line":665},[39,151753,151754],{"class":45},"make_sound(Dog())\n",[39,151756,151757],{"class":41,"line":671},[39,151758,151759],{"class":45},"make_sound(Cat())\n",[19,151761,151762],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,151764,151766],{"id":151765},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,151768,151769],{},"实例属性属于对象：",[29,151771,151773],{"className":31,"code":151772,"language":33,"meta":34,"style":34},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[36,151774,151775,151783,151791],{"__ignoreMap":34},[39,151776,151777,151779,151781],{"class":41,"line":42},[39,151778,15750],{"class":49},[39,151780,8954],{"class":3021},[39,151782,4797],{"class":45},[39,151784,151785,151787,151789],{"class":41,"line":74},[39,151786,31856],{"class":49},[39,151788,31859],{"class":56},[39,151790,151555],{"class":45},[39,151792,151793,151795,151797,151799],{"class":41,"line":99},[39,151794,31900],{"class":56},[39,151796,150735],{"class":45},[39,151798,50],{"class":49},[39,151800,150740],{"class":45},[19,151802,151803],{},"类属性属于类，所有对象共享：",[29,151805,151807],{"className":31,"code":151806,"language":33,"meta":34,"style":34},"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",[36,151808,151809,151817,151827,151831,151839,151849,151853,151857,151870,151884,151888,151895,151902],{"__ignoreMap":34},[39,151810,151811,151813,151815],{"class":41,"line":42},[39,151812,15750],{"class":49},[39,151814,8954],{"class":3021},[39,151816,4797],{"class":45},[39,151818,151819,151822,151824],{"class":41,"line":74},[39,151820,151821],{"class":45},"    school ",[39,151823,50],{"class":49},[39,151825,151826],{"class":1319}," \"黑马学校\"\n",[39,151828,151829],{"class":41,"line":99},[39,151830,3458],{"emptyLinePlaceholder":1145},[39,151832,151833,151835,151837],{"class":41,"line":106},[39,151834,31856],{"class":49},[39,151836,31859],{"class":56},[39,151838,151555],{"class":45},[39,151840,151841,151843,151845,151847],{"class":41,"line":112},[39,151842,31900],{"class":56},[39,151844,150735],{"class":45},[39,151846,50],{"class":49},[39,151848,150740],{"class":45},[39,151850,151851],{"class":41,"line":118},[39,151852,3458],{"emptyLinePlaceholder":1145},[39,151854,151855],{"class":41,"line":413},[39,151856,3458],{"emptyLinePlaceholder":1145},[39,151858,151859,151862,151864,151866,151868],{"class":41,"line":419},[39,151860,151861],{"class":45},"s1 ",[39,151863,50],{"class":49},[39,151865,150830],{"class":45},[39,151867,150833],{"class":1319},[39,151869,209],{"class":45},[39,151871,151872,151875,151877,151879,151882],{"class":41,"line":425},[39,151873,151874],{"class":45},"s2 ",[39,151876,50],{"class":49},[39,151878,150830],{"class":45},[39,151880,151881],{"class":1319},"\"小红\"",[39,151883,209],{"class":45},[39,151885,151886],{"class":41,"line":443},[39,151887,3458],{"emptyLinePlaceholder":1145},[39,151889,151890,151892],{"class":41,"line":449},[39,151891,31470],{"class":56},[39,151893,151894],{"class":45},"(s1.school)\n",[39,151896,151897,151899],{"class":41,"line":455},[39,151898,31470],{"class":56},[39,151900,151901],{"class":45},"(s2.school)\n",[39,151903,151904,151906],{"class":41,"line":461},[39,151905,31470],{"class":56},[39,151907,151908],{"class":45},"(Student.school)\n",[19,151910,151911],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151913,151915],{"id":151914},"_1113-类方法和静态方法","11.13 类方法和静态方法",[1188,151917,151919],{"id":151918},"_11131-类方法","11.13.1 类方法",[19,151921,151922,151923,151926,151927,29442],{},"类方法使用 ",[36,151924,151925],{},"@classmethod","，第一个参数通常是 ",[36,151928,151929],{},"cls",[29,151931,151933],{"className":31,"code":151932,"language":33,"meta":34,"style":34},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[36,151934,151935,151943,151951,151955,151963,151973,151983,151987,151991],{"__ignoreMap":34},[39,151936,151937,151939,151941],{"class":41,"line":42},[39,151938,15750],{"class":49},[39,151940,8954],{"class":3021},[39,151942,4797],{"class":45},[39,151944,151945,151947,151949],{"class":41,"line":74},[39,151946,151821],{"class":45},[39,151948,50],{"class":49},[39,151950,151826],{"class":1319},[39,151952,151953],{"class":41,"line":99},[39,151954,3458],{"emptyLinePlaceholder":1145},[39,151956,151957,151960],{"class":41,"line":106},[39,151958,151959],{"class":3021},"    @",[39,151961,151962],{"class":56},"classmethod\n",[39,151964,151965,151967,151970],{"class":41,"line":112},[39,151966,31856],{"class":49},[39,151968,151969],{"class":3021}," get_school",[39,151971,151972],{"class":45},"(cls):\n",[39,151974,151975,151977,151980],{"class":41,"line":118},[39,151976,15808],{"class":49},[39,151978,151979],{"class":56}," cls",[39,151981,151982],{"class":45},".school\n",[39,151984,151985],{"class":41,"line":413},[39,151986,3458],{"emptyLinePlaceholder":1145},[39,151988,151989],{"class":41,"line":419},[39,151990,3458],{"emptyLinePlaceholder":1145},[39,151992,151993,151995],{"class":41,"line":425},[39,151994,31470],{"class":56},[39,151996,151997],{"class":45},"(Student.get_school())\n",[1188,151999,152001],{"id":152000},"_11132-静态方法","11.13.2 静态方法",[19,152003,152004,152005,152008],{},"静态方法使用 ",[36,152006,152007],{},"@staticmethod","，不需要访问实例和类。",[29,152010,152012],{"className":31,"code":152011,"language":33,"meta":34,"style":34},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[36,152013,152014,152023,152030,152039,152050,152054,152058],{"__ignoreMap":34},[39,152015,152016,152018,152021],{"class":41,"line":42},[39,152017,15750],{"class":49},[39,152019,152020],{"class":3021}," MathUtils",[39,152022,4797],{"class":45},[39,152024,152025,152027],{"class":41,"line":74},[39,152026,151959],{"class":3021},[39,152028,152029],{"class":56},"staticmethod\n",[39,152031,152032,152034,152036],{"class":41,"line":99},[39,152033,31856],{"class":49},[39,152035,6266],{"class":3021},[39,152037,152038],{"class":45},"(a, b):\n",[39,152040,152041,152043,152045,152047],{"class":41,"line":106},[39,152042,15808],{"class":49},[39,152044,11925],{"class":45},[39,152046,1682],{"class":49},[39,152048,152049],{"class":45}," b\n",[39,152051,152052],{"class":41,"line":112},[39,152053,3458],{"emptyLinePlaceholder":1145},[39,152055,152056],{"class":41,"line":118},[39,152057,3458],{"emptyLinePlaceholder":1145},[39,152059,152060,152062,152065,152067,152069,152071],{"class":41,"line":413},[39,152061,31470],{"class":56},[39,152063,152064],{"class":45},"(MathUtils.add(",[39,152066,57],{"class":56},[39,152068,13491],{"class":45},[39,152070,63],{"class":56},[39,152072,31552],{"class":45},[19,152074,152075],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152077,152079],{"id":152078},"_1114-dataclass","11.14 dataclass",[19,152081,152082,152085],{},[36,152083,152084],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[29,152087,152089],{"className":31,"code":152088,"language":33,"meta":34,"style":34},"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",[36,152090,152091,152103,152107,152111,152116,152124,152132,152140,152148,152152,152156,152176],{"__ignoreMap":34},[39,152092,152093,152095,152098,152100],{"class":41,"line":42},[39,152094,31792],{"class":49},[39,152096,152097],{"class":45}," dataclasses ",[39,152099,31447],{"class":49},[39,152101,152102],{"class":45}," dataclass\n",[39,152104,152105],{"class":41,"line":74},[39,152106,3458],{"emptyLinePlaceholder":1145},[39,152108,152109],{"class":41,"line":99},[39,152110,3458],{"emptyLinePlaceholder":1145},[39,152112,152113],{"class":41,"line":106},[39,152114,152115],{"class":3021},"@dataclass\n",[39,152117,152118,152120,152122],{"class":41,"line":112},[39,152119,15750],{"class":49},[39,152121,8954],{"class":3021},[39,152123,4797],{"class":45},[39,152125,152126,152129],{"class":41,"line":118},[39,152127,152128],{"class":45},"    name: ",[39,152130,152131],{"class":56},"str\n",[39,152133,152134,152137],{"class":41,"line":413},[39,152135,152136],{"class":45},"    age: ",[39,152138,152139],{"class":56},"int\n",[39,152141,152142,152145],{"class":41,"line":419},[39,152143,152144],{"class":45},"    score: ",[39,152146,152147],{"class":56},"float\n",[39,152149,152150],{"class":41,"line":425},[39,152151,3458],{"emptyLinePlaceholder":1145},[39,152153,152154],{"class":41,"line":443},[39,152155,3458],{"emptyLinePlaceholder":1145},[39,152157,152158,152160,152162,152164,152166,152168,152170,152172,152174],{"class":41,"line":449},[39,152159,150426],{"class":45},[39,152161,50],{"class":49},[39,152163,150830],{"class":45},[39,152165,150833],{"class":1319},[39,152167,13491],{"class":45},[39,152169,1849],{"class":56},[39,152171,13491],{"class":45},[39,152173,2187],{"class":56},[39,152175,209],{"class":45},[39,152177,152178,152180],{"class":41,"line":455},[39,152179,31470],{"class":56},[39,152181,150987],{"class":45},[19,152183,152184,152185,1425,152187,152190],{},"它会自动生成 ",[36,152186,31884],{},[36,152188,152189],{},"__repr__"," 等方法。适合数据模型类。",[14,152192,152194],{"id":152193},"_1115-小案例学生类","11.15 小案例：学生类",[29,152196,152198],{"className":31,"code":152197,"language":33,"meta":34,"style":34},"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",[36,152199,152200,152208,152217,152229,152239,152249,152259,152263,152272,152285,152289,152298,152304,152316,152328,152340,152352,152356,152360,152366,152376,152385,152395,152403,152411,152420,152424,152428,152436,152472,152476,152480,152505,152512],{"__ignoreMap":34},[39,152201,152202,152204,152206],{"class":41,"line":42},[39,152203,15750],{"class":49},[39,152205,8954],{"class":3021},[39,152207,4797],{"class":45},[39,152209,152210,152212,152214],{"class":41,"line":74},[39,152211,31856],{"class":49},[39,152213,31859],{"class":56},[39,152215,152216],{"class":45},"(self, student_id, name, age, score):\n",[39,152218,152219,152221,152224,152226],{"class":41,"line":99},[39,152220,31900],{"class":56},[39,152222,152223],{"class":45},".student_id ",[39,152225,50],{"class":49},[39,152227,152228],{"class":45}," student_id\n",[39,152230,152231,152233,152235,152237],{"class":41,"line":106},[39,152232,31900],{"class":56},[39,152234,150735],{"class":45},[39,152236,50],{"class":49},[39,152238,150740],{"class":45},[39,152240,152241,152243,152245,152247],{"class":41,"line":112},[39,152242,31900],{"class":56},[39,152244,150747],{"class":45},[39,152246,50],{"class":49},[39,152248,150752],{"class":45},[39,152250,152251,152253,152255,152257],{"class":41,"line":118},[39,152252,31900],{"class":56},[39,152254,150759],{"class":45},[39,152256,50],{"class":49},[39,152258,2644],{"class":45},[39,152260,152261],{"class":41,"line":413},[39,152262,3458],{"emptyLinePlaceholder":1145},[39,152264,152265,152267,152270],{"class":41,"line":419},[39,152266,31856],{"class":49},[39,152268,152269],{"class":3021}," is_passed",[39,152271,31862],{"class":45},[39,152273,152274,152276,152278,152280,152282],{"class":41,"line":425},[39,152275,15808],{"class":49},[39,152277,39928],{"class":56},[39,152279,150759],{"class":45},[39,152281,2768],{"class":49},[39,152283,152284],{"class":56}," 60\n",[39,152286,152287],{"class":41,"line":443},[39,152288,3458],{"emptyLinePlaceholder":1145},[39,152290,152291,152293,152296],{"class":41,"line":449},[39,152292,31856],{"class":49},[39,152294,152295],{"class":3021}," to_dict",[39,152297,31862],{"class":45},[39,152299,152300,152302],{"class":41,"line":455},[39,152301,15808],{"class":49},[39,152303,16628],{"class":45},[39,152305,152306,152309,152311,152313],{"class":41,"line":461},[39,152307,152308],{"class":1319},"            \"student_id\"",[39,152310,52491],{"class":45},[39,152312,31878],{"class":56},[39,152314,152315],{"class":45},".student_id,\n",[39,152317,152318,152321,152323,152325],{"class":41,"line":475},[39,152319,152320],{"class":1319},"            \"name\"",[39,152322,52491],{"class":45},[39,152324,31878],{"class":56},[39,152326,152327],{"class":45},".name,\n",[39,152329,152330,152333,152335,152337],{"class":41,"line":665},[39,152331,152332],{"class":1319},"            \"age\"",[39,152334,52491],{"class":45},[39,152336,31878],{"class":56},[39,152338,152339],{"class":45},".age,\n",[39,152341,152342,152345,152347,152349],{"class":41,"line":671},[39,152343,152344],{"class":1319},"            \"score\"",[39,152346,52491],{"class":45},[39,152348,31878],{"class":56},[39,152350,152351],{"class":45},".score,\n",[39,152353,152354],{"class":41,"line":684},[39,152355,3587],{"class":45},[39,152357,152358],{"class":41,"line":2732},[39,152359,3458],{"emptyLinePlaceholder":1145},[39,152361,152362,152364],{"class":41,"line":2737},[39,152363,151959],{"class":3021},[39,152365,151962],{"class":56},[39,152367,152368,152370,152373],{"class":41,"line":2751},[39,152369,31856],{"class":49},[39,152371,152372],{"class":3021}," from_dict",[39,152374,152375],{"class":45},"(cls, data):\n",[39,152377,152378,152380,152382],{"class":41,"line":2756},[39,152379,15808],{"class":49},[39,152381,151979],{"class":56},[39,152383,152384],{"class":45},"(\n",[39,152386,152387,152390,152393],{"class":41,"line":2785},[39,152388,152389],{"class":45},"            data[",[39,152391,152392],{"class":1319},"\"student_id\"",[39,152394,88890],{"class":45},[39,152396,152397,152399,152401],{"class":41,"line":2790},[39,152398,152389],{"class":45},[39,152400,63733],{"class":1319},[39,152402,88890],{"class":45},[39,152404,152405,152407,152409],{"class":41,"line":2807},[39,152406,152389],{"class":45},[39,152408,70178],{"class":1319},[39,152410,88890],{"class":45},[39,152412,152413,152415,152418],{"class":41,"line":2812},[39,152414,152389],{"class":45},[39,152416,152417],{"class":1319},"\"score\"",[39,152419,88890],{"class":45},[39,152421,152422],{"class":41,"line":2817},[39,152423,39181],{"class":45},[39,152425,152426],{"class":41,"line":2822},[39,152427,3458],{"emptyLinePlaceholder":1145},[39,152429,152430,152432,152434],{"class":41,"line":2836},[39,152431,31856],{"class":49},[39,152433,150926],{"class":56},[39,152435,31862],{"class":45},[39,152437,152438,152440,152442,152444,152446,152449,152451,152454,152456,152458,152460,152462,152464,152466,152468,152470],{"class":41,"line":2841},[39,152439,15808],{"class":49},[39,152441,150935],{"class":49},[39,152443,1462],{"class":1319},[39,152445,150397],{"class":56},[39,152447,152448],{"class":45},".student_id",[39,152450,2144],{"class":56},[39,152452,152453],{"class":56}," {self",[39,152455,81355],{"class":45},[39,152457,2144],{"class":56},[39,152459,152453],{"class":56},[39,152461,81367],{"class":45},[39,152463,2144],{"class":56},[39,152465,152453],{"class":56},[39,152467,150807],{"class":45},[39,152469,2144],{"class":56},[39,152471,26190],{"class":1319},[39,152473,152474],{"class":41,"line":3635},[39,152475,3458],{"emptyLinePlaceholder":1145},[39,152477,152478],{"class":41,"line":3649},[39,152479,3458],{"emptyLinePlaceholder":1145},[39,152481,152482,152484,152486,152488,152491,152493,152495,152497,152499,152501,152503],{"class":41,"line":3657},[39,152483,150426],{"class":45},[39,152485,50],{"class":49},[39,152487,150830],{"class":45},[39,152489,152490],{"class":1319},"\"001\"",[39,152492,13491],{"class":45},[39,152494,150833],{"class":1319},[39,152496,13491],{"class":45},[39,152498,1849],{"class":56},[39,152500,13491],{"class":45},[39,152502,2187],{"class":56},[39,152504,209],{"class":45},[39,152506,152507,152509],{"class":41,"line":3662},[39,152508,31470],{"class":56},[39,152510,152511],{"class":45},"(student.is_passed())\n",[39,152513,152514,152516],{"class":41,"line":3668},[39,152515,31470],{"class":56},[39,152517,152518],{"class":45},"(student.to_dict())\n",[19,152520,152521,101963,152524,152527],{},[36,152522,152523],{},"to_dict()",[36,152525,152526],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152529,152531],{"id":152530},"_1116-易错点","11.16 易错点",[1171,152533,152534,152540,152546,152551,152554,152557],{},[1174,152535,152536,152537,29442],{},"类名推荐使用大驼峰，如 ",[36,152538,152539],{},"StudentManager",[1174,152541,152542,152543,152545],{},"方法第一个参数必须写 ",[36,152544,31878],{},"，调用时不用传。",[1174,152547,152548,152550],{},[36,152549,31884],{}," 不是普通方法，它在创建对象时自动执行。",[1174,152552,152553],{},"私有属性不是绝对安全，只是约定和名称改写。",[1174,152555,152556],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[1174,152558,152559],{},"类中方法太多时，说明职责可能过重。",[14,152561,152563],{"id":152562},"_1117-本章练习","11.17 本章练习",[1171,152565,152566,152572,152578,152583,152596],{},[1174,152567,152568,152569,152571],{},"定义 ",[36,152570,150513],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[1174,152573,152568,152574,152577],{},[36,152575,152576],{},"Account"," 类，实现存款、取款、查询余额。",[1174,152579,152568,152580,152582],{},[36,152581,18282],{}," 类，计算圆的周长和面积。",[1174,152584,152568,152585,1425,152588,152591,152592,152595],{},[36,152586,152587],{},"Dog",[36,152589,152590],{},"Cat"," 类，并用同一个函数调用它们的 ",[36,152593,152594],{},"speak()"," 方法。",[1174,152597,105311,152598,152600,152601,29442],{},[36,152599,152084],{}," 定义一个商品类 ",[36,152602,152603],{},"Product",[1133,152605,152606],{},"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":34,"searchDepth":74,"depth":74,"links":152608},[152609,152610,152611,152612,152613,152614,152616,152617,152618,152619,152620,152621,152622,152626,152627,152628,152629],{"id":150277,"depth":74,"text":150278},{"id":150460,"depth":74,"text":150461},{"id":150524,"depth":74,"text":150525},{"id":150601,"depth":74,"text":150602},{"id":150700,"depth":74,"text":150701},{"id":150864,"depth":74,"text":152615},"11.6 str",{"id":150990,"depth":74,"text":150991},{"id":151256,"depth":74,"text":151257},{"id":151370,"depth":74,"text":151371},{"id":151525,"depth":74,"text":151526},{"id":151649,"depth":74,"text":151650},{"id":151765,"depth":74,"text":151766},{"id":151914,"depth":74,"text":151915,"children":152623},[152624,152625],{"id":151918,"depth":99,"text":151919},{"id":152000,"depth":99,"text":152001},{"id":152078,"depth":74,"text":152079},{"id":152193,"depth":74,"text":152194},{"id":152530,"depth":74,"text":152531},{"id":152562,"depth":74,"text":152563},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150269,"description":1142},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152636,"title":152637,"body":152638,"description":1142,"extension":1143,"meta":155951,"navigation":1145,"path":155952,"seo":155953,"stem":155954,"__hash__":155955},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152639,"toc":155927},[152640,152643,152647,152650,152653,152682,152685,152693,152697,152701,152704,152727,152730,152736,152740,154186,154189,154210,154214,154217,154229,154232,154416,154419,154545,154548,154552,154556,154692,154696,154782,154786,154868,154872,154909,154913,155102,155106,155109,155339,155343,155346,155527,155530,155534,155537,155543,155546,155572,155576,155579,155593,155596,155621,155624,155638,155641,155658,155661,155678,155681,155698,155702,155728,155732,155755,155759,155762,155764,155770,155772,155793,155796,155802,155808,155812,155815,155891,155894,155898,155924],[10,152641,152637],{"id":152642},"_12-综合案例与复习路线",[14,152644,152646],{"id":152645},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,152648,152649],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,152651,152652],{},"一个合格的入门综合项目最好覆盖：",[1171,152654,152655,152658,152661,152664,152667,152670,152673,152676,152679],{},[1174,152656,152657],{},"输入输出。",[1174,152659,152660],{},"判断和循环。",[1174,152662,152663],{},"函数拆分。",[1174,152665,152666],{},"列表、字典等容器。",[1174,152668,152669],{},"文件持久化。",[1174,152671,152672],{},"异常处理。",[1174,152674,152675],{},"模块拆分。",[1174,152677,152678],{},"可选：面向对象。",[1174,152680,152681],{},"可选：数据可视化。",[19,152683,152684],{},"本章整理两个方向：",[1171,152686,152687,152690],{},[1174,152688,152689],{},"学生管理系统。",[1174,152691,152692],{},"销售数据统计和可视化。",[14,152694,152696],{"id":152695},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[1188,152698,152700],{"id":152699},"_1221-需求","12.2.1 需求",[19,152702,152703],{},"实现一个命令行学生管理系统：",[1171,152705,152706,152709,152712,152715,152718,152721,152724],{},[1174,152707,152708],{},"添加学生。",[1174,152710,152711],{},"删除学生。",[1174,152713,152714],{},"修改学生。",[1174,152716,152717],{},"查询学生。",[1174,152719,152720],{},"显示所有学生。",[1174,152722,152723],{},"保存到 JSON 文件。",[1174,152725,152726],{},"程序启动时自动读取 JSON 文件。",[19,152728,152729],{},"学生字段：",[29,152731,152734],{"className":152732,"code":152733,"language":6244,"meta":34},[6242],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[36,152735,152733],{"__ignoreMap":34},[14,152737,152739],{"id":152738},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[29,152741,152743],{"className":31,"code":152742,"language":33,"meta":34,"style":34},"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",[36,152744,152745,152751,152761,152765,152779,152783,152787,152796,152808,152814,152818,152824,152855,152865,152872,152883,152889,152893,152897,152907,152938,152964,152968,152972,152981,152992,153003,153014,153025,153036,153047,153058,153062,153066,153076,153088,153104,153111,153118,153122,153126,153136,153144,153151,153164,153174,153185,153189,153193,153202,153210,153216,153228,153236,153247,153251,153255,153264,153280,153284,153291,153302,153307,153311,153327,153342,153357,153361,153366,153374,153382,153390,153398,153402,153407,153418,153422,153426,153435,153450,153460,153464,153476,153487,153491,153495,153500,153504,153515,153519,153523,153532,153547,153555,153559,153571,153581,153585,153589,153604,153617,153630,153634,153647,153659,153671,153675,153679,153690,153694,153698,153707,153722,153730,153734,153746,153756,153760,153764,153769,153773,153777,153787,153793,153815,153834,153853,153872,153877,153881,153885,153894,153902,153913,153917,153921,153947,153957,153962,153966,153970,153978,153988,153992,154000,154005,154021,154025,154039,154044,154058,154063,154076,154081,154094,154099,154112,154117,154130,154141,154145,154151,154162,154166,154170,154182],{"__ignoreMap":34},[39,152746,152747,152749],{"class":41,"line":42},[39,152748,31447],{"class":49},[39,152750,148036],{"class":45},[39,152752,152753,152755,152757,152759],{"class":41,"line":74},[39,152754,31792],{"class":49},[39,152756,109256],{"class":45},[39,152758,31447],{"class":49},[39,152760,109261],{"class":45},[39,152762,152763],{"class":41,"line":99},[39,152764,3458],{"emptyLinePlaceholder":1145},[39,152766,152767,152770,152772,152774,152777],{"class":41,"line":106},[39,152768,152769],{"class":56},"DATA_FILE",[39,152771,14620],{"class":49},[39,152773,109490],{"class":45},[39,152775,152776],{"class":1319},"\"students.json\"",[39,152778,209],{"class":45},[39,152780,152781],{"class":41,"line":112},[39,152782,3458],{"emptyLinePlaceholder":1145},[39,152784,152785],{"class":41,"line":118},[39,152786,3458],{"emptyLinePlaceholder":1145},[39,152788,152789,152791,152794],{"class":41,"line":413},[39,152790,33002],{"class":49},[39,152792,152793],{"class":3021}," load_students",[39,152795,33008],{"class":45},[39,152797,152798,152800,152802,152805],{"class":41,"line":419},[39,152799,4159],{"class":49},[39,152801,39985],{"class":49},[39,152803,152804],{"class":56}," DATA_FILE",[39,152806,152807],{"class":45},".exists():\n",[39,152809,152810,152812],{"class":41,"line":425},[39,152811,15808],{"class":49},[39,152813,52892],{"class":45},[39,152815,152816],{"class":41,"line":443},[39,152817,3458],{"emptyLinePlaceholder":1145},[39,152819,152820,152822],{"class":41,"line":449},[39,152821,126729],{"class":49},[39,152823,4797],{"class":45},[39,152825,152826,152829,152831,152833,152835,152837,152839,152841,152843,152845,152847,152849,152851,152853],{"class":41,"line":455},[39,152827,152828],{"class":49},"        with",[39,152830,147736],{"class":56},[39,152832,1221],{"class":45},[39,152834,152769],{"class":56},[39,152836,13491],{"class":45},[39,152838,147746],{"class":1319},[39,152840,13491],{"class":45},[39,152842,147751],{"class":254},[39,152844,50],{"class":49},[39,152846,147756],{"class":1319},[39,152848,14770],{"class":45},[39,152850,32438],{"class":49},[39,152852,149098],{"class":254},[39,152854,4797],{"class":45},[39,152856,152857,152859,152861,152863],{"class":41,"line":461},[39,152858,16788],{"class":49},[39,152860,149109],{"class":45},[39,152862,46409],{"class":254},[39,152864,209],{"class":45},[39,152866,152867,152869],{"class":41,"line":475},[39,152868,126757],{"class":49},[39,152870,152871],{"class":45}," json.JSONDecodeError:\n",[39,152873,152874,152876,152878,152881],{"class":41,"line":665},[39,152875,33506],{"class":56},[39,152877,1221],{"class":45},[39,152879,152880],{"class":1319},"\"数据文件格式错误，已使用空数据启动\"",[39,152882,209],{"class":45},[39,152884,152885,152887],{"class":41,"line":671},[39,152886,15808],{"class":49},[39,152888,52892],{"class":45},[39,152890,152891],{"class":41,"line":684},[39,152892,3458],{"emptyLinePlaceholder":1145},[39,152894,152895],{"class":41,"line":2732},[39,152896,3458],{"emptyLinePlaceholder":1145},[39,152898,152899,152901,152904],{"class":41,"line":2737},[39,152900,33002],{"class":49},[39,152902,152903],{"class":3021}," save_students",[39,152905,152906],{"class":45},"(students):\n",[39,152908,152909,152911,152913,152915,152917,152919,152922,152924,152926,152928,152930,152932,152934,152936],{"class":41,"line":2751},[39,152910,35233],{"class":49},[39,152912,147736],{"class":56},[39,152914,1221],{"class":45},[39,152916,152769],{"class":56},[39,152918,13491],{"class":45},[39,152920,152921],{"class":1319},"\"w\"",[39,152923,13491],{"class":45},[39,152925,147751],{"class":254},[39,152927,50],{"class":49},[39,152929,147756],{"class":1319},[39,152931,14770],{"class":45},[39,152933,32438],{"class":49},[39,152935,149098],{"class":254},[39,152937,4797],{"class":45},[39,152939,152940,152943,152945,152947,152949,152951,152953,152955,152958,152960,152962],{"class":41,"line":2756},[39,152941,152942],{"class":45},"        json.dump(students, ",[39,152944,46409],{"class":254},[39,152946,13491],{"class":45},[39,152948,148082],{"class":254},[39,152950,50],{"class":49},[39,152952,35042],{"class":56},[39,152954,13491],{"class":45},[39,152956,152957],{"class":254},"indent",[39,152959,50],{"class":49},[39,152961,63],{"class":56},[39,152963,209],{"class":45},[39,152965,152966],{"class":41,"line":2785},[39,152967,3458],{"emptyLinePlaceholder":1145},[39,152969,152970],{"class":41,"line":2790},[39,152971,3458],{"emptyLinePlaceholder":1145},[39,152973,152974,152976,152979],{"class":41,"line":2807},[39,152975,33002],{"class":49},[39,152977,152978],{"class":3021}," show_menu",[39,152980,33008],{"class":45},[39,152982,152983,152985,152987,152990],{"class":41,"line":2812},[39,152984,32354],{"class":56},[39,152986,1221],{"class":45},[39,152988,152989],{"class":1319},"\"====== 学生管理系统 ======\"",[39,152991,209],{"class":45},[39,152993,152994,152996,152998,153001],{"class":41,"line":2817},[39,152995,32354],{"class":56},[39,152997,1221],{"class":45},[39,152999,153000],{"class":1319},"\"1. 添加学生\"",[39,153002,209],{"class":45},[39,153004,153005,153007,153009,153012],{"class":41,"line":2822},[39,153006,32354],{"class":56},[39,153008,1221],{"class":45},[39,153010,153011],{"class":1319},"\"2. 删除学生\"",[39,153013,209],{"class":45},[39,153015,153016,153018,153020,153023],{"class":41,"line":2836},[39,153017,32354],{"class":56},[39,153019,1221],{"class":45},[39,153021,153022],{"class":1319},"\"3. 修改学生\"",[39,153024,209],{"class":45},[39,153026,153027,153029,153031,153034],{"class":41,"line":2841},[39,153028,32354],{"class":56},[39,153030,1221],{"class":45},[39,153032,153033],{"class":1319},"\"4. 查询学生\"",[39,153035,209],{"class":45},[39,153037,153038,153040,153042,153045],{"class":41,"line":3635},[39,153039,32354],{"class":56},[39,153041,1221],{"class":45},[39,153043,153044],{"class":1319},"\"5. 显示所有学生\"",[39,153046,209],{"class":45},[39,153048,153049,153051,153053,153056],{"class":41,"line":3649},[39,153050,32354],{"class":56},[39,153052,1221],{"class":45},[39,153054,153055],{"class":1319},"\"0. 退出系统\"",[39,153057,209],{"class":45},[39,153059,153060],{"class":41,"line":3657},[39,153061,3458],{"emptyLinePlaceholder":1145},[39,153063,153064],{"class":41,"line":3662},[39,153065,3458],{"emptyLinePlaceholder":1145},[39,153067,153068,153070,153073],{"class":41,"line":3668},[39,153069,33002],{"class":49},[39,153071,153072],{"class":3021}," find_student",[39,153074,153075],{"class":45},"(students, student_id):\n",[39,153077,153078,153080,153083,153085],{"class":41,"line":3674},[39,153079,4259],{"class":49},[39,153081,153082],{"class":45}," student ",[39,153084,27100],{"class":49},[39,153086,153087],{"class":45}," students:\n",[39,153089,153090,153092,153095,153097,153099,153101],{"class":41,"line":3679},[39,153091,3555],{"class":49},[39,153093,153094],{"class":45}," student[",[39,153096,152392],{"class":1319},[39,153098,5501],{"class":45},[39,153100,4007],{"class":49},[39,153102,153103],{"class":45}," student_id:\n",[39,153105,153106,153108],{"class":41,"line":9004},[39,153107,16788],{"class":49},[39,153109,153110],{"class":45}," student\n",[39,153112,153113,153115],{"class":41,"line":9028},[39,153114,5148],{"class":49},[39,153116,153117],{"class":56}," None\n",[39,153119,153120],{"class":41,"line":9033},[39,153121,3458],{"emptyLinePlaceholder":1145},[39,153123,153124],{"class":41,"line":9039},[39,153125,3458],{"emptyLinePlaceholder":1145},[39,153127,153128,153130,153133],{"class":41,"line":9066},[39,153129,33002],{"class":49},[39,153131,153132],{"class":3021}," input_int",[39,153134,153135],{"class":45},"(prompt):\n",[39,153137,153138,153140,153142],{"class":41,"line":9071},[39,153139,3309],{"class":49},[39,153141,96342],{"class":56},[39,153143,4797],{"class":45},[39,153145,153146,153149],{"class":41,"line":9077},[39,153147,153148],{"class":49},"        try",[39,153150,4797],{"class":45},[39,153152,153153,153155,153157,153159,153161],{"class":41,"line":9089},[39,153154,16788],{"class":49},[39,153156,3440],{"class":56},[39,153158,1221],{"class":45},[39,153160,54875],{"class":56},[39,153162,153163],{"class":45},"(prompt))\n",[39,153165,153166,153169,153172],{"class":41,"line":9101},[39,153167,153168],{"class":49},"        except",[39,153170,153171],{"class":56}," ValueError",[39,153173,4797],{"class":45},[39,153175,153176,153178,153180,153183],{"class":41,"line":9113},[39,153177,35705],{"class":56},[39,153179,1221],{"class":45},[39,153181,153182],{"class":1319},"\"请输入整数\"",[39,153184,209],{"class":45},[39,153186,153187],{"class":41,"line":10772},[39,153188,3458],{"emptyLinePlaceholder":1145},[39,153190,153191],{"class":41,"line":10797},[39,153192,3458],{"emptyLinePlaceholder":1145},[39,153194,153195,153197,153200],{"class":41,"line":10820},[39,153196,33002],{"class":49},[39,153198,153199],{"class":3021}," input_float",[39,153201,153135],{"class":45},[39,153203,153204,153206,153208],{"class":41,"line":10844},[39,153205,3309],{"class":49},[39,153207,96342],{"class":56},[39,153209,4797],{"class":45},[39,153211,153212,153214],{"class":41,"line":10849},[39,153213,153148],{"class":49},[39,153215,4797],{"class":45},[39,153217,153218,153220,153222,153224,153226],{"class":41,"line":10854},[39,153219,16788],{"class":49},[39,153221,110742],{"class":56},[39,153223,1221],{"class":45},[39,153225,54875],{"class":56},[39,153227,153163],{"class":45},[39,153229,153230,153232,153234],{"class":41,"line":10859},[39,153231,153168],{"class":49},[39,153233,153171],{"class":56},[39,153235,4797],{"class":45},[39,153237,153238,153240,153242,153245],{"class":41,"line":10868},[39,153239,35705],{"class":56},[39,153241,1221],{"class":45},[39,153243,153244],{"class":1319},"\"请输入数字\"",[39,153246,209],{"class":45},[39,153248,153249],{"class":41,"line":10873},[39,153250,3458],{"emptyLinePlaceholder":1145},[39,153252,153253],{"class":41,"line":10879},[39,153254,3458],{"emptyLinePlaceholder":1145},[39,153256,153257,153259,153262],{"class":41,"line":10900},[39,153258,33002],{"class":49},[39,153260,153261],{"class":3021}," add_student",[39,153263,152906],{"class":45},[39,153265,153266,153269,153271,153273,153275,153278],{"class":41,"line":10906},[39,153267,153268],{"class":45},"    student_id ",[39,153270,50],{"class":49},[39,153272,61659],{"class":56},[39,153274,1221],{"class":45},[39,153276,153277],{"class":1319},"\"请输入学号:\"",[39,153279,209],{"class":45},[39,153281,153282],{"class":41,"line":10920},[39,153283,3458],{"emptyLinePlaceholder":1145},[39,153285,153286,153288],{"class":41,"line":10926},[39,153287,4159],{"class":49},[39,153289,153290],{"class":45}," find_student(students, student_id):\n",[39,153292,153293,153295,153297,153300],{"class":41,"line":10953},[39,153294,33506],{"class":56},[39,153296,1221],{"class":45},[39,153298,153299],{"class":1319},"\"学号已存在\"",[39,153301,209],{"class":45},[39,153303,153304],{"class":41,"line":10962},[39,153305,153306],{"class":49},"        return\n",[39,153308,153309],{"class":41,"line":10968},[39,153310,3458],{"emptyLinePlaceholder":1145},[39,153312,153313,153316,153318,153320,153322,153325],{"class":41,"line":10976},[39,153314,153315],{"class":45},"    name ",[39,153317,50],{"class":49},[39,153319,61659],{"class":56},[39,153321,1221],{"class":45},[39,153323,153324],{"class":1319},"\"请输入姓名:\"",[39,153326,209],{"class":45},[39,153328,153329,153332,153334,153337,153340],{"class":41,"line":10981},[39,153330,153331],{"class":45},"    age ",[39,153333,50],{"class":49},[39,153335,153336],{"class":45}," input_int(",[39,153338,153339],{"class":1319},"\"请输入年龄:\"",[39,153341,209],{"class":45},[39,153343,153344,153347,153349,153352,153355],{"class":41,"line":17660},[39,153345,153346],{"class":45},"    score ",[39,153348,50],{"class":49},[39,153350,153351],{"class":45}," input_float(",[39,153353,153354],{"class":1319},"\"请输入成绩:\"",[39,153356,209],{"class":45},[39,153358,153359],{"class":41,"line":17666},[39,153360,3458],{"emptyLinePlaceholder":1145},[39,153362,153363],{"class":41,"line":17689},[39,153364,153365],{"class":45},"    students.append({\n",[39,153367,153368,153371],{"class":41,"line":17695},[39,153369,153370],{"class":1319},"        \"student_id\"",[39,153372,153373],{"class":45},": student_id,\n",[39,153375,153376,153379],{"class":41,"line":17718},[39,153377,153378],{"class":1319},"        \"name\"",[39,153380,153381],{"class":45},": name,\n",[39,153383,153384,153387],{"class":41,"line":17732},[39,153385,153386],{"class":1319},"        \"age\"",[39,153388,153389],{"class":45},": age,\n",[39,153391,153392,153395],{"class":41,"line":17752},[39,153393,153394],{"class":1319},"        \"score\"",[39,153396,153397],{"class":45},": score,\n",[39,153399,153400],{"class":41,"line":17758},[39,153401,34516],{"class":45},[39,153403,153404],{"class":41,"line":17769},[39,153405,153406],{"class":45},"    save_students(students)\n",[39,153408,153409,153411,153413,153416],{"class":41,"line":17792},[39,153410,32354],{"class":56},[39,153412,1221],{"class":45},[39,153414,153415],{"class":1319},"\"添加成功\"",[39,153417,209],{"class":45},[39,153419,153420],{"class":41,"line":17814},[39,153421,3458],{"emptyLinePlaceholder":1145},[39,153423,153424],{"class":41,"line":17819},[39,153425,3458],{"emptyLinePlaceholder":1145},[39,153427,153428,153430,153433],{"class":41,"line":17825},[39,153429,33002],{"class":49},[39,153431,153432],{"class":3021}," delete_student",[39,153434,152906],{"class":45},[39,153436,153437,153439,153441,153443,153445,153448],{"class":41,"line":17839},[39,153438,153268],{"class":45},[39,153440,50],{"class":49},[39,153442,61659],{"class":56},[39,153444,1221],{"class":45},[39,153446,153447],{"class":1319},"\"请输入要删除的学号:\"",[39,153449,209],{"class":45},[39,153451,153452,153455,153457],{"class":41,"line":17852},[39,153453,153454],{"class":45},"    student ",[39,153456,50],{"class":49},[39,153458,153459],{"class":45}," find_student(students, student_id)\n",[39,153461,153462],{"class":41,"line":17857},[39,153463,3458],{"emptyLinePlaceholder":1145},[39,153465,153466,153468,153470,153472,153474],{"class":41,"line":17871},[39,153467,4159],{"class":49},[39,153469,153082],{"class":45},[39,153471,39982],{"class":49},[39,153473,39988],{"class":56},[39,153475,4797],{"class":45},[39,153477,153478,153480,153482,153485],{"class":41,"line":17876},[39,153479,33506],{"class":56},[39,153481,1221],{"class":45},[39,153483,153484],{"class":1319},"\"学生不存在\"",[39,153486,209],{"class":45},[39,153488,153489],{"class":41,"line":17882},[39,153490,153306],{"class":49},[39,153492,153493],{"class":41,"line":17887},[39,153494,3458],{"emptyLinePlaceholder":1145},[39,153496,153497],{"class":41,"line":17901},[39,153498,153499],{"class":45},"    students.remove(student)\n",[39,153501,153502],{"class":41,"line":17906},[39,153503,153406],{"class":45},[39,153505,153506,153508,153510,153513],{"class":41,"line":17911},[39,153507,32354],{"class":56},[39,153509,1221],{"class":45},[39,153511,153512],{"class":1319},"\"删除成功\"",[39,153514,209],{"class":45},[39,153516,153517],{"class":41,"line":17925},[39,153518,3458],{"emptyLinePlaceholder":1145},[39,153520,153521],{"class":41,"line":17937},[39,153522,3458],{"emptyLinePlaceholder":1145},[39,153524,153525,153527,153530],{"class":41,"line":17942},[39,153526,33002],{"class":49},[39,153528,153529],{"class":3021}," update_student",[39,153531,152906],{"class":45},[39,153533,153534,153536,153538,153540,153542,153545],{"class":41,"line":17955},[39,153535,153268],{"class":45},[39,153537,50],{"class":49},[39,153539,61659],{"class":56},[39,153541,1221],{"class":45},[39,153543,153544],{"class":1319},"\"请输入要修改的学号:\"",[39,153546,209],{"class":45},[39,153548,153549,153551,153553],{"class":41,"line":17960},[39,153550,153454],{"class":45},[39,153552,50],{"class":49},[39,153554,153459],{"class":45},[39,153556,153557],{"class":41,"line":17965},[39,153558,3458],{"emptyLinePlaceholder":1145},[39,153560,153561,153563,153565,153567,153569],{"class":41,"line":17970},[39,153562,4159],{"class":49},[39,153564,153082],{"class":45},[39,153566,39982],{"class":49},[39,153568,39988],{"class":56},[39,153570,4797],{"class":45},[39,153572,153573,153575,153577,153579],{"class":41,"line":17983},[39,153574,33506],{"class":56},[39,153576,1221],{"class":45},[39,153578,153484],{"class":1319},[39,153580,209],{"class":45},[39,153582,153583],{"class":41,"line":17988},[39,153584,153306],{"class":49},[39,153586,153587],{"class":41,"line":33688},[39,153588,3458],{"emptyLinePlaceholder":1145},[39,153590,153591,153593,153595,153597,153599,153602],{"class":41,"line":33694},[39,153592,153315],{"class":45},[39,153594,50],{"class":49},[39,153596,61659],{"class":56},[39,153598,1221],{"class":45},[39,153600,153601],{"class":1319},"\"请输入新姓名:\"",[39,153603,209],{"class":45},[39,153605,153606,153608,153610,153612,153615],{"class":41,"line":33700},[39,153607,153331],{"class":45},[39,153609,50],{"class":49},[39,153611,153336],{"class":45},[39,153613,153614],{"class":1319},"\"请输入新年龄:\"",[39,153616,209],{"class":45},[39,153618,153619,153621,153623,153625,153628],{"class":41,"line":33706},[39,153620,153346],{"class":45},[39,153622,50],{"class":49},[39,153624,153351],{"class":45},[39,153626,153627],{"class":1319},"\"请输入新成绩:\"",[39,153629,209],{"class":45},[39,153631,153632],{"class":41,"line":33712},[39,153633,3458],{"emptyLinePlaceholder":1145},[39,153635,153636,153639,153641,153643,153645],{"class":41,"line":33723},[39,153637,153638],{"class":45},"    student[",[39,153640,63733],{"class":1319},[39,153642,5501],{"class":45},[39,153644,50],{"class":49},[39,153646,150740],{"class":45},[39,153648,153649,153651,153653,153655,153657],{"class":41,"line":33729},[39,153650,153638],{"class":45},[39,153652,70178],{"class":1319},[39,153654,5501],{"class":45},[39,153656,50],{"class":49},[39,153658,150752],{"class":45},[39,153660,153661,153663,153665,153667,153669],{"class":41,"line":33749},[39,153662,153638],{"class":45},[39,153664,152417],{"class":1319},[39,153666,5501],{"class":45},[39,153668,50],{"class":49},[39,153670,2644],{"class":45},[39,153672,153673],{"class":41,"line":33755},[39,153674,3458],{"emptyLinePlaceholder":1145},[39,153676,153677],{"class":41,"line":33766},[39,153678,153406],{"class":45},[39,153680,153681,153683,153685,153688],{"class":41,"line":33772},[39,153682,32354],{"class":56},[39,153684,1221],{"class":45},[39,153686,153687],{"class":1319},"\"修改成功\"",[39,153689,209],{"class":45},[39,153691,153692],{"class":41,"line":33778},[39,153693,3458],{"emptyLinePlaceholder":1145},[39,153695,153696],{"class":41,"line":33784},[39,153697,3458],{"emptyLinePlaceholder":1145},[39,153699,153700,153702,153705],{"class":41,"line":33790},[39,153701,33002],{"class":49},[39,153703,153704],{"class":3021}," query_student",[39,153706,152906],{"class":45},[39,153708,153709,153711,153713,153715,153717,153720],{"class":41,"line":33796},[39,153710,153268],{"class":45},[39,153712,50],{"class":49},[39,153714,61659],{"class":56},[39,153716,1221],{"class":45},[39,153718,153719],{"class":1319},"\"请输入要查询的学号:\"",[39,153721,209],{"class":45},[39,153723,153724,153726,153728],{"class":41,"line":33802},[39,153725,153454],{"class":45},[39,153727,50],{"class":49},[39,153729,153459],{"class":45},[39,153731,153732],{"class":41,"line":33808},[39,153733,3458],{"emptyLinePlaceholder":1145},[39,153735,153736,153738,153740,153742,153744],{"class":41,"line":33828},[39,153737,4159],{"class":49},[39,153739,153082],{"class":45},[39,153741,39982],{"class":49},[39,153743,39988],{"class":56},[39,153745,4797],{"class":45},[39,153747,153748,153750,153752,153754],{"class":41,"line":33834},[39,153749,33506],{"class":56},[39,153751,1221],{"class":45},[39,153753,153484],{"class":1319},[39,153755,209],{"class":45},[39,153757,153758],{"class":41,"line":33850},[39,153759,153306],{"class":49},[39,153761,153762],{"class":41,"line":33856},[39,153763,3458],{"emptyLinePlaceholder":1145},[39,153765,153766],{"class":41,"line":33870},[39,153767,153768],{"class":45},"    print_student(student)\n",[39,153770,153771],{"class":41,"line":33876},[39,153772,3458],{"emptyLinePlaceholder":1145},[39,153774,153775],{"class":41,"line":33891},[39,153776,3458],{"emptyLinePlaceholder":1145},[39,153778,153779,153781,153784],{"class":41,"line":33897},[39,153780,33002],{"class":49},[39,153782,153783],{"class":3021}," print_student",[39,153785,153786],{"class":45},"(student):\n",[39,153788,153789,153791],{"class":41,"line":33906},[39,153790,32354],{"class":56},[39,153792,152384],{"class":45},[39,153794,153795,153798,153800,153802,153805,153808,153810,153813],{"class":41,"line":33912},[39,153796,153797],{"class":49},"        f",[39,153799,1462],{"class":1319},[39,153801,2094],{"class":56},[39,153803,153804],{"class":45},"student[",[39,153806,153807],{"class":1319},"'student_id'",[39,153809,2138],{"class":45},[39,153811,153812],{"class":56},"}\\t",[39,153814,26190],{"class":1319},[39,153816,153817,153819,153821,153823,153825,153828,153830,153832],{"class":41,"line":33921},[39,153818,153797],{"class":49},[39,153820,1462],{"class":1319},[39,153822,2094],{"class":56},[39,153824,153804],{"class":45},[39,153826,153827],{"class":1319},"'name'",[39,153829,2138],{"class":45},[39,153831,153812],{"class":56},[39,153833,26190],{"class":1319},[39,153835,153836,153838,153840,153842,153844,153847,153849,153851],{"class":41,"line":33927},[39,153837,153797],{"class":49},[39,153839,1462],{"class":1319},[39,153841,2094],{"class":56},[39,153843,153804],{"class":45},[39,153845,153846],{"class":1319},"'age'",[39,153848,2138],{"class":45},[39,153850,153812],{"class":56},[39,153852,26190],{"class":1319},[39,153854,153855,153857,153859,153861,153863,153866,153868,153870],{"class":41,"line":33933},[39,153856,153797],{"class":49},[39,153858,1462],{"class":1319},[39,153860,2094],{"class":56},[39,153862,153804],{"class":45},[39,153864,153865],{"class":1319},"'score'",[39,153867,2138],{"class":45},[39,153869,2144],{"class":56},[39,153871,26190],{"class":1319},[39,153873,153874],{"class":41,"line":33942},[39,153875,153876],{"class":45},"    )\n",[39,153878,153879],{"class":41,"line":33948},[39,153880,3458],{"emptyLinePlaceholder":1145},[39,153882,153883],{"class":41,"line":33959},[39,153884,3458],{"emptyLinePlaceholder":1145},[39,153886,153887,153889,153892],{"class":41,"line":33965},[39,153888,33002],{"class":49},[39,153890,153891],{"class":3021}," show_all_students",[39,153893,152906],{"class":45},[39,153895,153896,153898,153900],{"class":41,"line":33984},[39,153897,4159],{"class":49},[39,153899,39985],{"class":49},[39,153901,153087],{"class":45},[39,153903,153904,153906,153908,153911],{"class":41,"line":33990},[39,153905,33506],{"class":56},[39,153907,1221],{"class":45},[39,153909,153910],{"class":1319},"\"暂无学生\"",[39,153912,209],{"class":45},[39,153914,153915],{"class":41,"line":34001},[39,153916,153306],{"class":49},[39,153918,153919],{"class":41,"line":34007},[39,153920,3458],{"emptyLinePlaceholder":1145},[39,153922,153923,153925,153927,153930,153932,153935,153937,153940,153942,153945],{"class":41,"line":34027},[39,153924,32354],{"class":56},[39,153926,1221],{"class":45},[39,153928,153929],{"class":1319},"\"学号",[39,153931,2299],{"class":56},[39,153933,153934],{"class":1319},"姓名",[39,153936,2299],{"class":56},[39,153938,153939],{"class":1319},"年龄",[39,153941,2299],{"class":56},[39,153943,153944],{"class":1319},"成绩\"",[39,153946,209],{"class":45},[39,153948,153949,153951,153953,153955],{"class":41,"line":34043},[39,153950,4259],{"class":49},[39,153952,153082],{"class":45},[39,153954,27100],{"class":49},[39,153956,153087],{"class":45},[39,153958,153959],{"class":41,"line":34049},[39,153960,153961],{"class":45},"        print_student(student)\n",[39,153963,153964],{"class":41,"line":34063},[39,153965,3458],{"emptyLinePlaceholder":1145},[39,153967,153968],{"class":41,"line":34069},[39,153969,3458],{"emptyLinePlaceholder":1145},[39,153971,153972,153974,153976],{"class":41,"line":34075},[39,153973,33002],{"class":49},[39,153975,3031],{"class":3021},[39,153977,33008],{"class":45},[39,153979,153980,153983,153985],{"class":41,"line":34086},[39,153981,153982],{"class":45},"    students ",[39,153984,50],{"class":49},[39,153986,153987],{"class":45}," load_students()\n",[39,153989,153990],{"class":41,"line":34092},[39,153991,3458],{"emptyLinePlaceholder":1145},[39,153993,153994,153996,153998],{"class":41,"line":34098},[39,153995,3309],{"class":49},[39,153997,96342],{"class":56},[39,153999,4797],{"class":45},[39,154001,154002],{"class":41,"line":34108},[39,154003,154004],{"class":45},"        show_menu()\n",[39,154006,154007,154010,154012,154014,154016,154019],{"class":41,"line":34114},[39,154008,154009],{"class":45},"        choice ",[39,154011,50],{"class":49},[39,154013,61659],{"class":56},[39,154015,1221],{"class":45},[39,154017,154018],{"class":1319},"\"请输入操作:\"",[39,154020,209],{"class":45},[39,154022,154023],{"class":41,"line":34125},[39,154024,3458],{"emptyLinePlaceholder":1145},[39,154026,154027,154029,154032,154034,154037],{"class":41,"line":34131},[39,154028,3555],{"class":49},[39,154030,154031],{"class":45}," choice ",[39,154033,4007],{"class":49},[39,154035,154036],{"class":1319}," \"1\"",[39,154038,4797],{"class":45},[39,154040,154041],{"class":41,"line":34141},[39,154042,154043],{"class":45},"            add_student(students)\n",[39,154045,154046,154049,154051,154053,154056],{"class":41,"line":34146},[39,154047,154048],{"class":49},"        elif",[39,154050,154031],{"class":45},[39,154052,4007],{"class":49},[39,154054,154055],{"class":1319}," \"2\"",[39,154057,4797],{"class":45},[39,154059,154060],{"class":41,"line":34152},[39,154061,154062],{"class":45},"            delete_student(students)\n",[39,154064,154065,154067,154069,154071,154074],{"class":41,"line":34201},[39,154066,154048],{"class":49},[39,154068,154031],{"class":45},[39,154070,4007],{"class":49},[39,154072,154073],{"class":1319}," \"3\"",[39,154075,4797],{"class":45},[39,154077,154078],{"class":41,"line":34248},[39,154079,154080],{"class":45},"            update_student(students)\n",[39,154082,154083,154085,154087,154089,154092],{"class":41,"line":34253},[39,154084,154048],{"class":49},[39,154086,154031],{"class":45},[39,154088,4007],{"class":49},[39,154090,154091],{"class":1319}," \"4\"",[39,154093,4797],{"class":45},[39,154095,154096],{"class":41,"line":34259},[39,154097,154098],{"class":45},"            query_student(students)\n",[39,154100,154101,154103,154105,154107,154110],{"class":41,"line":34278},[39,154102,154048],{"class":49},[39,154104,154031],{"class":45},[39,154106,4007],{"class":49},[39,154108,154109],{"class":1319}," \"5\"",[39,154111,4797],{"class":45},[39,154113,154114],{"class":41,"line":34284},[39,154115,154116],{"class":45},"            show_all_students(students)\n",[39,154118,154119,154121,154123,154125,154128],{"class":41,"line":34304},[39,154120,154048],{"class":49},[39,154122,154031],{"class":45},[39,154124,4007],{"class":49},[39,154126,154127],{"class":1319}," \"0\"",[39,154129,4797],{"class":45},[39,154131,154132,154134,154136,154139],{"class":41,"line":34310},[39,154133,35705],{"class":56},[39,154135,1221],{"class":45},[39,154137,154138],{"class":1319},"\"退出系统\"",[39,154140,209],{"class":45},[39,154142,154143],{"class":41,"line":34316},[39,154144,116043],{"class":49},[39,154146,154147,154149],{"class":41,"line":34326},[39,154148,3592],{"class":49},[39,154150,4797],{"class":45},[39,154152,154153,154155,154157,154160],{"class":41,"line":34331},[39,154154,35705],{"class":56},[39,154156,1221],{"class":45},[39,154158,154159],{"class":1319},"\"输入错误\"",[39,154161,209],{"class":45},[39,154163,154164],{"class":41,"line":34337},[39,154165,3458],{"emptyLinePlaceholder":1145},[39,154167,154168],{"class":41,"line":34353},[39,154169,3458],{"emptyLinePlaceholder":1145},[39,154171,154172,154174,154176,154178,154180],{"class":41,"line":34398},[39,154173,2596],{"class":49},[39,154175,32275],{"class":56},[39,154177,102504],{"class":49},[39,154179,102507],{"class":1319},[39,154181,4797],{"class":45},[39,154183,154184],{"class":41,"line":34404},[39,154185,102514],{"class":45},[19,154187,154188],{},"这个项目串联了：",[1171,154190,154191,154194,154197,154200,154203,154205],{},[1174,154192,154193],{},"菜单循环。",[1174,154195,154196],{},"函数封装。",[1174,154198,154199],{},"列表字典。",[1174,154201,154202],{},"JSON 读写。",[1174,154204,152672],{},[1174,154206,154207,29442],{},[36,154208,154209],{},"if __name__ == \"__main__\"",[14,154211,154213],{"id":154212},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154215,154216],{},"可以进一步拆成两个类：",[1171,154218,154219,154224],{},[1174,154220,154221,154223],{},[36,154222,150513],{},"：表示单个学生。",[1174,154225,154226,154228],{},[36,154227,152539],{},"：负责学生增删改查和文件保存。",[19,154230,154231],{},"示意代码：",[29,154233,154235],{"className":31,"code":154234,"language":33,"meta":34,"style":34},"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",[36,154236,154237,154247,154251,154255,154259,154267,154274,154280,154286,154292,154296,154304,154310,154320,154330,154340,154350,154354,154358,154364,154372,154380,154388,154396,154404,154412],{"__ignoreMap":34},[39,154238,154239,154241,154243,154245],{"class":41,"line":42},[39,154240,31792],{"class":49},[39,154242,152097],{"class":45},[39,154244,31447],{"class":49},[39,154246,152102],{"class":45},[39,154248,154249],{"class":41,"line":74},[39,154250,3458],{"emptyLinePlaceholder":1145},[39,154252,154253],{"class":41,"line":99},[39,154254,3458],{"emptyLinePlaceholder":1145},[39,154256,154257],{"class":41,"line":106},[39,154258,152115],{"class":3021},[39,154260,154261,154263,154265],{"class":41,"line":112},[39,154262,15750],{"class":49},[39,154264,8954],{"class":3021},[39,154266,4797],{"class":45},[39,154268,154269,154272],{"class":41,"line":118},[39,154270,154271],{"class":45},"    student_id: ",[39,154273,152131],{"class":56},[39,154275,154276,154278],{"class":41,"line":413},[39,154277,152128],{"class":45},[39,154279,152131],{"class":56},[39,154281,154282,154284],{"class":41,"line":419},[39,154283,152136],{"class":45},[39,154285,152139],{"class":56},[39,154287,154288,154290],{"class":41,"line":425},[39,154289,152144],{"class":45},[39,154291,152147],{"class":56},[39,154293,154294],{"class":41,"line":443},[39,154295,3458],{"emptyLinePlaceholder":1145},[39,154297,154298,154300,154302],{"class":41,"line":449},[39,154299,31856],{"class":49},[39,154301,152295],{"class":3021},[39,154303,31862],{"class":45},[39,154305,154306,154308],{"class":41,"line":455},[39,154307,15808],{"class":49},[39,154309,16628],{"class":45},[39,154311,154312,154314,154316,154318],{"class":41,"line":461},[39,154313,152308],{"class":1319},[39,154315,52491],{"class":45},[39,154317,31878],{"class":56},[39,154319,152315],{"class":45},[39,154321,154322,154324,154326,154328],{"class":41,"line":475},[39,154323,152320],{"class":1319},[39,154325,52491],{"class":45},[39,154327,31878],{"class":56},[39,154329,152327],{"class":45},[39,154331,154332,154334,154336,154338],{"class":41,"line":665},[39,154333,152332],{"class":1319},[39,154335,52491],{"class":45},[39,154337,31878],{"class":56},[39,154339,152339],{"class":45},[39,154341,154342,154344,154346,154348],{"class":41,"line":671},[39,154343,152344],{"class":1319},[39,154345,52491],{"class":45},[39,154347,31878],{"class":56},[39,154349,152351],{"class":45},[39,154351,154352],{"class":41,"line":684},[39,154353,3587],{"class":45},[39,154355,154356],{"class":41,"line":2732},[39,154357,3458],{"emptyLinePlaceholder":1145},[39,154359,154360,154362],{"class":41,"line":2737},[39,154361,151959],{"class":3021},[39,154363,151962],{"class":56},[39,154365,154366,154368,154370],{"class":41,"line":2751},[39,154367,31856],{"class":49},[39,154369,152372],{"class":3021},[39,154371,152375],{"class":45},[39,154373,154374,154376,154378],{"class":41,"line":2756},[39,154375,15808],{"class":49},[39,154377,151979],{"class":56},[39,154379,152384],{"class":45},[39,154381,154382,154384,154386],{"class":41,"line":2785},[39,154383,152389],{"class":45},[39,154385,152392],{"class":1319},[39,154387,88890],{"class":45},[39,154389,154390,154392,154394],{"class":41,"line":2790},[39,154391,152389],{"class":45},[39,154393,63733],{"class":1319},[39,154395,88890],{"class":45},[39,154397,154398,154400,154402],{"class":41,"line":2807},[39,154399,152389],{"class":45},[39,154401,70178],{"class":1319},[39,154403,88890],{"class":45},[39,154405,154406,154408,154410],{"class":41,"line":2812},[39,154407,152389],{"class":45},[39,154409,152417],{"class":1319},[39,154411,88890],{"class":45},[39,154413,154414],{"class":41,"line":2817},[39,154415,39181],{"class":45},[19,154417,154418],{},"管理器示意：",[29,154420,154422],{"className":31,"code":154421,"language":33,"meta":34,"style":34},"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",[36,154423,154424,154433,154441,154452,154456,154466,154479,154490,154497,154503,154507,154516,154525,154531,154538],{"__ignoreMap":34},[39,154425,154426,154428,154431],{"class":41,"line":42},[39,154427,15750],{"class":49},[39,154429,154430],{"class":3021}," StudentManager",[39,154432,4797],{"class":45},[39,154434,154435,154437,154439],{"class":41,"line":74},[39,154436,31856],{"class":49},[39,154438,31859],{"class":56},[39,154440,31862],{"class":45},[39,154442,154443,154445,154448,154450],{"class":41,"line":99},[39,154444,31900],{"class":56},[39,154446,154447],{"class":45},".students ",[39,154449,50],{"class":49},[39,154451,52892],{"class":45},[39,154453,154454],{"class":41,"line":106},[39,154455,3458],{"emptyLinePlaceholder":1145},[39,154457,154458,154460,154463],{"class":41,"line":112},[39,154459,31856],{"class":49},[39,154461,154462],{"class":3021}," find_by_id",[39,154464,154465],{"class":45},"(self, student_id):\n",[39,154467,154468,154470,154472,154474,154476],{"class":41,"line":118},[39,154469,4461],{"class":49},[39,154471,153082],{"class":45},[39,154473,27100],{"class":49},[39,154475,39928],{"class":56},[39,154477,154478],{"class":45},".students:\n",[39,154480,154481,154483,154486,154488],{"class":41,"line":413},[39,154482,5700],{"class":49},[39,154484,154485],{"class":45}," student.student_id ",[39,154487,4007],{"class":49},[39,154489,153103],{"class":45},[39,154491,154492,154495],{"class":41,"line":419},[39,154493,154494],{"class":49},"                return",[39,154496,153110],{"class":45},[39,154498,154499,154501],{"class":41,"line":425},[39,154500,15808],{"class":49},[39,154502,153117],{"class":56},[39,154504,154505],{"class":41,"line":443},[39,154506,3458],{"emptyLinePlaceholder":1145},[39,154508,154509,154511,154513],{"class":41,"line":449},[39,154510,31856],{"class":49},[39,154512,6266],{"class":3021},[39,154514,154515],{"class":45},"(self, student):\n",[39,154517,154518,154520,154522],{"class":41,"line":455},[39,154519,3555],{"class":49},[39,154521,39928],{"class":56},[39,154523,154524],{"class":45},".find_by_id(student.student_id):\n",[39,154526,154527,154529],{"class":41,"line":461},[39,154528,16788],{"class":49},[39,154530,126752],{"class":56},[39,154532,154533,154535],{"class":41,"line":475},[39,154534,31900],{"class":56},[39,154536,154537],{"class":45},".students.append(student)\n",[39,154539,154540,154542],{"class":41,"line":665},[39,154541,15808],{"class":49},[39,154543,154544],{"class":56}," True\n",[19,154546,154547],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154549,154551],{"id":154550},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[1188,154553,154555],{"id":154554},"_1251-数据结构","12.5.1 数据结构",[29,154557,154559],{"className":31,"code":154558,"language":33,"meta":34,"style":34},"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",[36,154560,154561,154569,154600,154630,154659,154688],{"__ignoreMap":34},[39,154562,154563,154565,154567],{"class":41,"line":42},[39,154564,149410],{"class":45},[39,154566,50],{"class":49},[39,154568,56501],{"class":45},[39,154570,154571,154573,154575,154577,154579,154581,154584,154586,154589,154591,154593,154595,154598],{"class":41,"line":74},[39,154572,149330],{"class":45},[39,154574,148942],{"class":1319},[39,154576,52491],{"class":45},[39,154578,149553],{"class":1319},[39,154580,13491],{"class":45},[39,154582,154583],{"class":1319},"\"category\"",[39,154585,52491],{"class":45},[39,154587,154588],{"class":1319},"\"手机\"",[39,154590,13491],{"class":45},[39,154592,85138],{"class":1319},[39,154594,52491],{"class":45},[39,154596,154597],{"class":56},"12000",[39,154599,5987],{"class":45},[39,154601,154602,154604,154606,154608,154610,154612,154614,154616,154619,154621,154623,154625,154628],{"class":41,"line":99},[39,154603,149330],{"class":45},[39,154605,148942],{"class":1319},[39,154607,52491],{"class":45},[39,154609,149553],{"class":1319},[39,154611,13491],{"class":45},[39,154613,154583],{"class":1319},[39,154615,52491],{"class":45},[39,154617,154618],{"class":1319},"\"电脑\"",[39,154620,13491],{"class":45},[39,154622,85138],{"class":1319},[39,154624,52491],{"class":45},[39,154626,154627],{"class":56},"18000",[39,154629,5987],{"class":45},[39,154631,154632,154634,154636,154638,154640,154642,154644,154646,154648,154650,154652,154654,154657],{"class":41,"line":106},[39,154633,149330],{"class":45},[39,154635,148942],{"class":1319},[39,154637,52491],{"class":45},[39,154639,149574],{"class":1319},[39,154641,13491],{"class":45},[39,154643,154583],{"class":1319},[39,154645,52491],{"class":45},[39,154647,154588],{"class":1319},[39,154649,13491],{"class":45},[39,154651,85138],{"class":1319},[39,154653,52491],{"class":45},[39,154655,154656],{"class":56},"15000",[39,154658,5987],{"class":45},[39,154660,154661,154663,154665,154667,154669,154671,154673,154675,154677,154679,154681,154683,154686],{"class":41,"line":112},[39,154662,149330],{"class":45},[39,154664,148942],{"class":1319},[39,154666,52491],{"class":45},[39,154668,149574],{"class":1319},[39,154670,13491],{"class":45},[39,154672,154583],{"class":1319},[39,154674,52491],{"class":45},[39,154676,154618],{"class":1319},[39,154678,13491],{"class":45},[39,154680,85138],{"class":1319},[39,154682,52491],{"class":45},[39,154684,154685],{"class":56},"16000",[39,154687,5987],{"class":45},[39,154689,154690],{"class":41,"line":118},[39,154691,34301],{"class":45},[1188,154693,154695],{"id":154694},"_1252-按日期统计","12.5.2 按日期统计",[29,154697,154699],{"className":31,"code":154698,"language":33,"meta":34,"style":34},"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",[36,154700,154701,154710,154714,154725,154739,154752,154771,154775],{"__ignoreMap":34},[39,154702,154703,154706,154708],{"class":41,"line":42},[39,154704,154705],{"class":45},"daily_total ",[39,154707,50],{"class":49},[39,154709,88922],{"class":45},[39,154711,154712],{"class":41,"line":74},[39,154713,3458],{"emptyLinePlaceholder":1145},[39,154715,154716,154718,154720,154722],{"class":41,"line":99},[39,154717,4083],{"class":49},[39,154719,149154],{"class":45},[39,154721,27100],{"class":49},[39,154723,154724],{"class":45}," sales:\n",[39,154726,154727,154730,154732,154735,154737],{"class":41,"line":106},[39,154728,154729],{"class":45},"    date ",[39,154731,50],{"class":49},[39,154733,154734],{"class":45}," item[",[39,154736,148942],{"class":1319},[39,154738,34301],{"class":45},[39,154740,154741,154744,154746,154748,154750],{"class":41,"line":112},[39,154742,154743],{"class":45},"    amount ",[39,154745,50],{"class":49},[39,154747,154734],{"class":45},[39,154749,85138],{"class":1319},[39,154751,34301],{"class":45},[39,154753,154754,154757,154759,154762,154764,154766,154768],{"class":41,"line":118},[39,154755,154756],{"class":45},"    daily_total[date] ",[39,154758,50],{"class":49},[39,154760,154761],{"class":45}," daily_total.get(date, ",[39,154763,260],{"class":56},[39,154765,14770],{"class":45},[39,154767,1682],{"class":49},[39,154769,154770],{"class":45}," amount\n",[39,154772,154773],{"class":41,"line":413},[39,154774,3458],{"emptyLinePlaceholder":1145},[39,154776,154777,154779],{"class":41,"line":419},[39,154778,31470],{"class":56},[39,154780,154781],{"class":45},"(daily_total)\n",[1188,154783,154785],{"id":154784},"_1253-按类别统计","12.5.3 按类别统计",[29,154787,154789],{"className":31,"code":154788,"language":33,"meta":34,"style":34},"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",[36,154790,154791,154800,154804,154814,154827,154839,154857,154861],{"__ignoreMap":34},[39,154792,154793,154796,154798],{"class":41,"line":42},[39,154794,154795],{"class":45},"category_total ",[39,154797,50],{"class":49},[39,154799,88922],{"class":45},[39,154801,154802],{"class":41,"line":74},[39,154803,3458],{"emptyLinePlaceholder":1145},[39,154805,154806,154808,154810,154812],{"class":41,"line":99},[39,154807,4083],{"class":49},[39,154809,149154],{"class":45},[39,154811,27100],{"class":49},[39,154813,154724],{"class":45},[39,154815,154816,154819,154821,154823,154825],{"class":41,"line":106},[39,154817,154818],{"class":45},"    category ",[39,154820,50],{"class":49},[39,154822,154734],{"class":45},[39,154824,154583],{"class":1319},[39,154826,34301],{"class":45},[39,154828,154829,154831,154833,154835,154837],{"class":41,"line":112},[39,154830,154743],{"class":45},[39,154832,50],{"class":49},[39,154834,154734],{"class":45},[39,154836,85138],{"class":1319},[39,154838,34301],{"class":45},[39,154840,154841,154844,154846,154849,154851,154853,154855],{"class":41,"line":118},[39,154842,154843],{"class":45},"    category_total[category] ",[39,154845,50],{"class":49},[39,154847,154848],{"class":45}," category_total.get(category, ",[39,154850,260],{"class":56},[39,154852,14770],{"class":45},[39,154854,1682],{"class":49},[39,154856,154770],{"class":45},[39,154858,154859],{"class":41,"line":413},[39,154860,3458],{"emptyLinePlaceholder":1145},[39,154862,154863,154865],{"class":41,"line":419},[39,154864,31470],{"class":56},[39,154866,154867],{"class":45},"(category_total)\n",[1188,154869,154871],{"id":154870},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[29,154873,154875],{"className":31,"code":154874,"language":33,"meta":34,"style":34},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[36,154876,154877,154902],{"__ignoreMap":34},[39,154878,154879,154882,154884,154886,154889,154892,154895,154898,154900],{"class":41,"line":42},[39,154880,154881],{"class":45},"top_date, top_amount ",[39,154883,50],{"class":49},[39,154885,7007],{"class":56},[39,154887,154888],{"class":45},"(daily_total.items(), ",[39,154890,154891],{"class":254},"key",[39,154893,154894],{"class":49},"=lambda",[39,154896,154897],{"class":45}," item: item[",[39,154899,57],{"class":56},[39,154901,71],{"class":45},[39,154903,154904,154906],{"class":41,"line":74},[39,154905,31470],{"class":56},[39,154907,154908],{"class":45},"(top_date, top_amount)\n",[14,154910,154912],{"id":154911},"_126-绘制柱状图","12.6 绘制柱状图",[29,154914,154916],{"className":31,"code":154915,"language":33,"meta":34,"style":34},"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",[36,154917,154918,154932,154943,154947,154955,154967,154979,154990,154994,154998,155008,155019,155033,155038,155055,155072,155088,155092],{"__ignoreMap":34},[39,154919,154920,154922,154924,154926,154928,154930],{"class":41,"line":42},[39,154921,31792],{"class":49},[39,154923,148324],{"class":45},[39,154925,31447],{"class":49},[39,154927,148329],{"class":45},[39,154929,32438],{"class":49},[39,154931,148334],{"class":45},[39,154933,154934,154936,154938,154940],{"class":41,"line":74},[39,154935,31792],{"class":49},[39,154937,148183],{"class":45},[39,154939,31447],{"class":49},[39,154941,154942],{"class":45}," Bar\n",[39,154944,154945],{"class":41,"line":99},[39,154946,3458],{"emptyLinePlaceholder":1145},[39,154948,154949,154951,154953],{"class":41,"line":106},[39,154950,154795],{"class":45},[39,154952,50],{"class":49},[39,154954,16628],{"class":45},[39,154956,154957,154960,154962,154965],{"class":41,"line":112},[39,154958,154959],{"class":1319},"    \"手机\"",[39,154961,52491],{"class":45},[39,154963,154964],{"class":56},"27000",[39,154966,32521],{"class":45},[39,154968,154969,154972,154974,154977],{"class":41,"line":118},[39,154970,154971],{"class":1319},"    \"电脑\"",[39,154973,52491],{"class":45},[39,154975,154976],{"class":56},"34000",[39,154978,32521],{"class":45},[39,154980,154981,154984,154986,154988],{"class":41,"line":413},[39,154982,154983],{"class":1319},"    \"耳机\"",[39,154985,52491],{"class":45},[39,154987,125344],{"class":56},[39,154989,32521],{"class":45},[39,154991,154992],{"class":41,"line":419},[39,154993,2630],{"class":45},[39,154995,154996],{"class":41,"line":425},[39,154997,3458],{"emptyLinePlaceholder":1145},[39,154999,155000,155003,155005],{"class":41,"line":443},[39,155001,155002],{"class":45},"bar ",[39,155004,50],{"class":49},[39,155006,155007],{"class":45}," Bar()\n",[39,155009,155010,155013,155016],{"class":41,"line":449},[39,155011,155012],{"class":45},"bar.add_xaxis(",[39,155014,155015],{"class":56},"list",[39,155017,155018],{"class":45},"(category_total.keys()))\n",[39,155020,155021,155024,155026,155028,155030],{"class":41,"line":455},[39,155022,155023],{"class":45},"bar.add_yaxis(",[39,155025,148240],{"class":1319},[39,155027,13491],{"class":45},[39,155029,155015],{"class":56},[39,155031,155032],{"class":45},"(category_total.values()))\n",[39,155034,155035],{"class":41,"line":461},[39,155036,155037],{"class":45},"bar.set_global_opts(\n",[39,155039,155040,155042,155044,155046,155048,155050,155053],{"class":41,"line":475},[39,155041,148418],{"class":254},[39,155043,50],{"class":49},[39,155045,148423],{"class":45},[39,155047,52461],{"class":254},[39,155049,50],{"class":49},[39,155051,155052],{"class":1319},"\"品类销售额\"",[39,155054,39102],{"class":45},[39,155056,155057,155059,155061,155063,155065,155067,155070],{"class":41,"line":665},[39,155058,148437],{"class":254},[39,155060,50],{"class":49},[39,155062,148442],{"class":45},[39,155064,80864],{"class":254},[39,155066,50],{"class":49},[39,155068,155069],{"class":1319},"\"品类\"",[39,155071,39102],{"class":45},[39,155073,155074,155076,155078,155080,155082,155084,155086],{"class":41,"line":671},[39,155075,148456],{"class":254},[39,155077,50],{"class":49},[39,155079,148442],{"class":45},[39,155081,80864],{"class":254},[39,155083,50],{"class":49},[39,155085,148240],{"class":1319},[39,155087,39102],{"class":45},[39,155089,155090],{"class":41,"line":684},[39,155091,209],{"class":45},[39,155093,155094,155097,155100],{"class":41,"line":2732},[39,155095,155096],{"class":45},"bar.render(",[39,155098,155099],{"class":1319},"\"category_sales.html\"",[39,155101,209],{"class":45},[14,155103,155105],{"id":155104},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155107,155108],{},"时间线适合展示不同日期、月份、年份的数据变化。",[29,155110,155112],{"className":31,"code":155111,"language":33,"meta":34,"style":34},"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",[36,155113,155114,155128,155139,155143,155151,155175,155198,155223,155227,155231,155241,155245,155256,155265,155275,155289,155320,155325,155329],{"__ignoreMap":34},[39,155115,155116,155118,155120,155122,155124,155126],{"class":41,"line":42},[39,155117,31792],{"class":49},[39,155119,148324],{"class":45},[39,155121,31447],{"class":49},[39,155123,148329],{"class":45},[39,155125,32438],{"class":49},[39,155127,148334],{"class":45},[39,155129,155130,155132,155134,155136],{"class":41,"line":74},[39,155131,31792],{"class":49},[39,155133,148183],{"class":45},[39,155135,31447],{"class":49},[39,155137,155138],{"class":45}," Bar, Timeline\n",[39,155140,155141],{"class":41,"line":99},[39,155142,3458],{"emptyLinePlaceholder":1145},[39,155144,155145,155147,155149],{"class":41,"line":106},[39,155146,102603],{"class":45},[39,155148,50],{"class":49},[39,155150,16628],{"class":45},[39,155152,155153,155156,155159,155161,155163,155165,155167,155169,155171,155173],{"class":41,"line":112},[39,155154,155155],{"class":1319},"    \"2024-10-01\"",[39,155157,155158],{"class":45},": {",[39,155160,154588],{"class":1319},[39,155162,52491],{"class":45},[39,155164,154597],{"class":56},[39,155166,13491],{"class":45},[39,155168,154618],{"class":1319},[39,155170,52491],{"class":45},[39,155172,154627],{"class":56},[39,155174,5987],{"class":45},[39,155176,155177,155180,155182,155184,155186,155188,155190,155192,155194,155196],{"class":41,"line":118},[39,155178,155179],{"class":1319},"    \"2024-10-02\"",[39,155181,155158],{"class":45},[39,155183,154588],{"class":1319},[39,155185,52491],{"class":45},[39,155187,154656],{"class":56},[39,155189,13491],{"class":45},[39,155191,154618],{"class":1319},[39,155193,52491],{"class":45},[39,155195,154685],{"class":56},[39,155197,5987],{"class":45},[39,155199,155200,155203,155205,155207,155209,155212,155214,155216,155218,155221],{"class":41,"line":413},[39,155201,155202],{"class":1319},"    \"2024-10-03\"",[39,155204,155158],{"class":45},[39,155206,154588],{"class":1319},[39,155208,52491],{"class":45},[39,155210,155211],{"class":56},"17000",[39,155213,13491],{"class":45},[39,155215,154618],{"class":1319},[39,155217,52491],{"class":45},[39,155219,155220],{"class":56},"19000",[39,155222,5987],{"class":45},[39,155224,155225],{"class":41,"line":419},[39,155226,2630],{"class":45},[39,155228,155229],{"class":41,"line":425},[39,155230,3458],{"emptyLinePlaceholder":1145},[39,155232,155233,155236,155238],{"class":41,"line":443},[39,155234,155235],{"class":45},"timeline ",[39,155237,50],{"class":49},[39,155239,155240],{"class":45}," Timeline()\n",[39,155242,155243],{"class":41,"line":449},[39,155244,3458],{"emptyLinePlaceholder":1145},[39,155246,155247,155249,155252,155254],{"class":41,"line":455},[39,155248,4083],{"class":49},[39,155250,155251],{"class":45}," date, category_data ",[39,155253,27100],{"class":49},[39,155255,150093],{"class":45},[39,155257,155258,155261,155263],{"class":41,"line":461},[39,155259,155260],{"class":45},"    bar ",[39,155262,50],{"class":49},[39,155264,155007],{"class":45},[39,155266,155267,155270,155272],{"class":41,"line":475},[39,155268,155269],{"class":45},"    bar.add_xaxis(",[39,155271,155015],{"class":56},[39,155273,155274],{"class":45},"(category_data.keys()))\n",[39,155276,155277,155280,155282,155284,155286],{"class":41,"line":665},[39,155278,155279],{"class":45},"    bar.add_yaxis(",[39,155281,148240],{"class":1319},[39,155283,13491],{"class":45},[39,155285,155015],{"class":56},[39,155287,155288],{"class":45},"(category_data.values()))\n",[39,155290,155291,155294,155297,155299,155301,155303,155305,155307,155309,155311,155313,155315,155318],{"class":41,"line":671},[39,155292,155293],{"class":45},"    bar.set_global_opts(",[39,155295,155296],{"class":254},"title_opts",[39,155298,50],{"class":49},[39,155300,148423],{"class":45},[39,155302,52461],{"class":254},[39,155304,50],{"class":49},[39,155306,1270],{"class":49},[39,155308,1462],{"class":1319},[39,155310,2094],{"class":56},[39,155312,74980],{"class":45},[39,155314,2144],{"class":56},[39,155316,155317],{"class":1319},"销售额\"",[39,155319,31552],{"class":45},[39,155321,155322],{"class":41,"line":684},[39,155323,155324],{"class":45},"    timeline.add(bar, date)\n",[39,155326,155327],{"class":41,"line":2732},[39,155328,3458],{"emptyLinePlaceholder":1145},[39,155330,155331,155334,155337],{"class":41,"line":2737},[39,155332,155333],{"class":45},"timeline.render(",[39,155335,155336],{"class":1319},"\"timeline_sales.html\"",[39,155338,209],{"class":45},[14,155340,155342],{"id":155341},"_128-绘制地图","12.8 绘制地图",[19,155344,155345],{},"地图适合展示地区数据。",[29,155347,155349],{"className":31,"code":155348,"language":33,"meta":34,"style":34},"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",[36,155350,155351,155365,155376,155380,155388,155401,155413,155426,155439,155443,155447,155457,155472,155477,155494,155513,155517],{"__ignoreMap":34},[39,155352,155353,155355,155357,155359,155361,155363],{"class":41,"line":42},[39,155354,31792],{"class":49},[39,155356,148324],{"class":45},[39,155358,31447],{"class":49},[39,155360,148329],{"class":45},[39,155362,32438],{"class":49},[39,155364,148334],{"class":45},[39,155366,155367,155369,155371,155373],{"class":41,"line":74},[39,155368,31792],{"class":49},[39,155370,148183],{"class":45},[39,155372,31447],{"class":49},[39,155374,155375],{"class":45}," Map\n",[39,155377,155378],{"class":41,"line":99},[39,155379,3458],{"emptyLinePlaceholder":1145},[39,155381,155382,155384,155386],{"class":41,"line":106},[39,155383,102603],{"class":45},[39,155385,50],{"class":49},[39,155387,56501],{"class":45},[39,155389,155390,155393,155395,155397,155399],{"class":41,"line":112},[39,155391,155392],{"class":45},"    (",[39,155394,70323],{"class":1319},[39,155396,13491],{"class":45},[39,155398,2015],{"class":56},[39,155400,39102],{"class":45},[39,155402,155403,155405,155407,155409,155411],{"class":41,"line":118},[39,155404,155392],{"class":45},[39,155406,70343],{"class":1319},[39,155408,13491],{"class":45},[39,155410,148257],{"class":56},[39,155412,39102],{"class":45},[39,155414,155415,155417,155420,155422,155424],{"class":41,"line":413},[39,155416,155392],{"class":45},[39,155418,155419],{"class":1319},"\"广东\"",[39,155421,13491],{"class":45},[39,155423,2780],{"class":56},[39,155425,39102],{"class":45},[39,155427,155428,155430,155433,155435,155437],{"class":41,"line":419},[39,155429,155392],{"class":45},[39,155431,155432],{"class":1319},"\"浙江\"",[39,155434,13491],{"class":45},[39,155436,148262],{"class":56},[39,155438,39102],{"class":45},[39,155440,155441],{"class":41,"line":425},[39,155442,34301],{"class":45},[39,155444,155445],{"class":41,"line":443},[39,155446,3458],{"emptyLinePlaceholder":1145},[39,155448,155449,155452,155454],{"class":41,"line":449},[39,155450,155451],{"class":45},"map_chart ",[39,155453,50],{"class":49},[39,155455,155456],{"class":45}," Map()\n",[39,155458,155459,155462,155464,155467,155470],{"class":41,"line":455},[39,155460,155461],{"class":45},"map_chart.add(",[39,155463,148240],{"class":1319},[39,155465,155466],{"class":45},", data, ",[39,155468,155469],{"class":1319},"\"china\"",[39,155471,209],{"class":45},[39,155473,155474],{"class":41,"line":461},[39,155475,155476],{"class":45},"map_chart.set_global_opts(\n",[39,155478,155479,155481,155483,155485,155487,155489,155492],{"class":41,"line":475},[39,155480,148418],{"class":254},[39,155482,50],{"class":49},[39,155484,148423],{"class":45},[39,155486,52461],{"class":254},[39,155488,50],{"class":49},[39,155490,155491],{"class":1319},"\"地区销售额\"",[39,155493,39102],{"class":45},[39,155495,155496,155499,155501,155504,155507,155509,155511],{"class":41,"line":665},[39,155497,155498],{"class":254},"    visualmap_opts",[39,155500,50],{"class":49},[39,155502,155503],{"class":45},"opts.VisualMapOpts(",[39,155505,155506],{"class":254},"max_",[39,155508,50],{"class":49},[39,155510,2780],{"class":56},[39,155512,39102],{"class":45},[39,155514,155515],{"class":41,"line":671},[39,155516,209],{"class":45},[39,155518,155519,155522,155525],{"class":41,"line":684},[39,155520,155521],{"class":45},"map_chart.render(",[39,155523,155524],{"class":1319},"\"map_sales.html\"",[39,155526,209],{"class":45},[19,155528,155529],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155531,155533],{"id":155532},"_129-项目拆分建议","12.9 项目拆分建议",[19,155535,155536],{},"当代码超过一个文件时，可以这样组织：",[29,155538,155541],{"className":155539,"code":155540,"language":6244,"meta":34},[6242],"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",[36,155542,155540],{"__ignoreMap":34},[19,155544,155545],{},"职责：",[1171,155547,155548,155554,155560,155566],{},[1174,155549,155550,155553],{},[36,155551,155552],{},"main.py","：程序入口。",[1174,155555,155556,155559],{},[36,155557,155558],{},"file_utils.py","：读写 JSON。",[1174,155561,155562,155565],{},[36,155563,155564],{},"sales_service.py","：统计销售数据。",[1174,155567,155568,155571],{},[36,155569,155570],{},"chart_builder.py","：生成图表。",[14,155573,155575],{"id":155574},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155577,155578],{},"语法基础：",[1171,155580,155581,155584,155587,155590],{},[1174,155582,155583],{},"会写变量、注释、输入输出。",[1174,155585,155586],{},"会使用 int、float、str、bool。",[1174,155588,155589],{},"会做类型转换。",[1174,155591,155592],{},"会使用 f-string 格式化输出。",[19,155594,155595],{},"流程控制：",[1171,155597,155598,155604,155610,155618],{},[1174,155599,155600,155601,29442],{},"会写 ",[36,155602,155603],{},"if elif else",[1174,155605,155600,155606,101963,155608,29442],{},[36,155607,109608],{},[36,155609,4083],{},[1174,155611,155612,155613,101963,155615,29442],{},"理解 ",[36,155614,3111],{},[36,155616,155617],{},"continue",[1174,155619,155620],{},"能写嵌套循环。",[19,155622,155623],{},"函数：",[1171,155625,155626,155629,155632,155635],{},[1174,155627,155628],{},"会定义和调用函数。",[1174,155630,155631],{},"理解参数和返回值。",[1174,155633,155634],{},"知道局部变量和全局变量。",[1174,155636,155637],{},"会使用默认参数、关键字参数、不定长参数。",[19,155639,155640],{},"容器：",[1171,155642,155643,155646,155649,155652,155655],{},[1174,155644,155645],{},"会使用列表增删改查。",[1174,155647,155648],{},"会遍历列表、字典。",[1174,155650,155651],{},"会使用切片。",[1174,155653,155654],{},"会用集合去重。",[1174,155656,155657],{},"会处理列表嵌套字典。",[19,155659,155660],{},"文件和模块：",[1171,155662,155663,155666,155669,155672,155675],{},[1174,155664,155665],{},"会读写文本文件。",[1174,155667,155668],{},"会读写 JSON。",[1174,155670,155671],{},"会捕获常见异常。",[1174,155673,155674],{},"会导入模块和第三方包。",[1174,155676,155677],{},"会创建简单包结构。",[19,155679,155680],{},"项目能力：",[1171,155682,155683,155686,155689,155692,155695],{},[1174,155684,155685],{},"能把代码拆成函数。",[1174,155687,155688],{},"能把数据保存到文件。",[1174,155690,155691],{},"能处理用户输入错误。",[1174,155693,155694],{},"能写一个完整菜单程序。",[1174,155696,155697],{},"能用 pyecharts 生成图表。",[14,155699,155701],{"id":155700},"_1211-推荐练习顺序","12.11 推荐练习顺序",[1171,155703,155704,155707,155710,155713,155716,155719,155722,155725],{},[1174,155705,155706],{},"猜数字游戏。",[1174,155708,155709],{},"ATM 菜单程序。",[1174,155711,155712],{},"学生成绩统计。",[1174,155714,155715],{},"学生管理系统函数版。",[1174,155717,155718],{},"学生管理系统文件持久化版。",[1174,155720,155721],{},"学生管理系统面向对象版。",[1174,155723,155724],{},"销售数据统计。",[1174,155726,155727],{},"销售数据可视化。",[14,155729,155731],{"id":155730},"_1212-常见学习误区","12.12 常见学习误区",[1171,155733,155734,155737,155740,155743,155746,155749,155752],{},[1174,155735,155736],{},"只看视频不敲代码。",[1174,155738,155739],{},"一报错就复制错误去搜，不先读报错位置。",[1174,155741,155742],{},"变量名随便写，后续自己看不懂。",[1174,155744,155745],{},"所有代码都写在一个文件一个函数里。",[1174,155747,155748],{},"不保存练习代码，复习时没有材料。",[1174,155750,155751],{},"还没掌握列表字典就急着学框架。",[1174,155753,155754],{},"不会读官方文档，只依赖教程。",[14,155756,155758],{"id":155757},"_1213-如何读报错","12.13 如何读报错",[19,155760,155761],{},"报错通常从下往上看最后几行。",[19,155763,16191],{},[29,155765,155768],{"className":155766,"code":155767,"language":6244,"meta":34},[6242],"ValueError: invalid literal for int() with base 10: 'abc'\n",[36,155769,155767],{"__ignoreMap":34},[19,155771,25656],{},[1171,155773,155774,155780,155790],{},[1174,155775,155776,155777,29442],{},"异常类型是 ",[36,155778,155779],{},"ValueError",[1174,155781,108290,155782,155785,155786,155789],{},[36,155783,155784],{},"int()"," 无法把 ",[36,155787,155788],{},"'abc'"," 转成整数。",[1174,155791,155792],{},"应该检查输入内容或增加异常处理。",[19,155794,155795],{},"再看文件名和行号：",[29,155797,155800],{"className":155798,"code":155799,"language":6244,"meta":34},[6242],"File \"main.py\", line 10, in \u003Cmodule>\n",[36,155801,155799],{"__ignoreMap":34},[19,155803,155804,155805,155807],{},"表示错误发生在 ",[36,155806,155552],{}," 第 10 行。",[14,155809,155811],{"id":155810},"_1214-后续学习方向","12.14 后续学习方向",[19,155813,155814],{},"Python 基础完成后，可以按兴趣选择方向：",[1171,155816,155817,155829,155838,155850,155861,155870,155880],{},[1174,155818,155819,155820,1425,155823,1425,155826,29442],{},"自动化办公：",[36,155821,155822],{},"openpyxl",[36,155824,155825],{},"python-docx",[36,155827,155828],{},"pdfplumber",[1174,155830,155831,155832,1425,155834,1425,155836,29442],{},"数据分析：",[36,155833,101571],{},[36,155835,147130],{},[36,155837,147138],{},[1174,155839,155840,155841,1425,155844,1425,155847,29442],{},"Web 后端：",[36,155842,155843],{},"Flask",[36,155845,155846],{},"FastAPI",[36,155848,155849],{},"Django",[1174,155851,155852,155853,1425,155855,1425,155858,29442],{},"爬虫：",[36,155854,147115],{},[36,155856,155857],{},"BeautifulSoup",[36,155859,155860],{},"Scrapy",[1174,155862,155863,155864,1425,155866,155869],{},"测试开发：",[36,155865,147162],{},[36,155867,155868],{},"selenium","、接口测试。",[1174,155871,155872,155873,1425,155875,1425,155877,29442],{},"人工智能：",[36,155874,101571],{},[36,155876,147130],{},[36,155878,155879],{},"pytorch",[1174,155881,155882,155883,1425,155885,1425,155888,29442],{},"运维脚本：",[36,155884,146731],{},[36,155886,155887],{},"subprocess",[36,155889,155890],{},"paramiko",[19,155892,155893],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155895,155897],{"id":155896},"_1215-结课练习","12.15 结课练习",[1171,155899,155900,155903,155906,155909,155912,155915,155918,155921],{},[1174,155901,155902],{},"完成函数版学生管理系统。",[1174,155904,155905],{},"给学生管理系统增加 JSON 持久化。",[1174,155907,155908],{},"给学生管理系统增加异常处理。",[1174,155910,155911],{},"把学生管理系统改成面向对象版。",[1174,155913,155914],{},"使用 pyecharts 绘制学生成绩柱状图。",[1174,155916,155917],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[1174,155919,155920],{},"按品类统计销售额并绘制柱状图。",[1174,155922,155923],{},"写一份自己的 Python 学习路线图。",[1133,155925,155926],{},"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":34,"searchDepth":74,"depth":74,"links":155928},[155929,155930,155933,155934,155935,155941,155942,155943,155944,155945,155946,155947,155948,155949,155950],{"id":152645,"depth":74,"text":152646},{"id":152695,"depth":74,"text":152696,"children":155931},[155932],{"id":152699,"depth":99,"text":152700},{"id":152738,"depth":74,"text":152739},{"id":154212,"depth":74,"text":154213},{"id":154550,"depth":74,"text":154551,"children":155936},[155937,155938,155939,155940],{"id":154554,"depth":99,"text":154555},{"id":154694,"depth":99,"text":154695},{"id":154784,"depth":99,"text":154785},{"id":154870,"depth":99,"text":154871},{"id":154911,"depth":74,"text":154912},{"id":155104,"depth":74,"text":155105},{"id":155341,"depth":74,"text":155342},{"id":155532,"depth":74,"text":155533},{"id":155574,"depth":74,"text":155575},{"id":155700,"depth":74,"text":155701},{"id":155730,"depth":74,"text":155731},{"id":155757,"depth":74,"text":155758},{"id":155810,"depth":74,"text":155811},{"id":155896,"depth":74,"text":155897},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152637,"description":1142},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155957,"title":155958,"body":155959,"description":1142,"extension":1143,"meta":158428,"navigation":1145,"path":158429,"seo":158430,"stem":158431,"__hash__":158432},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155960,"toc":158403},[155961,155964,155968,155971,155974,155994,155997,156020,156023,156026,156048,156051,156073,156077,156080,156120,156123,156244,156248,156251,156291,156294,156318,156321,156325,156328,156342,156375,156378,156413,156416,156439,156442,156475,156478,156480,156486,156561,156564,156570,156587,156627,156631,156634,156680,156682,156720,156723,156758,156761,156796,156799,156831,156834,156853,156857,156861,156974,156976,157051,157055,157101,157104,157130,157139,157143,157146,157209,157217,157245,157249,157289,157354,157358,157361,157400,157403,157448,157451,157512,157516,157543,157546,157574,157577,157581,157585,157650,157653,157691,157694,157726,157730,157829,157833,157836,157909,157912,157960,157964,157970,158010,158013,158060,158063,158112,158116,158118,158132,158134,158315,158319,158346,158366,158373,158377,158394,158400],[10,155962,155958],{"id":155963},"_2-基础语法变量与字符串",[14,155965,155967],{"id":155966},"_21-注释","2.1 注释",[19,155969,155970],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155972,155973],{},"单行注释：",[29,155975,155977],{"className":31,"code":155976,"language":33,"meta":34,"style":34},"# 这是单行注释\nprint(\"hello\")\n",[36,155978,155979,155984],{"__ignoreMap":34},[39,155980,155981],{"class":41,"line":42},[39,155982,155983],{"class":102},"# 这是单行注释\n",[39,155985,155986,155988,155990,155992],{"class":41,"line":74},[39,155987,31470],{"class":56},[39,155989,1221],{"class":45},[39,155991,6900],{"class":1319},[39,155993,209],{"class":45},[19,155995,155996],{},"多行说明常用三引号：",[29,155998,156000],{"className":31,"code":155999,"language":33,"meta":34,"style":34},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[36,156001,156002,156006,156011,156016],{"__ignoreMap":34},[39,156003,156004],{"class":41,"line":42},[39,156005,96747],{"class":1319},[39,156007,156008],{"class":41,"line":74},[39,156009,156010],{"class":1319},"这是多行说明。\n",[39,156012,156013],{"class":41,"line":99},[39,156014,156015],{"class":1319},"常用于文件顶部说明、函数说明等。\n",[39,156017,156018],{"class":41,"line":106},[39,156019,96747],{"class":1319},[19,156021,156022],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156024,156025],{},"不好：",[29,156027,156029],{"className":31,"code":156028,"language":33,"meta":34,"style":34},"# age 加 1\nage = age + 1\n",[36,156030,156031,156036],{"__ignoreMap":34},[39,156032,156033],{"class":41,"line":42},[39,156034,156035],{"class":102},"# age 加 1\n",[39,156037,156038,156040,156042,156044,156046],{"class":41,"line":74},[39,156039,147491],{"class":45},[39,156041,50],{"class":49},[39,156043,16763],{"class":45},[39,156045,1682],{"class":49},[39,156047,56753],{"class":56},[19,156049,156050],{},"较好：",[29,156052,156054],{"className":31,"code":156053,"language":33,"meta":34,"style":34},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[36,156055,156056,156061],{"__ignoreMap":34},[39,156057,156058],{"class":41,"line":42},[39,156059,156060],{"class":102},"# 用户过完生日后，年龄增加一岁\n",[39,156062,156063,156065,156067,156069,156071],{"class":41,"line":74},[39,156064,147491],{"class":45},[39,156066,50],{"class":49},[39,156068,16763],{"class":45},[39,156070,1682],{"class":49},[39,156072,56753],{"class":56},[14,156074,156076],{"id":156075},"_22-字面量","2.2 字面量",[19,156078,156079],{},"字面量就是代码中直接写出来的数据。",[29,156081,156083],{"className":31,"code":156082,"language":33,"meta":34,"style":34},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[36,156084,156085,156092,156099,156106,156113],{"__ignoreMap":34},[39,156086,156087,156089],{"class":41,"line":42},[39,156088,1519],{"class":56},[39,156090,156091],{"class":102},"          # 整数\n",[39,156093,156094,156096],{"class":41,"line":74},[39,156095,1267],{"class":56},[39,156097,156098],{"class":102},"         # 小数\n",[39,156100,156101,156103],{"class":41,"line":99},[39,156102,6900],{"class":1319},[39,156104,156105],{"class":102},"      # 字符串\n",[39,156107,156108,156110],{"class":41,"line":106},[39,156109,32531],{"class":56},[39,156111,156112],{"class":102},"         # 布尔值\n",[39,156114,156115,156117],{"class":41,"line":112},[39,156116,96735],{"class":56},[39,156118,156119],{"class":102},"         # 空值\n",[19,156121,156122],{},"常见字面量类型：",[1352,156124,156125,156135],{},[1355,156126,156127],{},[1358,156128,156129,156131,156133],{},[1361,156130,24793],{},[1361,156132,28549],{},[1361,156134,26926],{},[1398,156136,156137,156148,156159,156170,156182,156194,156206,156219,156231],{},[1358,156138,156139,156141,156145],{},[1403,156140,1224],{},[1403,156142,156143],{},[36,156144,1519],{},[1403,156146,156147],{},"整数",[1358,156149,156150,156152,156156],{},[1403,156151,1259],{},[1403,156153,156154],{},[36,156155,1267],{},[1403,156157,156158],{},"浮点数",[1358,156160,156161,156163,156167],{},[1403,156162,2368],{},[1403,156164,156165],{},[36,156166,6900],{},[1403,156168,156169],{},"字符串",[1358,156171,156172,156174,156180],{},[1403,156173,2420],{},[1403,156175,156176,1425,156178],{},[36,156177,32531],{},[36,156179,35042],{},[1403,156181,67069],{},[1358,156183,156184,156187,156191],{},[1403,156185,156186],{},"NoneType",[1403,156188,156189],{},[36,156190,96735],{},[1403,156192,156193],{},"空值",[1358,156195,156196,156198,156203],{},[1403,156197,155015],{},[1403,156199,156200],{},[36,156201,156202],{},"[1, 2, 3]",[1403,156204,156205],{},"列表",[1358,156207,156208,156211,156216],{},[1403,156209,156210],{},"tuple",[1403,156212,156213],{},[36,156214,156215],{},"(1, 2, 3)",[1403,156217,156218],{},"元组",[1358,156220,156221,156223,156228],{},[1403,156222,115491],{},[1403,156224,156225],{},[36,156226,156227],{},"{\"name\": \"张三\"}",[1403,156229,156230],{},"字典",[1358,156232,156233,156236,156241],{},[1403,156234,156235],{},"set",[1403,156237,156238],{},[36,156239,156240],{},"{1, 2, 3}",[1403,156242,156243],{},"集合",[14,156245,156247],{"id":156246},"_23-变量","2.3 变量",[19,156249,156250],{},"变量是保存数据的名字。",[29,156252,156254],{"className":31,"code":156253,"language":33,"meta":34,"style":34},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[36,156255,156256,156264,156272,156282],{"__ignoreMap":34},[39,156257,156258,156260,156262],{"class":41,"line":42},[39,156259,147481],{"class":45},[39,156261,50],{"class":49},[39,156263,150298],{"class":1319},[39,156265,156266,156268,156270],{"class":41,"line":74},[39,156267,147491],{"class":45},[39,156269,50],{"class":49},[39,156271,147496],{"class":56},[39,156273,156274,156277,156279],{"class":41,"line":99},[39,156275,156276],{"class":45},"height ",[39,156278,50],{"class":49},[39,156280,156281],{"class":56}," 1.75\n",[39,156283,156284,156287,156289],{"class":41,"line":106},[39,156285,156286],{"class":45},"is_student ",[39,156288,50],{"class":49},[39,156290,154544],{"class":56},[19,156292,156293],{},"Python 的变量不需要提前声明类型：",[29,156295,156297],{"className":31,"code":156296,"language":33,"meta":34,"style":34},"score = 100\nscore = \"满分\"\n",[36,156298,156299,156309],{"__ignoreMap":34},[39,156300,156301,156304,156306],{"class":41,"line":42},[39,156302,156303],{"class":45},"score ",[39,156305,50],{"class":49},[39,156307,156308],{"class":56}," 100\n",[39,156310,156311,156313,156315],{"class":41,"line":74},[39,156312,156303],{"class":45},[39,156314,50],{"class":49},[39,156316,156317],{"class":1319}," \"满分\"\n",[19,156319,156320],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156322,156324],{"id":156323},"_24-变量命名规则","2.4 变量命名规则",[19,156326,156327],{},"硬性规则：",[1171,156329,156330,156333,156336,156339],{},[1174,156331,156332],{},"只能由字母、数字、下划线组成。",[1174,156334,156335],{},"不能以数字开头。",[1174,156337,156338],{},"不能使用 Python 关键字。",[1174,156340,156341],{},"区分大小写。",[29,156343,156345],{"className":31,"code":156344,"language":33,"meta":34,"style":34},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[36,156346,156347,156356,156365],{"__ignoreMap":34},[39,156348,156349,156352,156354],{"class":41,"line":42},[39,156350,156351],{"class":45},"user_name ",[39,156353,50],{"class":49},[39,156355,147486],{"class":1319},[39,156357,156358,156361,156363],{"class":41,"line":74},[39,156359,156360],{"class":45},"age2 ",[39,156362,50],{"class":49},[39,156364,147496],{"class":56},[39,156366,156367,156370,156372],{"class":41,"line":99},[39,156368,156369],{"class":45},"_token ",[39,156371,50],{"class":49},[39,156373,156374],{"class":1319}," \"abc\"\n",[19,156376,156377],{},"错误写法：",[29,156379,156381],{"className":31,"code":156380,"language":33,"meta":34,"style":34},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[36,156382,156383,156392,156404],{"__ignoreMap":34},[39,156384,156385,156388,156390],{"class":41,"line":42},[39,156386,156387],{"class":78457},"2age",[39,156389,14620],{"class":49},[39,156391,147496],{"class":56},[39,156393,156394,156396,156398,156400,156402],{"class":41,"line":74},[39,156395,132529],{"class":45},[39,156397,1732],{"class":49},[39,156399,147481],{"class":45},[39,156401,50],{"class":49},[39,156403,147486],{"class":1319},[39,156405,156406,156408,156410],{"class":41,"line":99},[39,156407,15750],{"class":49},[39,156409,14620],{"class":49},[39,156411,156412],{"class":1319}," \"一班\"\n",[19,156414,156415],{},"查看关键字：",[29,156417,156419],{"className":31,"code":156418,"language":33,"meta":34,"style":34},"import keyword\n\nprint(keyword.kwlist)\n",[36,156420,156421,156428,156432],{"__ignoreMap":34},[39,156422,156423,156425],{"class":41,"line":42},[39,156424,31447],{"class":49},[39,156426,156427],{"class":45}," keyword\n",[39,156429,156430],{"class":41,"line":74},[39,156431,3458],{"emptyLinePlaceholder":1145},[39,156433,156434,156436],{"class":41,"line":99},[39,156435,31470],{"class":56},[39,156437,156438],{"class":45},"(keyword.kwlist)\n",[19,156440,156441],{},"推荐命名风格：",[29,156443,156445],{"className":31,"code":156444,"language":33,"meta":34,"style":34},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[36,156446,156447,156456,156466],{"__ignoreMap":34},[39,156448,156449,156452,156454],{"class":41,"line":42},[39,156450,156451],{"class":45},"student_name ",[39,156453,50],{"class":49},[39,156455,150298],{"class":1319},[39,156457,156458,156461,156463],{"class":41,"line":74},[39,156459,156460],{"class":45},"total_price ",[39,156462,50],{"class":49},[39,156464,156465],{"class":56}," 99.8\n",[39,156467,156468,156471,156473],{"class":41,"line":99},[39,156469,156470],{"class":45},"is_finished ",[39,156472,50],{"class":49},[39,156474,126752],{"class":56},[19,156476,156477],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156479,51786],{"id":51785},[19,156481,105311,156482,156485],{},[36,156483,156484],{},"type()"," 查看数据类型：",[29,156487,156489],{"className":31,"code":156488,"language":33,"meta":34,"style":34},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[36,156490,156491,156505,156519,156533,156547],{"__ignoreMap":34},[39,156492,156493,156495,156497,156499,156501,156503],{"class":41,"line":42},[39,156494,31470],{"class":56},[39,156496,1221],{"class":45},[39,156498,104052],{"class":56},[39,156500,1221],{"class":45},[39,156502,1519],{"class":56},[39,156504,31552],{"class":45},[39,156506,156507,156509,156511,156513,156515,156517],{"class":41,"line":74},[39,156508,31470],{"class":56},[39,156510,1221],{"class":45},[39,156512,104052],{"class":56},[39,156514,1221],{"class":45},[39,156516,1267],{"class":56},[39,156518,31552],{"class":45},[39,156520,156521,156523,156525,156527,156529,156531],{"class":41,"line":99},[39,156522,31470],{"class":56},[39,156524,1221],{"class":45},[39,156526,104052],{"class":56},[39,156528,1221],{"class":45},[39,156530,6900],{"class":1319},[39,156532,31552],{"class":45},[39,156534,156535,156537,156539,156541,156543,156545],{"class":41,"line":106},[39,156536,31470],{"class":56},[39,156538,1221],{"class":45},[39,156540,104052],{"class":56},[39,156542,1221],{"class":45},[39,156544,32531],{"class":56},[39,156546,31552],{"class":45},[39,156548,156549,156551,156553,156555,156557,156559],{"class":41,"line":112},[39,156550,31470],{"class":56},[39,156552,1221],{"class":45},[39,156554,104052],{"class":56},[39,156556,1221],{"class":45},[39,156558,96735],{"class":56},[39,156560,31552],{"class":45},[19,156562,156563],{},"输出类似：",[29,156565,156568],{"className":156566,"code":156567,"language":6244,"meta":34},[6242],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[36,156569,156567],{"__ignoreMap":34},[19,156571,10081,156572,108228,156574,156576,156577,156579,156580,22556,156582,156579,156584,156586],{},[36,156573,2420],{},[36,156575,1224],{}," 的子类，",[36,156578,32531],{}," 可以当作 ",[36,156581,57],{},[36,156583,35042],{},[36,156585,260],{},"，但业务代码中不要滥用。",[29,156588,156590],{"className":31,"code":156589,"language":33,"meta":34,"style":34},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[36,156591,156592,156610],{"__ignoreMap":34},[39,156593,156594,156596,156598,156600,156602,156604,156607],{"class":41,"line":42},[39,156595,31470],{"class":56},[39,156597,1221],{"class":45},[39,156599,32531],{"class":56},[39,156601,46621],{"class":49},[39,156603,26175],{"class":56},[39,156605,156606],{"class":45},")   ",[39,156608,156609],{"class":102},"# 2\n",[39,156611,156612,156614,156616,156618,156620,156622,156624],{"class":41,"line":74},[39,156613,31470],{"class":56},[39,156615,1221],{"class":45},[39,156617,35042],{"class":56},[39,156619,46621],{"class":49},[39,156621,26175],{"class":56},[39,156623,46863],{"class":45},[39,156625,156626],{"class":102},"# 1\n",[14,156628,156630],{"id":156629},"_26-类型转换","2.6 类型转换",[19,156632,156633],{},"常用转换函数：",[29,156635,156637],{"className":31,"code":156636,"language":33,"meta":34,"style":34},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[36,156638,156639,156649,156660,156670],{"__ignoreMap":34},[39,156640,156641,156643,156645,156647],{"class":41,"line":42},[39,156642,1224],{"class":56},[39,156644,1221],{"class":45},[39,156646,55370],{"class":1319},[39,156648,209],{"class":45},[39,156650,156651,156653,156655,156658],{"class":41,"line":74},[39,156652,1259],{"class":56},[39,156654,1221],{"class":45},[39,156656,156657],{"class":1319},"\"3.14\"",[39,156659,209],{"class":45},[39,156661,156662,156664,156666,156668],{"class":41,"line":99},[39,156663,2368],{"class":56},[39,156665,1221],{"class":45},[39,156667,1519],{"class":56},[39,156669,209],{"class":45},[39,156671,156672,156674,156676,156678],{"class":41,"line":106},[39,156673,2420],{"class":56},[39,156675,1221],{"class":45},[39,156677,57],{"class":56},[39,156679,209],{"class":45},[19,156681,16191],{},[29,156683,156685],{"className":31,"code":156684,"language":33,"meta":34,"style":34},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[36,156686,156687,156696,156707],{"__ignoreMap":34},[39,156688,156689,156691,156693],{"class":41,"line":42},[39,156690,147491],{"class":45},[39,156692,50],{"class":49},[39,156694,156695],{"class":1319}," \"18\"\n",[39,156697,156698,156700,156702,156704],{"class":41,"line":74},[39,156699,147491],{"class":45},[39,156701,50],{"class":49},[39,156703,3440],{"class":56},[39,156705,156706],{"class":45},"(age)\n",[39,156708,156709,156711,156714,156716,156718],{"class":41,"line":99},[39,156710,31470],{"class":56},[39,156712,156713],{"class":45},"(age ",[39,156715,1682],{"class":49},[39,156717,26175],{"class":56},[39,156719,209],{"class":45},[19,156721,156722],{},"输入得到的内容永远是字符串：",[29,156724,156726],{"className":31,"code":156725,"language":33,"meta":34,"style":34},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[36,156727,156728,156744],{"__ignoreMap":34},[39,156729,156730,156733,156735,156737,156739,156742],{"class":41,"line":42},[39,156731,156732],{"class":45},"num ",[39,156734,50],{"class":49},[39,156736,61659],{"class":56},[39,156738,1221],{"class":45},[39,156740,156741],{"class":1319},"\"请输入数字:\"",[39,156743,209],{"class":45},[39,156745,156746,156748,156750,156752,156755],{"class":41,"line":74},[39,156747,31470],{"class":56},[39,156749,1221],{"class":45},[39,156751,104052],{"class":56},[39,156753,156754],{"class":45},"(num))  ",[39,156756,156757],{"class":102},"# str\n",[19,156759,156760],{},"如果要做数学运算，必须转换：",[29,156762,156764],{"className":31,"code":156763,"language":33,"meta":34,"style":34},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[36,156765,156766,156784],{"__ignoreMap":34},[39,156767,156768,156770,156772,156774,156776,156778,156780,156782],{"class":41,"line":42},[39,156769,156732],{"class":45},[39,156771,50],{"class":49},[39,156773,3440],{"class":56},[39,156775,1221],{"class":45},[39,156777,54875],{"class":56},[39,156779,1221],{"class":45},[39,156781,156741],{"class":1319},[39,156783,31552],{"class":45},[39,156785,156786,156788,156790,156792,156794],{"class":41,"line":74},[39,156787,31470],{"class":56},[39,156789,46674],{"class":45},[39,156791,1682],{"class":49},[39,156793,3096],{"class":56},[39,156795,209],{"class":45},[19,156797,156798],{},"常见错误：",[29,156800,156802],{"className":31,"code":156801,"language":33,"meta":34,"style":34},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[36,156803,156804,156817],{"__ignoreMap":34},[39,156805,156806,156808,156810,156812,156814],{"class":41,"line":42},[39,156807,1224],{"class":56},[39,156809,1221],{"class":45},[39,156811,156657],{"class":1319},[39,156813,156606],{"class":45},[39,156815,156816],{"class":102},"# 错误\n",[39,156818,156819,156821,156823,156826,156829],{"class":41,"line":74},[39,156820,1224],{"class":56},[39,156822,1221],{"class":45},[39,156824,156825],{"class":1319},"\"abc\"",[39,156827,156828],{"class":45},")    ",[39,156830,156816],{"class":102},[19,156832,156833],{},"正确写法：",[29,156835,156837],{"className":31,"code":156836,"language":33,"meta":34,"style":34},"num = float(\"3.14\")\n",[36,156838,156839],{"__ignoreMap":34},[39,156840,156841,156843,156845,156847,156849,156851],{"class":41,"line":42},[39,156842,156732],{"class":45},[39,156844,50],{"class":49},[39,156846,110742],{"class":56},[39,156848,1221],{"class":45},[39,156850,156657],{"class":1319},[39,156852,209],{"class":45},[14,156854,156856],{"id":156855},"_27-运算符","2.7 运算符",[1188,156858,156860],{"id":156859},"_271-算术运算符","2.7.1 算术运算符",[1352,156862,156863,156874],{},[1355,156864,156865],{},[1358,156866,156867,156870,156872],{},[1361,156868,156869],{},"运算符",[1361,156871,26926],{},[1361,156873,28549],{},[1398,156875,156876,156890,156904,156918,156932,156946,156960],{},[1358,156877,156878,156882,156885],{},[1403,156879,156880],{},[36,156881,1682],{},[1403,156883,156884],{},"加法",[1403,156886,156887],{},[36,156888,156889],{},"1 + 2",[1358,156891,156892,156896,156899],{},[1403,156893,156894],{},[36,156895,1732],{},[1403,156897,156898],{},"减法",[1403,156900,156901],{},[36,156902,156903],{},"5 - 3",[1358,156905,156906,156910,156913],{},[1403,156907,156908],{},[36,156909,1657],{},[1403,156911,156912],{},"乘法",[1403,156914,156915],{},[36,156916,156917],{},"2 * 3",[1358,156919,156920,156924,156927],{},[1403,156921,156922],{},[36,156923,1784],{},[1403,156925,156926],{},"除法，结果是浮点数",[1403,156928,156929],{},[36,156930,156931],{},"5 \u002F 2",[1358,156933,156934,156938,156941],{},[1403,156935,156936],{},[36,156937,34384],{},[1403,156939,156940],{},"整除",[1403,156942,156943],{},[36,156944,156945],{},"5 \u002F\u002F 2",[1358,156947,156948,156952,156955],{},[1403,156949,156950],{},[36,156951,1534],{},[1403,156953,156954],{},"取余",[1403,156956,156957],{},[36,156958,156959],{},"5 % 2",[1358,156961,156962,156966,156969],{},[1403,156963,156964],{},[36,156965,11717],{},[1403,156967,156968],{},"幂运算",[1403,156970,156971],{},[36,156972,156973],{},"2 ** 3",[19,156975,16191],{},[29,156977,156979],{"className":31,"code":156978,"language":33,"meta":34,"style":34},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[36,156980,156981,156999,157016,157033],{"__ignoreMap":34},[39,156982,156983,156985,156987,156989,156992,156994,156996],{"class":41,"line":42},[39,156984,31470],{"class":56},[39,156986,1221],{"class":45},[39,156988,89],{"class":56},[39,156990,156991],{"class":49}," \u002F",[39,156993,15811],{"class":56},[39,156995,156606],{"class":45},[39,156997,156998],{"class":102},"# 2.5\n",[39,157000,157001,157003,157005,157007,157010,157012,157014],{"class":41,"line":74},[39,157002,31470],{"class":56},[39,157004,1221],{"class":45},[39,157006,89],{"class":56},[39,157008,157009],{"class":49}," \u002F\u002F",[39,157011,15811],{"class":56},[39,157013,46863],{"class":45},[39,157015,156609],{"class":102},[39,157017,157018,157020,157022,157024,157027,157029,157031],{"class":41,"line":99},[39,157019,31470],{"class":56},[39,157021,1221],{"class":45},[39,157023,89],{"class":56},[39,157025,157026],{"class":49}," %",[39,157028,15811],{"class":56},[39,157030,156606],{"class":45},[39,157032,156626],{"class":102},[39,157034,157035,157037,157039,157041,157044,157046,157048],{"class":41,"line":106},[39,157036,31470],{"class":56},[39,157038,1221],{"class":45},[39,157040,63],{"class":56},[39,157042,157043],{"class":49}," **",[39,157045,79124],{"class":56},[39,157047,46863],{"class":45},[39,157049,157050],{"class":102},"# 8\n",[1188,157052,157054],{"id":157053},"_272-赋值运算符","2.7.2 赋值运算符",[29,157056,157058],{"className":31,"code":157057,"language":33,"meta":34,"style":34},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[36,157059,157060,157068,157076,157084,157092],{"__ignoreMap":34},[39,157061,157062,157064,157066],{"class":41,"line":42},[39,157063,156732],{"class":45},[39,157065,50],{"class":49},[39,157067,59482],{"class":56},[39,157069,157070,157072,157074],{"class":41,"line":74},[39,157071,156732],{"class":45},[39,157073,10533],{"class":49},[39,157075,55481],{"class":56},[39,157077,157078,157080,157082],{"class":41,"line":99},[39,157079,156732],{"class":45},[39,157081,151197],{"class":49},[39,157083,48777],{"class":56},[39,157085,157086,157088,157090],{"class":41,"line":106},[39,157087,156732],{"class":45},[39,157089,138093],{"class":49},[39,157091,120981],{"class":56},[39,157093,157094,157096,157099],{"class":41,"line":112},[39,157095,156732],{"class":45},[39,157097,157098],{"class":49},"\u002F=",[39,157100,48777],{"class":56},[19,157102,157103],{},"等价关系：",[29,157105,157107],{"className":31,"code":157106,"language":33,"meta":34,"style":34},"num += 1\nnum = num + 1\n",[36,157108,157109,157117],{"__ignoreMap":34},[39,157110,157111,157113,157115],{"class":41,"line":42},[39,157112,156732],{"class":45},[39,157114,10533],{"class":49},[39,157116,56753],{"class":56},[39,157118,157119,157121,157123,157126,157128],{"class":41,"line":74},[39,157120,156732],{"class":45},[39,157122,50],{"class":49},[39,157124,157125],{"class":45}," num ",[39,157127,1682],{"class":49},[39,157129,56753],{"class":56},[19,157131,157132,157133,101963,157136,29442],{},"Python 没有 ",[36,157134,157135],{},"num++",[36,157137,157138],{},"num--",[1188,157140,157142],{"id":157141},"_273-比较运算符","2.7.3 比较运算符",[19,157144,157145],{},"比较运算结果是布尔值。",[29,157147,157149],{"className":31,"code":157148,"language":33,"meta":34,"style":34},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[36,157150,157151,157165,157180,157194],{"__ignoreMap":34},[39,157152,157153,157155,157157,157159,157161,157163],{"class":41,"line":42},[39,157154,31470],{"class":56},[39,157156,1221],{"class":45},[39,157158,146],{"class":56},[39,157160,27279],{"class":49},[39,157162,3206],{"class":56},[39,157164,209],{"class":45},[39,157166,157167,157169,157171,157173,157176,157178],{"class":41,"line":74},[39,157168,31470],{"class":56},[39,157170,1221],{"class":45},[39,157172,146],{"class":56},[39,157174,157175],{"class":49}," >=",[39,157177,3096],{"class":56},[39,157179,209],{"class":45},[39,157181,157182,157184,157186,157188,157190,157192],{"class":41,"line":99},[39,157183,31470],{"class":56},[39,157185,1221],{"class":45},[39,157187,146],{"class":56},[39,157189,102504],{"class":49},[39,157191,3141],{"class":56},[39,157193,209],{"class":45},[39,157195,157196,157198,157200,157202,157205,157207],{"class":41,"line":106},[39,157197,31470],{"class":56},[39,157199,1221],{"class":45},[39,157201,146],{"class":56},[39,157203,157204],{"class":49}," !=",[39,157206,3141],{"class":56},[39,157208,209],{"class":45},[19,157210,157211,157212,157214,157215,29442],{},"注意：判断相等用 ",[36,157213,4007],{},"，赋值用 ",[36,157216,50],{},[29,157218,157220],{"className":31,"code":157219,"language":33,"meta":34,"style":34},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[36,157221,157222,157234],{"__ignoreMap":34},[39,157223,157224,157226,157228,157231],{"class":41,"line":42},[39,157225,147491],{"class":45},[39,157227,50],{"class":49},[39,157229,157230],{"class":56}," 18",[39,157232,157233],{"class":102},"       # 赋值\n",[39,157235,157236,157238,157240,157242],{"class":41,"line":74},[39,157237,147491],{"class":45},[39,157239,4007],{"class":49},[39,157241,157230],{"class":56},[39,157243,157244],{"class":102},"      # 判断是否相等\n",[1188,157246,157248],{"id":157247},"_274-逻辑运算符","2.7.4 逻辑运算符",[1352,157250,157251,157259],{},[1355,157252,157253],{},[1358,157254,157255,157257],{},[1361,157256,156869],{},[1361,157258,26926],{},[1398,157260,157261,157270,157279],{},[1358,157262,157263,157267],{},[1403,157264,157265],{},[36,157266,31517],{},[1403,157268,157269],{},"并且",[1358,157271,157272,157276],{},[1403,157273,157274],{},[36,157275,116035],{},[1403,157277,157278],{},"或者",[1358,157280,157281,157286],{},[1403,157282,157283],{},[36,157284,157285],{},"not",[1403,157287,157288],{},"取反",[29,157290,157292],{"className":31,"code":157291,"language":33,"meta":34,"style":34},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[36,157293,157294,157302,157311,157315,157330,157344],{"__ignoreMap":34},[39,157295,157296,157298,157300],{"class":41,"line":42},[39,157297,147491],{"class":45},[39,157299,50],{"class":49},[39,157301,89119],{"class":56},[39,157303,157304,157307,157309],{"class":41,"line":74},[39,157305,157306],{"class":45},"has_ticket ",[39,157308,50],{"class":49},[39,157310,154544],{"class":56},[39,157312,157313],{"class":41,"line":99},[39,157314,3458],{"emptyLinePlaceholder":1145},[39,157316,157317,157319,157321,157323,157325,157327],{"class":41,"line":106},[39,157318,31470],{"class":56},[39,157320,156713],{"class":45},[39,157322,2768],{"class":49},[39,157324,157230],{"class":56},[39,157326,121374],{"class":49},[39,157328,157329],{"class":45}," has_ticket)\n",[39,157331,157332,157334,157336,157338,157340,157342],{"class":41,"line":112},[39,157333,31470],{"class":56},[39,157335,156713],{"class":45},[39,157337,2108],{"class":49},[39,157339,157230],{"class":56},[39,157341,115146],{"class":49},[39,157343,157329],{"class":45},[39,157345,157346,157348,157350,157352],{"class":41,"line":118},[39,157347,31470],{"class":56},[39,157349,1221],{"class":45},[39,157351,157285],{"class":49},[39,157353,157329],{"class":45},[14,157355,157357],{"id":157356},"_28-字符串定义","2.8 字符串定义",[19,157359,157360],{},"三种常见写法：",[29,157362,157364],{"className":31,"code":157363,"language":33,"meta":34,"style":34},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[36,157365,157366,157376,157385,157395],{"__ignoreMap":34},[39,157367,157368,157371,157373],{"class":41,"line":42},[39,157369,157370],{"class":45},"name1 ",[39,157372,50],{"class":49},[39,157374,157375],{"class":1319}," '小明'\n",[39,157377,157378,157381,157383],{"class":41,"line":74},[39,157379,157380],{"class":45},"name2 ",[39,157382,50],{"class":49},[39,157384,150298],{"class":1319},[39,157386,157387,157390,157392],{"class":41,"line":99},[39,157388,157389],{"class":45},"text ",[39,157391,50],{"class":49},[39,157393,157394],{"class":1319}," \"\"\"这是多行字符串\n",[39,157396,157397],{"class":41,"line":106},[39,157398,157399],{"class":1319},"可以换行\"\"\"\n",[19,157401,157402],{},"字符串中包含引号：",[29,157404,157406],{"className":31,"code":157405,"language":33,"meta":34,"style":34},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[36,157407,157408,157418,157428],{"__ignoreMap":34},[39,157409,157410,157413,157415],{"class":41,"line":42},[39,157411,157412],{"class":45},"msg ",[39,157414,50],{"class":49},[39,157416,157417],{"class":1319}," \"他说:'你好'\"\n",[39,157419,157420,157423,157425],{"class":41,"line":74},[39,157421,157422],{"class":45},"msg2 ",[39,157424,50],{"class":49},[39,157426,157427],{"class":1319}," '他说:\"你好\"'\n",[39,157429,157430,157433,157435,157438,157441,157444,157446],{"class":41,"line":99},[39,157431,157432],{"class":45},"msg3 ",[39,157434,50],{"class":49},[39,157436,157437],{"class":1319}," \"他说:",[39,157439,157440],{"class":56},"\\\"",[39,157442,157443],{"class":1319},"你好",[39,157445,157440],{"class":56},[39,157447,26190],{"class":1319},[19,157449,157450],{},"常见转义字符：",[1352,157452,157453,157462],{},[1355,157454,157455],{},[1358,157456,157457,157460],{},[1361,157458,157459],{},"写法",[1361,157461,101645],{},[1398,157463,157464,157474,157483,157493,157502],{},[1358,157465,157466,157471],{},[1403,157467,157468],{},[36,157469,157470],{},"\\n",[1403,157472,157473],{},"换行",[1358,157475,157476,157480],{},[1403,157477,157478],{},[36,157479,2299],{},[1403,157481,157482],{},"制表符",[1358,157484,157485,157490],{},[1403,157486,157487],{},[36,157488,157489],{},"\\\\",[1403,157491,157492],{},"反斜杠",[1358,157494,157495,157499],{},[1403,157496,157497],{},[36,157498,157440],{},[1403,157500,157501],{},"双引号",[1358,157503,157504,157509],{},[1403,157505,157506],{},[36,157507,157508],{},"\\'",[1403,157510,157511],{},"单引号",[14,157513,157515],{"id":157514},"_29-字符串拼接","2.9 字符串拼接",[29,157517,157519],{"className":31,"code":157518,"language":33,"meta":34,"style":34},"name = \"小明\"\nprint(\"你好，\" + name)\n",[36,157520,157521,157529],{"__ignoreMap":34},[39,157522,157523,157525,157527],{"class":41,"line":42},[39,157524,147481],{"class":45},[39,157526,50],{"class":49},[39,157528,150298],{"class":1319},[39,157530,157531,157533,157535,157538,157540],{"class":41,"line":74},[39,157532,31470],{"class":56},[39,157534,1221],{"class":45},[39,157536,157537],{"class":1319},"\"你好，\"",[39,157539,46621],{"class":49},[39,157541,157542],{"class":45}," name)\n",[19,157544,157545],{},"字符串只能和字符串拼接：",[29,157547,157549],{"className":31,"code":157548,"language":33,"meta":34,"style":34},"age = 18\nprint(\"年龄:\" + str(age))\n",[36,157550,157551,157559],{"__ignoreMap":34},[39,157552,157553,157555,157557],{"class":41,"line":42},[39,157554,147491],{"class":45},[39,157556,50],{"class":49},[39,157558,147496],{"class":56},[39,157560,157561,157563,157565,157567,157569,157571],{"class":41,"line":74},[39,157562,31470],{"class":56},[39,157564,1221],{"class":45},[39,157566,147462],{"class":1319},[39,157568,46621],{"class":49},[39,157570,74973],{"class":56},[39,157572,157573],{"class":45},"(age))\n",[19,157575,157576],{},"更推荐使用格式化字符串。",[14,157578,157580],{"id":157579},"_210-字符串格式化","2.10 字符串格式化",[1188,157582,157584],{"id":157583},"_2101-百分号格式化","2.10.1 百分号格式化",[29,157586,157588],{"className":31,"code":157587,"language":33,"meta":34,"style":34},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[36,157589,157590,157598,157606,157615,157619],{"__ignoreMap":34},[39,157591,157592,157594,157596],{"class":41,"line":42},[39,157593,147481],{"class":45},[39,157595,50],{"class":49},[39,157597,150298],{"class":1319},[39,157599,157600,157602,157604],{"class":41,"line":74},[39,157601,147491],{"class":45},[39,157603,50],{"class":49},[39,157605,147496],{"class":56},[39,157607,157608,157610,157612],{"class":41,"line":99},[39,157609,156303],{"class":45},[39,157611,50],{"class":49},[39,157613,157614],{"class":56}," 95.5\n",[39,157616,157617],{"class":41,"line":106},[39,157618,3458],{"emptyLinePlaceholder":1145},[39,157620,157621,157623,157625,157628,157631,157634,157637,157640,157643,157645,157647],{"class":41,"line":112},[39,157622,31470],{"class":56},[39,157624,1221],{"class":45},[39,157626,157627],{"class":1319},"\"姓名:",[39,157629,157630],{"class":56},"%s",[39,157632,157633],{"class":1319}," 年龄:",[39,157635,157636],{"class":56},"%d",[39,157638,157639],{"class":1319}," 分数:",[39,157641,157642],{"class":56},"%.1f",[39,157644,1462],{"class":1319},[39,157646,157026],{"class":49},[39,157648,157649],{"class":45}," (name, age, score))\n",[19,157651,157652],{},"常用占位符：",[1352,157654,157655,157664],{},[1355,157656,157657],{},[1358,157658,157659,157662],{},[1361,157660,157661],{},"占位符",[1361,157663,26926],{},[1398,157665,157666,157674,157682],{},[1358,157667,157668,157672],{},[1403,157669,157670],{},[36,157671,157630],{},[1403,157673,156169],{},[1358,157675,157676,157680],{},[1403,157677,157678],{},[36,157679,157636],{},[1403,157681,156147],{},[1358,157683,157684,157689],{},[1403,157685,157686],{},[36,157687,157688],{},"%f",[1403,157690,156158],{},[19,157692,157693],{},"精度控制：",[29,157695,157697],{"className":31,"code":157696,"language":33,"meta":34,"style":34},"price = 12.3456\nprint(\"%.2f\" % price)\n",[36,157698,157699,157708],{"__ignoreMap":34},[39,157700,157701,157703,157705],{"class":41,"line":42},[39,157702,147626],{"class":45},[39,157704,50],{"class":49},[39,157706,157707],{"class":56}," 12.3456\n",[39,157709,157710,157712,157714,157716,157719,157721,157723],{"class":41,"line":74},[39,157711,31470],{"class":56},[39,157713,1221],{"class":45},[39,157715,1462],{"class":1319},[39,157717,157718],{"class":56},"%.2f",[39,157720,1462],{"class":1319},[39,157722,157026],{"class":49},[39,157724,157725],{"class":45}," price)\n",[1188,157727,157729],{"id":157728},"_2102-format方法","2.10.2 format方法",[29,157731,157733],{"className":31,"code":157732,"language":33,"meta":34,"style":34},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[36,157734,157735,157743,157751,157755,157774,157794],{"__ignoreMap":34},[39,157736,157737,157739,157741],{"class":41,"line":42},[39,157738,147481],{"class":45},[39,157740,50],{"class":49},[39,157742,150298],{"class":1319},[39,157744,157745,157747,157749],{"class":41,"line":74},[39,157746,147491],{"class":45},[39,157748,50],{"class":49},[39,157750,147496],{"class":56},[39,157752,157753],{"class":41,"line":99},[39,157754,3458],{"emptyLinePlaceholder":1145},[39,157756,157757,157759,157761,157763,157765,157767,157769,157771],{"class":41,"line":106},[39,157758,31470],{"class":56},[39,157760,1221],{"class":45},[39,157762,157627],{"class":1319},[39,157764,33514],{"class":56},[39,157766,157633],{"class":1319},[39,157768,33514],{"class":56},[39,157770,1462],{"class":1319},[39,157772,157773],{"class":45},".format(name, age))\n",[39,157775,157776,157778,157780,157782,157785,157787,157790,157792],{"class":41,"line":112},[39,157777,31470],{"class":56},[39,157779,1221],{"class":45},[39,157781,157627],{"class":1319},[39,157783,157784],{"class":56},"{0}",[39,157786,157633],{"class":1319},[39,157788,157789],{"class":56},"{1}",[39,157791,1462],{"class":1319},[39,157793,157773],{"class":45},[39,157795,157796,157798,157800,157802,157805,157807,157810,157812,157815,157817,157819,157822,157824,157826],{"class":41,"line":118},[39,157797,31470],{"class":56},[39,157799,1221],{"class":45},[39,157801,157627],{"class":1319},[39,157803,157804],{"class":56},"{name}",[39,157806,157633],{"class":1319},[39,157808,157809],{"class":56},"{age}",[39,157811,1462],{"class":1319},[39,157813,157814],{"class":45},".format(",[39,157816,80864],{"class":254},[39,157818,50],{"class":49},[39,157820,157821],{"class":45},"name, ",[39,157823,71275],{"class":254},[39,157825,50],{"class":49},[39,157827,157828],{"class":45},"age))\n",[1188,157830,157832],{"id":157831},"_2103-f-string","2.10.3 f-string",[19,157834,157835],{},"推荐写法：",[29,157837,157839],{"className":31,"code":157838,"language":33,"meta":34,"style":34},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[36,157840,157841,157849,157857,157865,157869],{"__ignoreMap":34},[39,157842,157843,157845,157847],{"class":41,"line":42},[39,157844,147481],{"class":45},[39,157846,50],{"class":49},[39,157848,150298],{"class":1319},[39,157850,157851,157853,157855],{"class":41,"line":74},[39,157852,147491],{"class":45},[39,157854,50],{"class":49},[39,157856,147496],{"class":56},[39,157858,157859,157861,157863],{"class":41,"line":99},[39,157860,156303],{"class":45},[39,157862,50],{"class":49},[39,157864,157614],{"class":56},[39,157866,157867],{"class":41,"line":106},[39,157868,3458],{"emptyLinePlaceholder":1145},[39,157870,157871,157873,157875,157877,157879,157881,157883,157885,157887,157889,157891,157893,157895,157897,157900,157903,157905,157907],{"class":41,"line":112},[39,157872,31470],{"class":56},[39,157874,1221],{"class":45},[39,157876,1270],{"class":49},[39,157878,157627],{"class":1319},[39,157880,2094],{"class":56},[39,157882,80864],{"class":45},[39,157884,2144],{"class":56},[39,157886,157633],{"class":1319},[39,157888,2094],{"class":56},[39,157890,71275],{"class":45},[39,157892,2144],{"class":56},[39,157894,157639],{"class":1319},[39,157896,2094],{"class":56},[39,157898,157899],{"class":45},"score",[39,157901,157902],{"class":49},":.1f",[39,157904,2144],{"class":56},[39,157906,1462],{"class":1319},[39,157908,209],{"class":45},[19,157910,157911],{},"表达式也可以放进去：",[29,157913,157915],{"className":31,"code":157914,"language":33,"meta":34,"style":34},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[36,157916,157917,157925,157933],{"__ignoreMap":34},[39,157918,157919,157921,157923],{"class":41,"line":42},[39,157920,147626],{"class":45},[39,157922,50],{"class":49},[39,157924,147631],{"class":56},[39,157926,157927,157929,157931],{"class":41,"line":74},[39,157928,147636],{"class":45},[39,157930,50],{"class":49},[39,157932,55481],{"class":56},[39,157934,157935,157937,157939,157941,157944,157946,157948,157950,157953,157955,157958],{"class":41,"line":99},[39,157936,31470],{"class":56},[39,157938,1221],{"class":45},[39,157940,1270],{"class":49},[39,157942,157943],{"class":1319},"\"总价:",[39,157945,2094],{"class":56},[39,157947,147626],{"class":45},[39,157949,1657],{"class":49},[39,157951,157952],{"class":45}," count",[39,157954,2144],{"class":56},[39,157956,157957],{"class":1319},"元\"",[39,157959,209],{"class":45},[14,157961,157963],{"id":157962},"_211-input输入","2.11 input输入",[19,157965,157966,157969],{},[36,157967,157968],{},"input()"," 会暂停程序，等待用户输入。",[29,157971,157973],{"className":31,"code":157972,"language":33,"meta":34,"style":34},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[36,157974,157975,157989],{"__ignoreMap":34},[39,157976,157977,157979,157981,157983,157985,157987],{"class":41,"line":42},[39,157978,147481],{"class":45},[39,157980,50],{"class":49},[39,157982,61659],{"class":56},[39,157984,1221],{"class":45},[39,157986,153324],{"class":1319},[39,157988,209],{"class":45},[39,157990,157991,157993,157995,157997,158000,158002,158004,158006,158008],{"class":41,"line":74},[39,157992,31470],{"class":56},[39,157994,1221],{"class":45},[39,157996,1270],{"class":49},[39,157998,157999],{"class":1319},"\"你好，",[39,158001,2094],{"class":56},[39,158003,80864],{"class":45},[39,158005,2144],{"class":56},[39,158007,1462],{"class":1319},[39,158009,209],{"class":45},[19,158011,158012],{},"输入整数：",[29,158014,158016],{"className":31,"code":158015,"language":33,"meta":34,"style":34},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[36,158017,158018,158036],{"__ignoreMap":34},[39,158019,158020,158022,158024,158026,158028,158030,158032,158034],{"class":41,"line":42},[39,158021,147491],{"class":45},[39,158023,50],{"class":49},[39,158025,3440],{"class":56},[39,158027,1221],{"class":45},[39,158029,54875],{"class":56},[39,158031,1221],{"class":45},[39,158033,153339],{"class":1319},[39,158035,31552],{"class":45},[39,158037,158038,158040,158042,158044,158047,158049,158051,158053,158056,158058],{"class":41,"line":74},[39,158039,31470],{"class":56},[39,158041,1221],{"class":45},[39,158043,1270],{"class":49},[39,158045,158046],{"class":1319},"\"明年你",[39,158048,2094],{"class":56},[39,158050,147491],{"class":45},[39,158052,1682],{"class":49},[39,158054,158055],{"class":56}," 1}",[39,158057,150349],{"class":1319},[39,158059,209],{"class":45},[19,158061,158062],{},"输入小数：",[29,158064,158066],{"className":31,"code":158065,"language":33,"meta":34,"style":34},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[36,158067,158068,158087],{"__ignoreMap":34},[39,158069,158070,158072,158074,158076,158078,158080,158082,158085],{"class":41,"line":42},[39,158071,156276],{"class":45},[39,158073,50],{"class":49},[39,158075,110742],{"class":56},[39,158077,1221],{"class":45},[39,158079,54875],{"class":56},[39,158081,1221],{"class":45},[39,158083,158084],{"class":1319},"\"请输入身高:\"",[39,158086,31552],{"class":45},[39,158088,158089,158091,158093,158095,158098,158100,158102,158105,158107,158110],{"class":41,"line":74},[39,158090,31470],{"class":56},[39,158092,1221],{"class":45},[39,158094,1270],{"class":49},[39,158096,158097],{"class":1319},"\"身高:",[39,158099,2094],{"class":56},[39,158101,26038],{"class":45},[39,158103,158104],{"class":49},":.2f",[39,158106,2144],{"class":56},[39,158108,158109],{"class":1319},"米\"",[39,158111,209],{"class":45},[14,158113,158115],{"id":158114},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158117,124237],{},[1171,158119,158120,158123,158126,158129],{},[1174,158121,158122],{},"输入商品单价。",[1174,158124,158125],{},"输入购买数量。",[1174,158127,158128],{},"输入折扣，例如 0.8 表示八折。",[1174,158130,158131],{},"输出最终金额，保留两位小数。",[19,158133,11091],{},[29,158135,158137],{"className":31,"code":158136,"language":33,"meta":34,"style":34},"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",[36,158138,158139,158158,158177,158197,158201,158221,158225,158248,158269,158291],{"__ignoreMap":34},[39,158140,158141,158143,158145,158147,158149,158151,158153,158156],{"class":41,"line":42},[39,158142,147626],{"class":45},[39,158144,50],{"class":49},[39,158146,110742],{"class":56},[39,158148,1221],{"class":45},[39,158150,54875],{"class":56},[39,158152,1221],{"class":45},[39,158154,158155],{"class":1319},"\"请输入商品单价:\"",[39,158157,31552],{"class":45},[39,158159,158160,158162,158164,158166,158168,158170,158172,158175],{"class":41,"line":74},[39,158161,147636],{"class":45},[39,158163,50],{"class":49},[39,158165,3440],{"class":56},[39,158167,1221],{"class":45},[39,158169,54875],{"class":56},[39,158171,1221],{"class":45},[39,158173,158174],{"class":1319},"\"请输入购买数量:\"",[39,158176,31552],{"class":45},[39,158178,158179,158182,158184,158186,158188,158190,158192,158195],{"class":41,"line":99},[39,158180,158181],{"class":45},"discount ",[39,158183,50],{"class":49},[39,158185,110742],{"class":56},[39,158187,1221],{"class":45},[39,158189,54875],{"class":56},[39,158191,1221],{"class":45},[39,158193,158194],{"class":1319},"\"请输入折扣:\"",[39,158196,31552],{"class":45},[39,158198,158199],{"class":41,"line":106},[39,158200,3458],{"emptyLinePlaceholder":1145},[39,158202,158203,158206,158208,158211,158213,158216,158218],{"class":41,"line":112},[39,158204,158205],{"class":45},"total ",[39,158207,50],{"class":49},[39,158209,158210],{"class":45}," price ",[39,158212,1657],{"class":49},[39,158214,158215],{"class":45}," count ",[39,158217,1657],{"class":49},[39,158219,158220],{"class":45}," discount\n",[39,158222,158223],{"class":41,"line":118},[39,158224,3458],{"emptyLinePlaceholder":1145},[39,158226,158227,158229,158231,158233,158236,158238,158240,158242,158244,158246],{"class":41,"line":413},[39,158228,31470],{"class":56},[39,158230,1221],{"class":45},[39,158232,1270],{"class":49},[39,158234,158235],{"class":1319},"\"商品单价:",[39,158237,2094],{"class":56},[39,158239,80869],{"class":45},[39,158241,158104],{"class":49},[39,158243,2144],{"class":56},[39,158245,1462],{"class":1319},[39,158247,209],{"class":45},[39,158249,158250,158252,158254,158256,158259,158261,158263,158265,158267],{"class":41,"line":419},[39,158251,31470],{"class":56},[39,158253,1221],{"class":45},[39,158255,1270],{"class":49},[39,158257,158258],{"class":1319},"\"购买数量:",[39,158260,2094],{"class":56},[39,158262,85488],{"class":45},[39,158264,2144],{"class":56},[39,158266,1462],{"class":1319},[39,158268,209],{"class":45},[39,158270,158271,158273,158275,158277,158280,158282,158285,158287,158289],{"class":41,"line":425},[39,158272,31470],{"class":56},[39,158274,1221],{"class":45},[39,158276,1270],{"class":49},[39,158278,158279],{"class":1319},"\"折扣:",[39,158281,2094],{"class":56},[39,158283,158284],{"class":45},"discount",[39,158286,2144],{"class":56},[39,158288,1462],{"class":1319},[39,158290,209],{"class":45},[39,158292,158293,158295,158297,158299,158302,158304,158307,158309,158311,158313],{"class":41,"line":443},[39,158294,31470],{"class":56},[39,158296,1221],{"class":45},[39,158298,1270],{"class":49},[39,158300,158301],{"class":1319},"\"应付金额:",[39,158303,2094],{"class":56},[39,158305,158306],{"class":45},"total",[39,158308,158104],{"class":49},[39,158310,2144],{"class":56},[39,158312,157957],{"class":1319},[39,158314,209],{"class":45},[14,158316,158318],{"id":158317},"_213-易错点","2.13 易错点",[1171,158320,158321,158326,158332,158340,158343],{},[1174,158322,158323,158325],{},[36,158324,157968],{}," 的结果是字符串，做运算前要转换。",[1174,158327,158328,158329,29442],{},"字符串拼接时，数字要先 ",[36,158330,158331],{},"str()",[1174,158333,158334,158336,158337,158339],{},[36,158335,50],{}," 是赋值，",[36,158338,4007],{}," 是比较。",[1174,158341,158342],{},"Python 没有自增自减运算符。",[1174,158344,158345],{},"浮点数计算可能有精度误差：",[29,158347,158349],{"className":31,"code":158348,"language":33,"meta":34,"style":34},"print(0.1 + 0.2)\n",[36,158350,158351],{"__ignoreMap":34},[39,158352,158353,158355,158357,158359,158361,158364],{"class":41,"line":42},[39,158354,31470],{"class":56},[39,158356,1221],{"class":45},[39,158358,87264],{"class":56},[39,158360,46621],{"class":49},[39,158362,158363],{"class":56}," 0.2",[39,158365,209],{"class":45},[19,158367,158368,158369,158372],{},"金额计算如果要求严格，可以后续学习 ",[36,158370,158371],{},"decimal"," 模块。",[14,158374,158376],{"id":158375},"_214-本章练习","2.14 本章练习",[1171,158378,158379,158382,158385,158388,158391],{},[1174,158380,158381],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[1174,158383,158384],{},"输入圆的半径，计算面积，保留两位小数。",[1174,158386,158387],{},"输入工资和奖金，计算总收入。",[1174,158389,158390],{},"输入摄氏温度，转换为华氏温度。",[1174,158392,158393],{},"写一个 BMI 计算程序：",[29,158395,158398],{"className":158396,"code":158397,"language":6244,"meta":34},[6242],"BMI = 体重kg \u002F 身高m ** 2\n",[36,158399,158397],{"__ignoreMap":34},[1133,158401,158402],{},"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":34,"searchDepth":74,"depth":74,"links":158404},[158405,158406,158407,158408,158409,158410,158411,158417,158418,158419,158424,158425,158426,158427],{"id":155966,"depth":74,"text":155967},{"id":156075,"depth":74,"text":156076},{"id":156246,"depth":74,"text":156247},{"id":156323,"depth":74,"text":156324},{"id":51785,"depth":74,"text":51786},{"id":156629,"depth":74,"text":156630},{"id":156855,"depth":74,"text":156856,"children":158412},[158413,158414,158415,158416],{"id":156859,"depth":99,"text":156860},{"id":157053,"depth":99,"text":157054},{"id":157141,"depth":99,"text":157142},{"id":157247,"depth":99,"text":157248},{"id":157356,"depth":74,"text":157357},{"id":157514,"depth":74,"text":157515},{"id":157579,"depth":74,"text":157580,"children":158420},[158421,158422,158423],{"id":157583,"depth":99,"text":157584},{"id":157728,"depth":99,"text":157729},{"id":157831,"depth":99,"text":157832},{"id":157962,"depth":74,"text":157963},{"id":158114,"depth":74,"text":158115},{"id":158317,"depth":74,"text":158318},{"id":158375,"depth":74,"text":158376},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155958,"description":1142},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158434,"title":158435,"body":158436,"description":1142,"extension":1143,"meta":160072,"navigation":1145,"path":160073,"seo":160074,"stem":160075,"__hash__":160076},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158437,"toc":160053},[158438,158441,158445,158448,158463,158466,158494,158498,158548,158550,158566,158569,158595,158598,158602,158669,158672,158688,158692,158695,158813,158816,158823,158872,158878,158882,158885,158998,159001,159005,159009,159012,159062,159066,159069,159119,159123,159126,159164,159168,159171,159217,159220,159255,159259,159264,159267,159313,159315,159382,159386,159392,159503,159512,159516,159518,159529,159531,159697,159701,159703,159717,159719,159933,159937,159956,159973,159976,160022,160026,160050],[10,158439,158435],{"id":158440},"_3-判断语句",[14,158442,158444],{"id":158443},"_31-布尔值","3.1 布尔值",[19,158446,158447],{},"判断语句依赖布尔值：",[29,158449,158451],{"className":31,"code":158450,"language":33,"meta":34,"style":34},"True\nFalse\n",[36,158452,158453,158458],{"__ignoreMap":34},[39,158454,158455],{"class":41,"line":42},[39,158456,158457],{"class":56},"True\n",[39,158459,158460],{"class":41,"line":74},[39,158461,158462],{"class":56},"False\n",[19,158464,158465],{},"比较表达式会产生布尔值：",[29,158467,158469],{"className":31,"code":158468,"language":33,"meta":34,"style":34},"age = 18\nprint(age >= 18)  # True\n",[36,158470,158471,158479],{"__ignoreMap":34},[39,158472,158473,158475,158477],{"class":41,"line":42},[39,158474,147491],{"class":45},[39,158476,50],{"class":49},[39,158478,147496],{"class":56},[39,158480,158481,158483,158485,158487,158489,158491],{"class":41,"line":74},[39,158482,31470],{"class":56},[39,158484,156713],{"class":45},[39,158486,2768],{"class":49},[39,158488,157230],{"class":56},[39,158490,46863],{"class":45},[39,158492,158493],{"class":102},"# True\n",[14,158495,158497],{"id":158496},"_32-if基础语法","3.2 if基础语法",[29,158499,158501],{"className":31,"code":158500,"language":33,"meta":34,"style":34},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[36,158502,158503,158521,158525,158537],{"__ignoreMap":34},[39,158504,158505,158507,158509,158511,158513,158515,158517,158519],{"class":41,"line":42},[39,158506,147491],{"class":45},[39,158508,50],{"class":49},[39,158510,3440],{"class":56},[39,158512,1221],{"class":45},[39,158514,54875],{"class":56},[39,158516,1221],{"class":45},[39,158518,153339],{"class":1319},[39,158520,31552],{"class":45},[39,158522,158523],{"class":41,"line":74},[39,158524,3458],{"emptyLinePlaceholder":1145},[39,158526,158527,158529,158531,158533,158535],{"class":41,"line":99},[39,158528,2596],{"class":49},[39,158530,16763],{"class":45},[39,158532,2768],{"class":49},[39,158534,157230],{"class":56},[39,158536,4797],{"class":45},[39,158538,158539,158541,158543,158546],{"class":41,"line":106},[39,158540,32354],{"class":56},[39,158542,1221],{"class":45},[39,158544,158545],{"class":1319},"\"可以进入网吧\"",[39,158547,209],{"class":45},[19,158549,10081],{},[1171,158551,158552,158557,158560,158563],{},[1174,158553,158554,158556],{},[36,158555,2596],{}," 后面是条件表达式。",[1174,158558,158559],{},"条件后面必须写冒号。",[1174,158561,158562],{},"条件成立时执行缩进代码块。",[1174,158564,158565],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158567,158568],{},"错误示例：",[29,158570,158572],{"className":31,"code":158571,"language":33,"meta":34,"style":34},"if age >= 18\n    print(\"可以进入\")\n",[36,158573,158574,158584],{"__ignoreMap":34},[39,158575,158576,158578,158580,158582],{"class":41,"line":42},[39,158577,2596],{"class":49},[39,158579,16763],{"class":45},[39,158581,2768],{"class":49},[39,158583,147496],{"class":56},[39,158585,158586,158588,158590,158593],{"class":41,"line":74},[39,158587,32354],{"class":56},[39,158589,1221],{"class":45},[39,158591,158592],{"class":1319},"\"可以进入\"",[39,158594,209],{"class":45},[19,158596,158597],{},"缺少冒号。",[14,158599,158601],{"id":158600},"_33-if-else","3.3 if else",[29,158603,158605],{"className":31,"code":158604,"language":33,"meta":34,"style":34},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[36,158606,158607,158625,158629,158641,158652,158658],{"__ignoreMap":34},[39,158608,158609,158611,158613,158615,158617,158619,158621,158623],{"class":41,"line":42},[39,158610,147491],{"class":45},[39,158612,50],{"class":49},[39,158614,3440],{"class":56},[39,158616,1221],{"class":45},[39,158618,54875],{"class":56},[39,158620,1221],{"class":45},[39,158622,153339],{"class":1319},[39,158624,31552],{"class":45},[39,158626,158627],{"class":41,"line":74},[39,158628,3458],{"emptyLinePlaceholder":1145},[39,158630,158631,158633,158635,158637,158639],{"class":41,"line":99},[39,158632,2596],{"class":49},[39,158634,16763],{"class":45},[39,158636,2768],{"class":49},[39,158638,157230],{"class":56},[39,158640,4797],{"class":45},[39,158642,158643,158645,158647,158650],{"class":41,"line":106},[39,158644,32354],{"class":56},[39,158646,1221],{"class":45},[39,158648,158649],{"class":1319},"\"成年人\"",[39,158651,209],{"class":45},[39,158653,158654,158656],{"class":41,"line":112},[39,158655,2759],{"class":49},[39,158657,4797],{"class":45},[39,158659,158660,158662,158664,158667],{"class":41,"line":118},[39,158661,32354],{"class":56},[39,158663,1221],{"class":45},[39,158665,158666],{"class":1319},"\"未成年人\"",[39,158668,209],{"class":45},[19,158670,158671],{},"执行逻辑：",[1171,158673,158674,158680,158685],{},[1174,158675,158676,158677,158679],{},"条件成立，执行 ",[36,158678,2596],{}," 代码块。",[1174,158681,158682,158683,158679],{},"条件不成立，执行 ",[36,158684,2759],{},[1174,158686,158687],{},"两个代码块只会执行其中一个。",[14,158689,158691],{"id":158690},"_34-if-elif-else","3.4 if elif else",[19,158693,158694],{},"多条件判断：",[29,158696,158698],{"className":31,"code":158697,"language":33,"meta":34,"style":34},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[36,158699,158700,158718,158722,158736,158747,158761,158772,158785,158796,158802],{"__ignoreMap":34},[39,158701,158702,158704,158706,158708,158710,158712,158714,158716],{"class":41,"line":42},[39,158703,156303],{"class":45},[39,158705,50],{"class":49},[39,158707,3440],{"class":56},[39,158709,1221],{"class":45},[39,158711,54875],{"class":56},[39,158713,1221],{"class":45},[39,158715,153354],{"class":1319},[39,158717,31552],{"class":45},[39,158719,158720],{"class":41,"line":74},[39,158721,3458],{"emptyLinePlaceholder":1145},[39,158723,158724,158726,158729,158731,158734],{"class":41,"line":99},[39,158725,2596],{"class":49},[39,158727,158728],{"class":45}," score ",[39,158730,2768],{"class":49},[39,158732,158733],{"class":56}," 90",[39,158735,4797],{"class":45},[39,158737,158738,158740,158742,158745],{"class":41,"line":106},[39,158739,32354],{"class":56},[39,158741,1221],{"class":45},[39,158743,158744],{"class":1319},"\"优秀\"",[39,158746,209],{"class":45},[39,158748,158749,158752,158754,158756,158759],{"class":41,"line":112},[39,158750,158751],{"class":49},"elif",[39,158753,158728],{"class":45},[39,158755,2768],{"class":49},[39,158757,158758],{"class":56}," 80",[39,158760,4797],{"class":45},[39,158762,158763,158765,158767,158770],{"class":41,"line":118},[39,158764,32354],{"class":56},[39,158766,1221],{"class":45},[39,158768,158769],{"class":1319},"\"良好\"",[39,158771,209],{"class":45},[39,158773,158774,158776,158778,158780,158783],{"class":41,"line":413},[39,158775,158751],{"class":49},[39,158777,158728],{"class":45},[39,158779,2768],{"class":49},[39,158781,158782],{"class":56}," 60",[39,158784,4797],{"class":45},[39,158786,158787,158789,158791,158794],{"class":41,"line":419},[39,158788,32354],{"class":56},[39,158790,1221],{"class":45},[39,158792,158793],{"class":1319},"\"及格\"",[39,158795,209],{"class":45},[39,158797,158798,158800],{"class":41,"line":425},[39,158799,2759],{"class":49},[39,158801,4797],{"class":45},[39,158803,158804,158806,158808,158811],{"class":41,"line":443},[39,158805,32354],{"class":56},[39,158807,1221],{"class":45},[39,158809,158810],{"class":1319},"\"不及格\"",[39,158812,209],{"class":45},[19,158814,158815],{},"注意判断顺序很重要。",[19,158817,158818,158819,158822],{},"如果把 ",[36,158820,158821],{},"score >= 60"," 放在最前面：",[29,158824,158826],{"className":31,"code":158825,"language":33,"meta":34,"style":34},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[36,158827,158828,158840,158850,158862],{"__ignoreMap":34},[39,158829,158830,158832,158834,158836,158838],{"class":41,"line":42},[39,158831,2596],{"class":49},[39,158833,158728],{"class":45},[39,158835,2768],{"class":49},[39,158837,158782],{"class":56},[39,158839,4797],{"class":45},[39,158841,158842,158844,158846,158848],{"class":41,"line":74},[39,158843,32354],{"class":56},[39,158845,1221],{"class":45},[39,158847,158793],{"class":1319},[39,158849,209],{"class":45},[39,158851,158852,158854,158856,158858,158860],{"class":41,"line":99},[39,158853,158751],{"class":49},[39,158855,158728],{"class":45},[39,158857,2768],{"class":49},[39,158859,158733],{"class":56},[39,158861,4797],{"class":45},[39,158863,158864,158866,158868,158870],{"class":41,"line":106},[39,158865,32354],{"class":56},[39,158867,1221],{"class":45},[39,158869,158744],{"class":1319},[39,158871,209],{"class":45},[19,158873,158874,158875,158877],{},"成绩 95 会先满足 ",[36,158876,158821],{},"，后面的优秀分支就不会执行。",[14,158879,158881],{"id":158880},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158883,158884],{},"嵌套判断就是在一个判断内部再写判断。",[29,158886,158888],{"className":31,"code":158887,"language":33,"meta":34,"style":34},"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",[36,158889,158890,158908,158923,158927,158939,158953,158963,158970,158981,158987],{"__ignoreMap":34},[39,158891,158892,158894,158896,158898,158900,158902,158904,158906],{"class":41,"line":42},[39,158893,147491],{"class":45},[39,158895,50],{"class":49},[39,158897,3440],{"class":56},[39,158899,1221],{"class":45},[39,158901,54875],{"class":56},[39,158903,1221],{"class":45},[39,158905,153339],{"class":1319},[39,158907,31552],{"class":45},[39,158909,158910,158912,158914,158916,158918,158921],{"class":41,"line":74},[39,158911,157306],{"class":45},[39,158913,50],{"class":49},[39,158915,61659],{"class":56},[39,158917,1221],{"class":45},[39,158919,158920],{"class":1319},"\"是否有票(y\u002Fn):\"",[39,158922,209],{"class":45},[39,158924,158925],{"class":41,"line":99},[39,158926,3458],{"emptyLinePlaceholder":1145},[39,158928,158929,158931,158933,158935,158937],{"class":41,"line":106},[39,158930,2596],{"class":49},[39,158932,16763],{"class":45},[39,158934,2768],{"class":49},[39,158936,157230],{"class":56},[39,158938,4797],{"class":45},[39,158940,158941,158943,158946,158948,158951],{"class":41,"line":112},[39,158942,4159],{"class":49},[39,158944,158945],{"class":45}," has_ticket ",[39,158947,4007],{"class":49},[39,158949,158950],{"class":1319}," \"y\"",[39,158952,4797],{"class":45},[39,158954,158955,158957,158959,158961],{"class":41,"line":118},[39,158956,33506],{"class":56},[39,158958,1221],{"class":45},[39,158960,158592],{"class":1319},[39,158962,209],{"class":45},[39,158964,158965,158968],{"class":41,"line":413},[39,158966,158967],{"class":49},"    else",[39,158969,4797],{"class":45},[39,158971,158972,158974,158976,158979],{"class":41,"line":419},[39,158973,33506],{"class":56},[39,158975,1221],{"class":45},[39,158977,158978],{"class":1319},"\"请先买票\"",[39,158980,209],{"class":45},[39,158982,158983,158985],{"class":41,"line":425},[39,158984,2759],{"class":49},[39,158986,4797],{"class":45},[39,158988,158989,158991,158993,158996],{"class":41,"line":443},[39,158990,32354],{"class":56},[39,158992,1221],{"class":45},[39,158994,158995],{"class":1319},"\"未成年人禁止进入\"",[39,158997,209],{"class":45},[19,158999,159000],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159002,159004],{"id":159003},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[1188,159006,159008],{"id":159007},"_361-and","3.6.1 and",[19,159010,159011],{},"两个条件都成立才成立。",[29,159013,159015],{"className":31,"code":159014,"language":33,"meta":34,"style":34},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[36,159016,159017,159025,159033,159037,159052],{"__ignoreMap":34},[39,159018,159019,159021,159023],{"class":41,"line":42},[39,159020,147491],{"class":45},[39,159022,50],{"class":49},[39,159024,89119],{"class":56},[39,159026,159027,159029,159031],{"class":41,"line":74},[39,159028,157306],{"class":45},[39,159030,50],{"class":49},[39,159032,154544],{"class":56},[39,159034,159035],{"class":41,"line":99},[39,159036,3458],{"emptyLinePlaceholder":1145},[39,159038,159039,159041,159043,159045,159047,159049],{"class":41,"line":106},[39,159040,2596],{"class":49},[39,159042,16763],{"class":45},[39,159044,2768],{"class":49},[39,159046,157230],{"class":56},[39,159048,121374],{"class":49},[39,159050,159051],{"class":45}," has_ticket:\n",[39,159053,159054,159056,159058,159060],{"class":41,"line":112},[39,159055,32354],{"class":56},[39,159057,1221],{"class":45},[39,159059,158592],{"class":1319},[39,159061,209],{"class":45},[1188,159063,159065],{"id":159064},"_362-or","3.6.2 or",[19,159067,159068],{},"只要一个条件成立就成立。",[29,159070,159072],{"className":31,"code":159071,"language":33,"meta":34,"style":34},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[36,159073,159074,159083,159092,159096,159108],{"__ignoreMap":34},[39,159075,159076,159079,159081],{"class":41,"line":42},[39,159077,159078],{"class":45},"is_vip ",[39,159080,50],{"class":49},[39,159082,126752],{"class":56},[39,159084,159085,159088,159090],{"class":41,"line":74},[39,159086,159087],{"class":45},"coupon ",[39,159089,50],{"class":49},[39,159091,154544],{"class":56},[39,159093,159094],{"class":41,"line":99},[39,159095,3458],{"emptyLinePlaceholder":1145},[39,159097,159098,159100,159103,159105],{"class":41,"line":106},[39,159099,2596],{"class":49},[39,159101,159102],{"class":45}," is_vip ",[39,159104,116035],{"class":49},[39,159106,159107],{"class":45}," coupon:\n",[39,159109,159110,159112,159114,159117],{"class":41,"line":112},[39,159111,32354],{"class":56},[39,159113,1221],{"class":45},[39,159115,159116],{"class":1319},"\"可以享受优惠\"",[39,159118,209],{"class":45},[1188,159120,159122],{"id":159121},"_363-not","3.6.3 not",[19,159124,159125],{},"取反。",[29,159127,159129],{"className":31,"code":159128,"language":33,"meta":34,"style":34},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[36,159130,159131,159140,159144,159153],{"__ignoreMap":34},[39,159132,159133,159136,159138],{"class":41,"line":42},[39,159134,159135],{"class":45},"is_closed ",[39,159137,50],{"class":49},[39,159139,126752],{"class":56},[39,159141,159142],{"class":41,"line":74},[39,159143,3458],{"emptyLinePlaceholder":1145},[39,159145,159146,159148,159150],{"class":41,"line":99},[39,159147,2596],{"class":49},[39,159149,39985],{"class":49},[39,159151,159152],{"class":45}," is_closed:\n",[39,159154,159155,159157,159159,159162],{"class":41,"line":106},[39,159156,32354],{"class":56},[39,159158,1221],{"class":45},[39,159160,159161],{"class":1319},"\"店铺营业中\"",[39,159163,209],{"class":45},[14,159165,159167],{"id":159166},"_37-链式比较","3.7 链式比较",[19,159169,159170],{},"Python 支持链式比较：",[29,159172,159174],{"className":31,"code":159173,"language":33,"meta":34,"style":34},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[36,159175,159176,159185,159189,159206],{"__ignoreMap":34},[39,159177,159178,159180,159182],{"class":41,"line":42},[39,159179,156303],{"class":45},[39,159181,50],{"class":49},[39,159183,159184],{"class":56}," 85\n",[39,159186,159187],{"class":41,"line":74},[39,159188,3458],{"emptyLinePlaceholder":1145},[39,159190,159191,159193,159195,159198,159200,159202,159204],{"class":41,"line":99},[39,159192,2596],{"class":49},[39,159194,5151],{"class":56},[39,159196,159197],{"class":49}," \u003C=",[39,159199,158728],{"class":45},[39,159201,2653],{"class":49},[39,159203,6810],{"class":56},[39,159205,4797],{"class":45},[39,159207,159208,159210,159212,159215],{"class":41,"line":106},[39,159209,32354],{"class":56},[39,159211,1221],{"class":45},[39,159213,159214],{"class":1319},"\"成绩合法\"",[39,159216,209],{"class":45},[19,159218,159219],{},"等价于：",[29,159221,159223],{"className":31,"code":159222,"language":33,"meta":34,"style":34},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[36,159224,159225,159245],{"__ignoreMap":34},[39,159226,159227,159229,159231,159233,159235,159237,159239,159241,159243],{"class":41,"line":42},[39,159228,2596],{"class":49},[39,159230,158728],{"class":45},[39,159232,2768],{"class":49},[39,159234,5151],{"class":56},[39,159236,121374],{"class":49},[39,159238,158728],{"class":45},[39,159240,2653],{"class":49},[39,159242,6810],{"class":56},[39,159244,4797],{"class":45},[39,159246,159247,159249,159251,159253],{"class":41,"line":74},[39,159248,32354],{"class":56},[39,159250,1221],{"class":45},[39,159252,159214],{"class":1319},[39,159254,209],{"class":45},[14,159256,159258],{"id":159257},"_38-真值和假值","3.8 真值和假值",[19,159260,117412,159261,159263],{},[36,159262,2596],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159265,159266],{},"假值：",[29,159268,159270],{"className":31,"code":159269,"language":33,"meta":34,"style":34},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[36,159271,159272,159276,159281,159285,159289,159294,159298,159302,159307],{"__ignoreMap":34},[39,159273,159274],{"class":41,"line":42},[39,159275,158462],{"class":56},[39,159277,159278],{"class":41,"line":74},[39,159279,159280],{"class":56},"None\n",[39,159282,159283],{"class":41,"line":99},[39,159284,4143],{"class":56},[39,159286,159287],{"class":41,"line":106},[39,159288,33397],{"class":56},[39,159290,159291],{"class":41,"line":112},[39,159292,159293],{"class":1319},"\"\"\n",[39,159295,159296],{"class":41,"line":118},[39,159297,33412],{"class":45},[39,159299,159300],{"class":41,"line":413},[39,159301,3034],{"class":45},[39,159303,159304],{"class":41,"line":419},[39,159305,159306],{"class":45},"{}\n",[39,159308,159309,159311],{"class":41,"line":425},[39,159310,156235],{"class":56},[39,159312,3034],{"class":45},[19,159314,16191],{},[29,159316,159318],{"className":31,"code":159317,"language":33,"meta":34,"style":34},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[36,159319,159320,159334,159338,159345,159365,159371],{"__ignoreMap":34},[39,159321,159322,159324,159326,159328,159330,159332],{"class":41,"line":42},[39,159323,147481],{"class":45},[39,159325,50],{"class":49},[39,159327,61659],{"class":56},[39,159329,1221],{"class":45},[39,159331,153324],{"class":1319},[39,159333,209],{"class":45},[39,159335,159336],{"class":41,"line":74},[39,159337,3458],{"emptyLinePlaceholder":1145},[39,159339,159340,159342],{"class":41,"line":99},[39,159341,2596],{"class":49},[39,159343,159344],{"class":45}," name:\n",[39,159346,159347,159349,159351,159353,159355,159357,159359,159361,159363],{"class":41,"line":106},[39,159348,32354],{"class":56},[39,159350,1221],{"class":45},[39,159352,1270],{"class":49},[39,159354,157999],{"class":1319},[39,159356,2094],{"class":56},[39,159358,80864],{"class":45},[39,159360,2144],{"class":56},[39,159362,1462],{"class":1319},[39,159364,209],{"class":45},[39,159366,159367,159369],{"class":41,"line":112},[39,159368,2759],{"class":49},[39,159370,4797],{"class":45},[39,159372,159373,159375,159377,159380],{"class":41,"line":118},[39,159374,32354],{"class":56},[39,159376,1221],{"class":45},[39,159378,159379],{"class":1319},"\"姓名不能为空\"",[39,159381,209],{"class":45},[14,159383,159385],{"id":159384},"_39-match语句","3.9 match语句",[19,159387,159388,159389,159391],{},"Python 3.10 开始支持 ",[36,159390,72319],{},"。它适合处理固定选项。",[29,159393,159395],{"className":31,"code":159394,"language":33,"meta":34,"style":34},"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",[36,159396,159397,159413,159417,159424,159434,159445,159454,159465,159474,159485,159492],{"__ignoreMap":34},[39,159398,159399,159402,159404,159406,159408,159411],{"class":41,"line":42},[39,159400,159401],{"class":45},"command ",[39,159403,50],{"class":49},[39,159405,61659],{"class":56},[39,159407,1221],{"class":45},[39,159409,159410],{"class":1319},"\"请输入命令:\"",[39,159412,209],{"class":45},[39,159414,159415],{"class":41,"line":74},[39,159416,3458],{"emptyLinePlaceholder":1145},[39,159418,159419,159421],{"class":41,"line":99},[39,159420,72319],{"class":49},[39,159422,159423],{"class":45}," command:\n",[39,159425,159426,159429,159432],{"class":41,"line":106},[39,159427,159428],{"class":49},"    case",[39,159430,159431],{"class":1319}," \"start\"",[39,159433,4797],{"class":45},[39,159435,159436,159438,159440,159443],{"class":41,"line":112},[39,159437,33506],{"class":56},[39,159439,1221],{"class":45},[39,159441,159442],{"class":1319},"\"启动\"",[39,159444,209],{"class":45},[39,159446,159447,159449,159452],{"class":41,"line":118},[39,159448,159428],{"class":49},[39,159450,159451],{"class":1319}," \"stop\"",[39,159453,4797],{"class":45},[39,159455,159456,159458,159460,159463],{"class":41,"line":413},[39,159457,33506],{"class":56},[39,159459,1221],{"class":45},[39,159461,159462],{"class":1319},"\"停止\"",[39,159464,209],{"class":45},[39,159466,159467,159469,159472],{"class":41,"line":419},[39,159468,159428],{"class":49},[39,159470,159471],{"class":1319}," \"restart\"",[39,159473,4797],{"class":45},[39,159475,159476,159478,159480,159483],{"class":41,"line":425},[39,159477,33506],{"class":56},[39,159479,1221],{"class":45},[39,159481,159482],{"class":1319},"\"重启\"",[39,159484,209],{"class":45},[39,159486,159487,159489],{"class":41,"line":443},[39,159488,159428],{"class":49},[39,159490,159491],{"class":45}," _:\n",[39,159493,159494,159496,159498,159501],{"class":41,"line":449},[39,159495,33506],{"class":56},[39,159497,1221],{"class":45},[39,159499,159500],{"class":1319},"\"未知命令\"",[39,159502,209],{"class":45},[19,159504,159505,159506,159508,159509,159511],{},"入门阶段掌握 ",[36,159507,155603],{}," 更重要，",[36,159510,72319],{}," 可以作为补充。",[14,159513,159515],{"id":159514},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,159517,124237],{},[1171,159519,159520,159523,159526],{},[1174,159521,159522],{},"输入成绩。",[1174,159524,159525],{},"判断成绩是否合法。",[1174,159527,159528],{},"输出等级。",[19,159530,11091],{},[29,159532,159534],{"className":31,"code":159533,"language":33,"meta":34,"style":34},"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",[36,159535,159536,159554,159558,159576,159587,159599,159610,159622,159633,159646,159657,159669,159680,159686],{"__ignoreMap":34},[39,159537,159538,159540,159542,159544,159546,159548,159550,159552],{"class":41,"line":42},[39,159539,156303],{"class":45},[39,159541,50],{"class":49},[39,159543,110742],{"class":56},[39,159545,1221],{"class":45},[39,159547,54875],{"class":56},[39,159549,1221],{"class":45},[39,159551,153354],{"class":1319},[39,159553,31552],{"class":45},[39,159555,159556],{"class":41,"line":74},[39,159557,3458],{"emptyLinePlaceholder":1145},[39,159559,159560,159562,159564,159566,159568,159570,159572,159574],{"class":41,"line":99},[39,159561,2596],{"class":49},[39,159563,39985],{"class":49},[39,159565,5151],{"class":56},[39,159567,159197],{"class":49},[39,159569,158728],{"class":45},[39,159571,2653],{"class":49},[39,159573,6810],{"class":56},[39,159575,4797],{"class":45},[39,159577,159578,159580,159582,159585],{"class":41,"line":106},[39,159579,32354],{"class":56},[39,159581,1221],{"class":45},[39,159583,159584],{"class":1319},"\"成绩不合法\"",[39,159586,209],{"class":45},[39,159588,159589,159591,159593,159595,159597],{"class":41,"line":112},[39,159590,158751],{"class":49},[39,159592,158728],{"class":45},[39,159594,2768],{"class":49},[39,159596,158733],{"class":56},[39,159598,4797],{"class":45},[39,159600,159601,159603,159605,159608],{"class":41,"line":118},[39,159602,32354],{"class":56},[39,159604,1221],{"class":45},[39,159606,159607],{"class":1319},"\"等级:A\"",[39,159609,209],{"class":45},[39,159611,159612,159614,159616,159618,159620],{"class":41,"line":413},[39,159613,158751],{"class":49},[39,159615,158728],{"class":45},[39,159617,2768],{"class":49},[39,159619,158758],{"class":56},[39,159621,4797],{"class":45},[39,159623,159624,159626,159628,159631],{"class":41,"line":419},[39,159625,32354],{"class":56},[39,159627,1221],{"class":45},[39,159629,159630],{"class":1319},"\"等级:B\"",[39,159632,209],{"class":45},[39,159634,159635,159637,159639,159641,159644],{"class":41,"line":425},[39,159636,158751],{"class":49},[39,159638,158728],{"class":45},[39,159640,2768],{"class":49},[39,159642,159643],{"class":56}," 70",[39,159645,4797],{"class":45},[39,159647,159648,159650,159652,159655],{"class":41,"line":443},[39,159649,32354],{"class":56},[39,159651,1221],{"class":45},[39,159653,159654],{"class":1319},"\"等级:C\"",[39,159656,209],{"class":45},[39,159658,159659,159661,159663,159665,159667],{"class":41,"line":449},[39,159660,158751],{"class":49},[39,159662,158728],{"class":45},[39,159664,2768],{"class":49},[39,159666,158782],{"class":56},[39,159668,4797],{"class":45},[39,159670,159671,159673,159675,159678],{"class":41,"line":455},[39,159672,32354],{"class":56},[39,159674,1221],{"class":45},[39,159676,159677],{"class":1319},"\"等级:D\"",[39,159679,209],{"class":45},[39,159681,159682,159684],{"class":41,"line":461},[39,159683,2759],{"class":49},[39,159685,4797],{"class":45},[39,159687,159688,159690,159692,159695],{"class":41,"line":475},[39,159689,32354],{"class":56},[39,159691,1221],{"class":45},[39,159693,159694],{"class":1319},"\"等级:E\"",[39,159696,209],{"class":45},[14,159698,159700],{"id":159699},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,159702,124237],{},[1171,159704,159705,159708,159711,159714],{},[1174,159706,159707],{},"输入消费金额。",[1174,159709,159710],{},"输入会员等级，普通、银卡、金卡。",[1174,159712,159713],{},"普通不打折，银卡 9 折，金卡 8 折。",[1174,159715,159716],{},"满 500 再减 50。",[19,159718,11091],{},[29,159720,159722],{"className":31,"code":159721,"language":33,"meta":34,"style":34},"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",[36,159723,159724,159744,159760,159764,159772,159776,159790,159800,159813,159822,159835,159843,159849,159860,159864,159878,159882,159896,159906,159910],{"__ignoreMap":34},[39,159725,159726,159729,159731,159733,159735,159737,159739,159742],{"class":41,"line":42},[39,159727,159728],{"class":45},"amount ",[39,159730,50],{"class":49},[39,159732,110742],{"class":56},[39,159734,1221],{"class":45},[39,159736,54875],{"class":56},[39,159738,1221],{"class":45},[39,159740,159741],{"class":1319},"\"请输入消费金额:\"",[39,159743,31552],{"class":45},[39,159745,159746,159749,159751,159753,159755,159758],{"class":41,"line":74},[39,159747,159748],{"class":45},"level ",[39,159750,50],{"class":49},[39,159752,61659],{"class":56},[39,159754,1221],{"class":45},[39,159756,159757],{"class":1319},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[39,159759,209],{"class":45},[39,159761,159762],{"class":41,"line":99},[39,159763,3458],{"emptyLinePlaceholder":1145},[39,159765,159766,159768,159770],{"class":41,"line":106},[39,159767,158181],{"class":45},[39,159769,50],{"class":49},[39,159771,56753],{"class":56},[39,159773,159774],{"class":41,"line":112},[39,159775,3458],{"emptyLinePlaceholder":1145},[39,159777,159778,159780,159783,159785,159788],{"class":41,"line":118},[39,159779,2596],{"class":49},[39,159781,159782],{"class":45}," level ",[39,159784,4007],{"class":49},[39,159786,159787],{"class":1319}," \"银卡\"",[39,159789,4797],{"class":45},[39,159791,159792,159795,159797],{"class":41,"line":413},[39,159793,159794],{"class":45},"    discount ",[39,159796,50],{"class":49},[39,159798,159799],{"class":56}," 0.9\n",[39,159801,159802,159804,159806,159808,159811],{"class":41,"line":419},[39,159803,158751],{"class":49},[39,159805,159782],{"class":45},[39,159807,4007],{"class":49},[39,159809,159810],{"class":1319}," \"金卡\"",[39,159812,4797],{"class":45},[39,159814,159815,159817,159819],{"class":41,"line":425},[39,159816,159794],{"class":45},[39,159818,50],{"class":49},[39,159820,159821],{"class":56}," 0.8\n",[39,159823,159824,159826,159828,159830,159833],{"class":41,"line":443},[39,159825,158751],{"class":49},[39,159827,159782],{"class":45},[39,159829,4007],{"class":49},[39,159831,159832],{"class":1319}," \"普通\"",[39,159834,4797],{"class":45},[39,159836,159837,159839,159841],{"class":41,"line":449},[39,159838,159794],{"class":45},[39,159840,50],{"class":49},[39,159842,56753],{"class":56},[39,159844,159845,159847],{"class":41,"line":455},[39,159846,2759],{"class":49},[39,159848,4797],{"class":45},[39,159850,159851,159853,159855,159858],{"class":41,"line":461},[39,159852,32354],{"class":56},[39,159854,1221],{"class":45},[39,159856,159857],{"class":1319},"\"会员等级输入错误，按普通会员计算\"",[39,159859,209],{"class":45},[39,159861,159862],{"class":41,"line":475},[39,159863,3458],{"emptyLinePlaceholder":1145},[39,159865,159866,159869,159871,159874,159876],{"class":41,"line":665},[39,159867,159868],{"class":45},"pay ",[39,159870,50],{"class":49},[39,159872,159873],{"class":45}," amount ",[39,159875,1657],{"class":49},[39,159877,158220],{"class":45},[39,159879,159880],{"class":41,"line":671},[39,159881,3458],{"emptyLinePlaceholder":1145},[39,159883,159884,159886,159889,159891,159894],{"class":41,"line":684},[39,159885,2596],{"class":49},[39,159887,159888],{"class":45}," pay ",[39,159890,2768],{"class":49},[39,159892,159893],{"class":56}," 500",[39,159895,4797],{"class":45},[39,159897,159898,159901,159903],{"class":41,"line":2732},[39,159899,159900],{"class":45},"    pay ",[39,159902,151197],{"class":49},[39,159904,159905],{"class":56}," 50\n",[39,159907,159908],{"class":41,"line":2737},[39,159909,3458],{"emptyLinePlaceholder":1145},[39,159911,159912,159914,159916,159918,159920,159922,159925,159927,159929,159931],{"class":41,"line":2751},[39,159913,31470],{"class":56},[39,159915,1221],{"class":45},[39,159917,1270],{"class":49},[39,159919,158301],{"class":1319},[39,159921,2094],{"class":56},[39,159923,159924],{"class":45},"pay",[39,159926,158104],{"class":49},[39,159928,2144],{"class":56},[39,159930,157957],{"class":1319},[39,159932,209],{"class":45},[14,159934,159936],{"id":159935},"_312-易错点","3.12 易错点",[1171,159938,159939,159942,159945,159948,159953],{},[1174,159940,159941],{},"冒号不能漏。",[1174,159943,159944],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[1174,159946,159947],{},"多分支判断要注意顺序。",[1174,159949,159950,159951,29442],{},"判断相等用 ",[36,159952,4007],{},[1174,159954,159955],{},"字符串比较区分大小写：",[29,159957,159959],{"className":31,"code":159958,"language":33,"meta":34,"style":34},"\"Y\" == \"y\"  # False\n",[36,159960,159961],{"__ignoreMap":34},[39,159962,159963,159966,159968,159970],{"class":41,"line":42},[39,159964,159965],{"class":1319},"\"Y\"",[39,159967,102504],{"class":49},[39,159969,158950],{"class":1319},[39,159971,159972],{"class":102},"  # False\n",[19,159974,159975],{},"可转换后再判断：",[29,159977,159979],{"className":31,"code":159978,"language":33,"meta":34,"style":34},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[36,159980,159981,159998,160011],{"__ignoreMap":34},[39,159982,159983,159986,159988,159990,159992,159995],{"class":41,"line":42},[39,159984,159985],{"class":45},"answer ",[39,159987,50],{"class":49},[39,159989,61659],{"class":56},[39,159991,1221],{"class":45},[39,159993,159994],{"class":1319},"\"是否继续(y\u002Fn):\"",[39,159996,159997],{"class":45},").lower()\n",[39,159999,160000,160002,160005,160007,160009],{"class":41,"line":74},[39,160001,2596],{"class":49},[39,160003,160004],{"class":45}," answer ",[39,160006,4007],{"class":49},[39,160008,158950],{"class":1319},[39,160010,4797],{"class":45},[39,160012,160013,160015,160017,160020],{"class":41,"line":99},[39,160014,32354],{"class":56},[39,160016,1221],{"class":45},[39,160018,160019],{"class":1319},"\"继续\"",[39,160021,209],{"class":45},[14,160023,160025],{"id":160024},"_313-本章练习","3.13 本章练习",[1171,160027,160028,160031,160034,160037,160047],{},[1174,160029,160030],{},"输入年龄，判断是否成年。",[1174,160032,160033],{},"输入年份，判断是否为闰年。",[1174,160035,160036],{},"输入三个数字，输出最大值。",[1174,160038,160039,160040,160043,160044,160046],{},"写登录判断：用户名是 ",[36,160041,160042],{},"admin"," 且密码是 ",[36,160045,16140],{}," 才登录成功。",[1174,160048,160049],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1133,160051,160052],{},"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":34,"searchDepth":74,"depth":74,"links":160054},[160055,160056,160057,160058,160059,160060,160065,160066,160067,160068,160069,160070,160071],{"id":158443,"depth":74,"text":158444},{"id":158496,"depth":74,"text":158497},{"id":158600,"depth":74,"text":158601},{"id":158690,"depth":74,"text":158691},{"id":158880,"depth":74,"text":158881},{"id":159003,"depth":74,"text":159004,"children":160061},[160062,160063,160064],{"id":159007,"depth":99,"text":159008},{"id":159064,"depth":99,"text":159065},{"id":159121,"depth":99,"text":159122},{"id":159166,"depth":74,"text":159167},{"id":159257,"depth":74,"text":159258},{"id":159384,"depth":74,"text":159385},{"id":159514,"depth":74,"text":159515},{"id":159699,"depth":74,"text":159700},{"id":159935,"depth":74,"text":159936},{"id":160024,"depth":74,"text":160025},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158435,"description":1142},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160078,"title":160079,"body":160080,"description":1142,"extension":1143,"meta":161849,"navigation":1145,"path":161850,"seo":161851,"stem":161852,"__hash__":161853},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160081,"toc":161829},[160082,160085,160089,160095,160098,160115,160119,160121,160138,160140,160185,160187,160204,160208,160211,160277,160280,160298,160302,160463,160472,160476,160480,160485,160532,160534,160540,160544,160549,160596,160598,160604,160608,160613,160649,160652,160699,160703,160709,160767,160772,160803,160808,160812,160867,160870,160942,160945,161004,161008,161011,161086,161089,161093,161199,161202,161228,161232,161244,161313,161316,161408,161412,161414,161425,161427,161557,161561,161763,161771,161775,161805,161809,161826],[10,160083,160079],{"id":160084},"_4-循环语句",[14,160086,160088],{"id":160087},"_41-为什么需要循环","4.1 为什么需要循环",[19,160090,160091,160092,160094],{},"如果要输出 1 到 100，不应该写 100 行 ",[36,160093,147417],{},"，而应该用循环。",[19,160096,160097],{},"循环适合处理重复任务：",[1171,160099,160100,160103,160106,160109,160112],{},[1174,160101,160102],{},"重复输出。",[1174,160104,160105],{},"重复输入。",[1174,160107,160108],{},"遍历数据。",[1174,160110,160111],{},"持续执行菜单。",[1174,160113,160114],{},"批量处理文件或数据。",[14,160116,160118],{"id":160117},"_42-while循环","4.2 while循环",[19,160120,6238],{},[29,160122,160124],{"className":31,"code":160123,"language":33,"meta":34,"style":34},"while 条件:\n    循环体\n",[36,160125,160126,160133],{"__ignoreMap":34},[39,160127,160128,160130],{"class":41,"line":42},[39,160129,109608],{"class":49},[39,160131,160132],{"class":45}," 条件:\n",[39,160134,160135],{"class":41,"line":74},[39,160136,160137],{"class":45},"    循环体\n",[19,160139,16191],{},[29,160141,160143],{"className":31,"code":160142,"language":33,"meta":34,"style":34},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[36,160144,160145,160153,160157,160169,160176],{"__ignoreMap":34},[39,160146,160147,160149,160151],{"class":41,"line":42},[39,160148,101093],{"class":45},[39,160150,50],{"class":49},[39,160152,56753],{"class":56},[39,160154,160155],{"class":41,"line":74},[39,160156,3458],{"emptyLinePlaceholder":1145},[39,160158,160159,160161,160163,160165,160167],{"class":41,"line":99},[39,160160,109608],{"class":49},[39,160162,10494],{"class":45},[39,160164,2653],{"class":49},[39,160166,3206],{"class":56},[39,160168,4797],{"class":45},[39,160170,160171,160173],{"class":41,"line":106},[39,160172,32354],{"class":56},[39,160174,160175],{"class":45},"(i)\n",[39,160177,160178,160181,160183],{"class":41,"line":112},[39,160179,160180],{"class":45},"    i ",[39,160182,10533],{"class":49},[39,160184,56753],{"class":56},[19,160186,81983],{},[1171,160188,160189,160195,160198,160201],{},[1174,160190,160191,160192,29442],{},"判断条件 ",[36,160193,160194],{},"i \u003C= 5",[1174,160196,160197],{},"条件成立，执行循环体。",[1174,160199,160200],{},"执行完后回到条件判断。",[1174,160202,160203],{},"条件不成立，退出循环。",[14,160205,160207],{"id":160206},"_43-while累加","4.3 while累加",[19,160209,160210],{},"计算 1 到 100 的和：",[29,160212,160214],{"className":31,"code":160213,"language":33,"meta":34,"style":34},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[36,160215,160216,160224,160232,160236,160248,160258,160266,160270],{"__ignoreMap":34},[39,160217,160218,160220,160222],{"class":41,"line":42},[39,160219,101093],{"class":45},[39,160221,50],{"class":49},[39,160223,56753],{"class":56},[39,160225,160226,160228,160230],{"class":41,"line":74},[39,160227,158205],{"class":45},[39,160229,50],{"class":49},[39,160231,48388],{"class":56},[39,160233,160234],{"class":41,"line":99},[39,160235,3458],{"emptyLinePlaceholder":1145},[39,160237,160238,160240,160242,160244,160246],{"class":41,"line":106},[39,160239,109608],{"class":49},[39,160241,10494],{"class":45},[39,160243,2653],{"class":49},[39,160245,6810],{"class":56},[39,160247,4797],{"class":45},[39,160249,160250,160253,160255],{"class":41,"line":112},[39,160251,160252],{"class":45},"    total ",[39,160254,10533],{"class":49},[39,160256,160257],{"class":45}," i\n",[39,160259,160260,160262,160264],{"class":41,"line":118},[39,160261,160180],{"class":45},[39,160263,10533],{"class":49},[39,160265,56753],{"class":56},[39,160267,160268],{"class":41,"line":413},[39,160269,3458],{"emptyLinePlaceholder":1145},[39,160271,160272,160274],{"class":41,"line":419},[39,160273,31470],{"class":56},[39,160275,160276],{"class":45},"(total)\n",[19,160278,160279],{},"核心思想：",[1171,160281,160282,160287,160292],{},[1174,160283,160284,160286],{},[36,160285,1644],{}," 控制循环次数。",[1174,160288,160289,160291],{},[36,160290,158306],{}," 保存累加结果。",[1174,160293,160294,160295,160297],{},"每轮循环都要更新 ",[36,160296,1644],{},"，否则可能死循环。",[14,160299,160301],{"id":160300},"_44-while猜数字","4.4 while猜数字",[29,160303,160305],{"className":31,"code":160304,"language":33,"meta":34,"style":34},"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",[36,160306,160307,160313,160317,160334,160342,160346,160354,160374,160383,160387,160399,160410,160420,160431,160437,160459],{"__ignoreMap":34},[39,160308,160309,160311],{"class":41,"line":42},[39,160310,31447],{"class":49},[39,160312,46383],{"class":45},[39,160314,160315],{"class":41,"line":74},[39,160316,3458],{"emptyLinePlaceholder":1145},[39,160318,160319,160321,160323,160326,160328,160330,160332],{"class":41,"line":99},[39,160320,159985],{"class":45},[39,160322,50],{"class":49},[39,160324,160325],{"class":45}," random.randint(",[39,160327,57],{"class":56},[39,160329,13491],{"class":45},[39,160331,1519],{"class":56},[39,160333,209],{"class":45},[39,160335,160336,160338,160340],{"class":41,"line":106},[39,160337,147636],{"class":45},[39,160339,50],{"class":49},[39,160341,48388],{"class":56},[39,160343,160344],{"class":41,"line":112},[39,160345,3458],{"emptyLinePlaceholder":1145},[39,160347,160348,160350,160352],{"class":41,"line":118},[39,160349,109608],{"class":49},[39,160351,96342],{"class":56},[39,160353,4797],{"class":45},[39,160355,160356,160359,160361,160363,160365,160367,160369,160372],{"class":41,"line":413},[39,160357,160358],{"class":45},"    guess ",[39,160360,50],{"class":49},[39,160362,3440],{"class":56},[39,160364,1221],{"class":45},[39,160366,54875],{"class":56},[39,160368,1221],{"class":45},[39,160370,160371],{"class":1319},"\"请输入1到100之间的数字:\"",[39,160373,31552],{"class":45},[39,160375,160376,160379,160381],{"class":41,"line":419},[39,160377,160378],{"class":45},"    count ",[39,160380,10533],{"class":49},[39,160382,56753],{"class":56},[39,160384,160385],{"class":41,"line":425},[39,160386,3458],{"emptyLinePlaceholder":1145},[39,160388,160389,160391,160394,160396],{"class":41,"line":443},[39,160390,4159],{"class":49},[39,160392,160393],{"class":45}," guess ",[39,160395,2158],{"class":49},[39,160397,160398],{"class":45}," answer:\n",[39,160400,160401,160403,160405,160408],{"class":41,"line":449},[39,160402,33506],{"class":56},[39,160404,1221],{"class":45},[39,160406,160407],{"class":1319},"\"猜大了\"",[39,160409,209],{"class":45},[39,160411,160412,160414,160416,160418],{"class":41,"line":455},[39,160413,40348],{"class":49},[39,160415,160393],{"class":45},[39,160417,2108],{"class":49},[39,160419,160398],{"class":45},[39,160421,160422,160424,160426,160429],{"class":41,"line":461},[39,160423,33506],{"class":56},[39,160425,1221],{"class":45},[39,160427,160428],{"class":1319},"\"猜小了\"",[39,160430,209],{"class":45},[39,160432,160433,160435],{"class":41,"line":475},[39,160434,158967],{"class":49},[39,160436,4797],{"class":45},[39,160438,160439,160441,160443,160445,160448,160450,160452,160454,160457],{"class":41,"line":665},[39,160440,33506],{"class":56},[39,160442,1221],{"class":45},[39,160444,1270],{"class":49},[39,160446,160447],{"class":1319},"\"猜对了，一共猜了",[39,160449,2094],{"class":56},[39,160451,85488],{"class":45},[39,160453,2144],{"class":56},[39,160455,160456],{"class":1319},"次\"",[39,160458,209],{"class":45},[39,160460,160461],{"class":41,"line":671},[39,160462,32682],{"class":49},[19,160464,160465,160468,160469,160471],{},[36,160466,160467],{},"while True"," 表示无限循环，通常配合 ",[36,160470,3111],{}," 使用。",[14,160473,160475],{"id":160474},"_45-break和continue","4.5 break和continue",[1188,160477,160479],{"id":160478},"_451-break","4.5.1 break",[19,160481,160482,160484],{},[36,160483,3111],{}," 直接结束整个循环。",[29,160486,160488],{"className":31,"code":160487,"language":33,"meta":34,"style":34},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[36,160489,160490,160510,160522,160526],{"__ignoreMap":34},[39,160491,160492,160494,160496,160498,160500,160502,160504,160506,160508],{"class":41,"line":42},[39,160493,4083],{"class":49},[39,160495,10494],{"class":45},[39,160497,27100],{"class":49},[39,160499,33498],{"class":56},[39,160501,1221],{"class":45},[39,160503,57],{"class":56},[39,160505,13491],{"class":45},[39,160507,94],{"class":56},[39,160509,31841],{"class":45},[39,160511,160512,160514,160516,160518,160520],{"class":41,"line":74},[39,160513,4159],{"class":49},[39,160515,10494],{"class":45},[39,160517,4007],{"class":49},[39,160519,79124],{"class":56},[39,160521,4797],{"class":45},[39,160523,160524],{"class":41,"line":99},[39,160525,32682],{"class":49},[39,160527,160528,160530],{"class":41,"line":106},[39,160529,32354],{"class":56},[39,160531,160175],{"class":45},[19,160533,147402],{},[29,160535,160538],{"className":160536,"code":160537,"language":6244,"meta":34},[6242],"1\n2\n",[36,160539,160537],{"__ignoreMap":34},[1188,160541,160543],{"id":160542},"_452-continue","4.5.2 continue",[19,160545,160546,160548],{},[36,160547,155617],{}," 跳过本轮剩余代码，进入下一轮循环。",[29,160550,160552],{"className":31,"code":160551,"language":33,"meta":34,"style":34},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[36,160553,160554,160574,160586,160590],{"__ignoreMap":34},[39,160555,160556,160558,160560,160562,160564,160566,160568,160570,160572],{"class":41,"line":42},[39,160557,4083],{"class":49},[39,160559,10494],{"class":45},[39,160561,27100],{"class":49},[39,160563,33498],{"class":56},[39,160565,1221],{"class":45},[39,160567,57],{"class":56},[39,160569,13491],{"class":45},[39,160571,94],{"class":56},[39,160573,31841],{"class":45},[39,160575,160576,160578,160580,160582,160584],{"class":41,"line":74},[39,160577,4159],{"class":49},[39,160579,10494],{"class":45},[39,160581,4007],{"class":49},[39,160583,79124],{"class":56},[39,160585,4797],{"class":45},[39,160587,160588],{"class":41,"line":99},[39,160589,149457],{"class":49},[39,160591,160592,160594],{"class":41,"line":106},[39,160593,32354],{"class":56},[39,160595,160175],{"class":45},[19,160597,147402],{},[29,160599,160602],{"className":160600,"code":160601,"language":6244,"meta":34},[6242],"1\n2\n4\n5\n",[36,160603,160601],{"__ignoreMap":34},[14,160605,160607],{"id":160606},"_46-for循环","4.6 for循环",[19,160609,160610,160612],{},[36,160611,4083],{}," 常用于遍历序列。",[29,160614,160616],{"className":31,"code":160615,"language":33,"meta":34,"style":34},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[36,160617,160618,160627,160631,160642],{"__ignoreMap":34},[39,160619,160620,160622,160624],{"class":41,"line":42},[39,160621,147481],{"class":45},[39,160623,50],{"class":49},[39,160625,160626],{"class":1319}," \"python\"\n",[39,160628,160629],{"class":41,"line":74},[39,160630,3458],{"emptyLinePlaceholder":1145},[39,160632,160633,160635,160638,160640],{"class":41,"line":99},[39,160634,4083],{"class":49},[39,160636,160637],{"class":45}," ch ",[39,160639,27100],{"class":49},[39,160641,159344],{"class":45},[39,160643,160644,160646],{"class":41,"line":106},[39,160645,32354],{"class":56},[39,160647,160648],{"class":45},"(ch)\n",[19,160650,160651],{},"遍历列表：",[29,160653,160655],{"className":31,"code":160654,"language":33,"meta":34,"style":34},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[36,160656,160657,160679,160683,160693],{"__ignoreMap":34},[39,160658,160659,160662,160664,160666,160668,160670,160672,160674,160677],{"class":41,"line":42},[39,160660,160661],{"class":45},"students ",[39,160663,50],{"class":49},[39,160665,53280],{"class":45},[39,160667,150833],{"class":1319},[39,160669,13491],{"class":45},[39,160671,151881],{"class":1319},[39,160673,13491],{"class":45},[39,160675,160676],{"class":1319},"\"小刚\"",[39,160678,34301],{"class":45},[39,160680,160681],{"class":41,"line":74},[39,160682,3458],{"emptyLinePlaceholder":1145},[39,160684,160685,160687,160689,160691],{"class":41,"line":99},[39,160686,4083],{"class":49},[39,160688,153082],{"class":45},[39,160690,27100],{"class":49},[39,160692,153087],{"class":45},[39,160694,160695,160697],{"class":41,"line":106},[39,160696,32354],{"class":56},[39,160698,150987],{"class":45},[14,160700,160702],{"id":160701},"_47-range函数","4.7 range函数",[19,160704,160705,160708],{},[36,160706,160707],{},"range()"," 用于生成整数序列。",[29,160710,160712],{"className":31,"code":160711,"language":33,"meta":34,"style":34},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[36,160713,160714,160728,160746],{"__ignoreMap":34},[39,160715,160716,160718,160720,160722,160725],{"class":41,"line":42},[39,160717,34471],{"class":56},[39,160719,1221],{"class":45},[39,160721,89],{"class":56},[39,160723,160724],{"class":45},")          ",[39,160726,160727],{"class":102},"# 0,1,2,3,4\n",[39,160729,160730,160732,160734,160736,160738,160740,160743],{"class":41,"line":74},[39,160731,34471],{"class":56},[39,160733,1221],{"class":45},[39,160735,57],{"class":56},[39,160737,13491],{"class":45},[39,160739,89],{"class":56},[39,160741,160742],{"class":45},")       ",[39,160744,160745],{"class":102},"# 1,2,3,4\n",[39,160747,160748,160750,160752,160754,160756,160758,160760,160762,160764],{"class":41,"line":99},[39,160749,34471],{"class":56},[39,160751,1221],{"class":45},[39,160753,57],{"class":56},[39,160755,13491],{"class":45},[39,160757,146],{"class":56},[39,160759,13491],{"class":45},[39,160761,63],{"class":56},[39,160763,156606],{"class":45},[39,160765,160766],{"class":102},"# 1,3,5,7,9\n",[19,160768,160769,160770,25675],{},"配合 ",[36,160771,4083],{},[29,160773,160775],{"className":31,"code":160774,"language":33,"meta":34,"style":34},"for i in range(1, 6):\n    print(i)\n",[36,160776,160777,160797],{"__ignoreMap":34},[39,160778,160779,160781,160783,160785,160787,160789,160791,160793,160795],{"class":41,"line":42},[39,160780,4083],{"class":49},[39,160782,10494],{"class":45},[39,160784,27100],{"class":49},[39,160786,33498],{"class":56},[39,160788,1221],{"class":45},[39,160790,57],{"class":56},[39,160792,13491],{"class":45},[39,160794,94],{"class":56},[39,160796,31841],{"class":45},[39,160798,160799,160801],{"class":41,"line":74},[39,160800,32354],{"class":56},[39,160802,160175],{"class":45},[19,160804,10081,160805,160807],{},[36,160806,34471],{}," 的结束值不包含在内。",[14,160809,160811],{"id":160810},"_48-for循环求和","4.8 for循环求和",[29,160813,160815],{"className":31,"code":160814,"language":33,"meta":34,"style":34},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[36,160816,160817,160825,160829,160849,160857,160861],{"__ignoreMap":34},[39,160818,160819,160821,160823],{"class":41,"line":42},[39,160820,158205],{"class":45},[39,160822,50],{"class":49},[39,160824,48388],{"class":56},[39,160826,160827],{"class":41,"line":74},[39,160828,3458],{"emptyLinePlaceholder":1145},[39,160830,160831,160833,160835,160837,160839,160841,160843,160845,160847],{"class":41,"line":99},[39,160832,4083],{"class":49},[39,160834,10494],{"class":45},[39,160836,27100],{"class":49},[39,160838,33498],{"class":56},[39,160840,1221],{"class":45},[39,160842,57],{"class":56},[39,160844,13491],{"class":45},[39,160846,221],{"class":56},[39,160848,31841],{"class":45},[39,160850,160851,160853,160855],{"class":41,"line":106},[39,160852,160252],{"class":45},[39,160854,10533],{"class":49},[39,160856,160257],{"class":45},[39,160858,160859],{"class":41,"line":112},[39,160860,3458],{"emptyLinePlaceholder":1145},[39,160862,160863,160865],{"class":41,"line":118},[39,160864,31470],{"class":56},[39,160866,160276],{"class":45},[19,160868,160869],{},"求偶数和：",[29,160871,160873],{"className":31,"code":160872,"language":33,"meta":34,"style":34},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[36,160874,160875,160883,160887,160907,160923,160932,160936],{"__ignoreMap":34},[39,160876,160877,160879,160881],{"class":41,"line":42},[39,160878,158205],{"class":45},[39,160880,50],{"class":49},[39,160882,48388],{"class":56},[39,160884,160885],{"class":41,"line":74},[39,160886,3458],{"emptyLinePlaceholder":1145},[39,160888,160889,160891,160893,160895,160897,160899,160901,160903,160905],{"class":41,"line":99},[39,160890,4083],{"class":49},[39,160892,10494],{"class":45},[39,160894,27100],{"class":49},[39,160896,33498],{"class":56},[39,160898,1221],{"class":45},[39,160900,57],{"class":56},[39,160902,13491],{"class":45},[39,160904,221],{"class":56},[39,160906,31841],{"class":45},[39,160908,160909,160911,160913,160915,160917,160919,160921],{"class":41,"line":106},[39,160910,4159],{"class":49},[39,160912,10494],{"class":45},[39,160914,1534],{"class":49},[39,160916,15811],{"class":56},[39,160918,102504],{"class":49},[39,160920,5151],{"class":56},[39,160922,4797],{"class":45},[39,160924,160925,160928,160930],{"class":41,"line":112},[39,160926,160927],{"class":45},"        total ",[39,160929,10533],{"class":49},[39,160931,160257],{"class":45},[39,160933,160934],{"class":41,"line":118},[39,160935,3458],{"emptyLinePlaceholder":1145},[39,160937,160938,160940],{"class":41,"line":413},[39,160939,31470],{"class":56},[39,160941,160276],{"class":45},[19,160943,160944],{},"也可以：",[29,160946,160948],{"className":31,"code":160947,"language":33,"meta":34,"style":34},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[36,160949,160950,160958,160962,160986,160994,160998],{"__ignoreMap":34},[39,160951,160952,160954,160956],{"class":41,"line":42},[39,160953,158205],{"class":45},[39,160955,50],{"class":49},[39,160957,48388],{"class":56},[39,160959,160960],{"class":41,"line":74},[39,160961,3458],{"emptyLinePlaceholder":1145},[39,160963,160964,160966,160968,160970,160972,160974,160976,160978,160980,160982,160984],{"class":41,"line":99},[39,160965,4083],{"class":49},[39,160967,10494],{"class":45},[39,160969,27100],{"class":49},[39,160971,33498],{"class":56},[39,160973,1221],{"class":45},[39,160975,63],{"class":56},[39,160977,13491],{"class":45},[39,160979,221],{"class":56},[39,160981,13491],{"class":45},[39,160983,63],{"class":56},[39,160985,31841],{"class":45},[39,160987,160988,160990,160992],{"class":41,"line":106},[39,160989,160252],{"class":45},[39,160991,10533],{"class":49},[39,160993,160257],{"class":45},[39,160995,160996],{"class":41,"line":112},[39,160997,3458],{"emptyLinePlaceholder":1145},[39,160999,161000,161002],{"class":41,"line":118},[39,161001,31470],{"class":56},[39,161003,160276],{"class":45},[14,161005,161007],{"id":161006},"_49-循环嵌套","4.9 循环嵌套",[19,161009,161010],{},"嵌套循环就是循环里面再写循环。",[29,161012,161014],{"className":31,"code":161013,"language":33,"meta":34,"style":34},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[36,161015,161016,161036,161056],{"__ignoreMap":34},[39,161017,161018,161020,161022,161024,161026,161028,161030,161032,161034],{"class":41,"line":42},[39,161019,4083],{"class":49},[39,161021,10494],{"class":45},[39,161023,27100],{"class":49},[39,161025,33498],{"class":56},[39,161027,1221],{"class":45},[39,161029,57],{"class":56},[39,161031,13491],{"class":45},[39,161033,84],{"class":56},[39,161035,31841],{"class":45},[39,161037,161038,161040,161042,161044,161046,161048,161050,161052,161054],{"class":41,"line":74},[39,161039,4259],{"class":49},[39,161041,10556],{"class":45},[39,161043,27100],{"class":49},[39,161045,33498],{"class":56},[39,161047,1221],{"class":45},[39,161049,57],{"class":56},[39,161051,13491],{"class":45},[39,161053,84],{"class":56},[39,161055,31841],{"class":45},[39,161057,161058,161060,161062,161064,161067,161069,161071,161073,161076,161078,161080,161082,161084],{"class":41,"line":99},[39,161059,33506],{"class":56},[39,161061,1221],{"class":45},[39,161063,1270],{"class":49},[39,161065,161066],{"class":1319},"\"i=",[39,161068,2094],{"class":56},[39,161070,1644],{"class":45},[39,161072,2144],{"class":56},[39,161074,161075],{"class":1319},", j=",[39,161077,2094],{"class":56},[39,161079,1669],{"class":45},[39,161081,2144],{"class":56},[39,161083,1462],{"class":1319},[39,161085,209],{"class":45},[19,161087,161088],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161090,161092],{"id":161091},"_410-九九乘法表","4.10 九九乘法表",[29,161094,161096],{"className":31,"code":161095,"language":33,"meta":34,"style":34},"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",[36,161097,161098,161118,161141,161193],{"__ignoreMap":34},[39,161099,161100,161102,161104,161106,161108,161110,161112,161114,161116],{"class":41,"line":42},[39,161101,4083],{"class":49},[39,161103,10494],{"class":45},[39,161105,27100],{"class":49},[39,161107,33498],{"class":56},[39,161109,1221],{"class":45},[39,161111,57],{"class":56},[39,161113,13491],{"class":45},[39,161115,146],{"class":56},[39,161117,31841],{"class":45},[39,161119,161120,161122,161124,161126,161128,161130,161132,161135,161137,161139],{"class":41,"line":74},[39,161121,4259],{"class":49},[39,161123,10556],{"class":45},[39,161125,27100],{"class":49},[39,161127,33498],{"class":56},[39,161129,1221],{"class":45},[39,161131,57],{"class":56},[39,161133,161134],{"class":45},", i ",[39,161136,1682],{"class":49},[39,161138,26175],{"class":56},[39,161140,31841],{"class":45},[39,161142,161143,161145,161147,161149,161151,161153,161155,161157,161159,161161,161163,161165,161167,161169,161171,161173,161175,161177,161179,161181,161183,161185,161187,161189,161191],{"class":41,"line":99},[39,161144,33506],{"class":56},[39,161146,1221],{"class":45},[39,161148,1270],{"class":49},[39,161150,1462],{"class":1319},[39,161152,2094],{"class":56},[39,161154,1669],{"class":45},[39,161156,2144],{"class":56},[39,161158,1657],{"class":1319},[39,161160,2094],{"class":56},[39,161162,1644],{"class":45},[39,161164,2144],{"class":56},[39,161166,50],{"class":1319},[39,161168,2094],{"class":56},[39,161170,101093],{"class":45},[39,161172,1657],{"class":49},[39,161174,4468],{"class":45},[39,161176,2144],{"class":56},[39,161178,1462],{"class":1319},[39,161180,13491],{"class":45},[39,161182,46856],{"class":254},[39,161184,50],{"class":49},[39,161186,1462],{"class":1319},[39,161188,2299],{"class":56},[39,161190,1462],{"class":1319},[39,161192,209],{"class":45},[39,161194,161195,161197],{"class":41,"line":106},[39,161196,32354],{"class":56},[39,161198,3034],{"class":45},[19,161200,161201],{},"关键点：",[1171,161203,161204,161210,161216,161222],{},[1174,161205,161206,161207,161209],{},"外层 ",[36,161208,1644],{}," 控制行。",[1174,161211,161212,161213,161215],{},"内层 ",[36,161214,1669],{}," 控制列。",[1174,161217,161218,161219,161221],{},"每行结束后用 ",[36,161220,147417],{}," 换行。",[1174,161223,161224,161227],{},[36,161225,161226],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161229,161231],{"id":161230},"_411-循环else","4.11 循环else",[19,161233,161234,161235,161237,161238,161240,161241,161243],{},"Python 的循环可以带 ",[36,161236,2759],{},"。当循环正常结束时执行 ",[36,161239,2759],{},"，如果被 ",[36,161242,3111],{}," 打断，则不执行。",[29,161245,161247],{"className":31,"code":161246,"language":33,"meta":34,"style":34},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[36,161248,161249,161269,161281,161292,161296,161302],{"__ignoreMap":34},[39,161250,161251,161253,161255,161257,161259,161261,161263,161265,161267],{"class":41,"line":42},[39,161252,4083],{"class":49},[39,161254,10494],{"class":45},[39,161256,27100],{"class":49},[39,161258,33498],{"class":56},[39,161260,1221],{"class":45},[39,161262,57],{"class":56},[39,161264,13491],{"class":45},[39,161266,94],{"class":56},[39,161268,31841],{"class":45},[39,161270,161271,161273,161275,161277,161279],{"class":41,"line":74},[39,161272,4159],{"class":49},[39,161274,10494],{"class":45},[39,161276,4007],{"class":49},[39,161278,3096],{"class":56},[39,161280,4797],{"class":45},[39,161282,161283,161285,161287,161290],{"class":41,"line":99},[39,161284,33506],{"class":56},[39,161286,1221],{"class":45},[39,161288,161289],{"class":1319},"\"找到了\"",[39,161291,209],{"class":45},[39,161293,161294],{"class":41,"line":106},[39,161295,32682],{"class":49},[39,161297,161298,161300],{"class":41,"line":112},[39,161299,2759],{"class":49},[39,161301,4797],{"class":45},[39,161303,161304,161306,161308,161311],{"class":41,"line":118},[39,161305,32354],{"class":56},[39,161307,1221],{"class":45},[39,161309,161310],{"class":1319},"\"没找到\"",[39,161312,209],{"class":45},[19,161314,161315],{},"常用于搜索。",[29,161317,161319],{"className":31,"code":161318,"language":33,"meta":34,"style":34},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[36,161320,161321,161342,161351,161355,161367,161378,161388,161392,161398],{"__ignoreMap":34},[39,161322,161323,161326,161328,161330,161332,161334,161336,161338,161340],{"class":41,"line":42},[39,161324,161325],{"class":45},"names ",[39,161327,50],{"class":49},[39,161329,53280],{"class":45},[39,161331,150833],{"class":1319},[39,161333,13491],{"class":45},[39,161335,151881],{"class":1319},[39,161337,13491],{"class":45},[39,161339,160676],{"class":1319},[39,161341,34301],{"class":45},[39,161343,161344,161346,161348],{"class":41,"line":74},[39,161345,112523],{"class":45},[39,161347,50],{"class":49},[39,161349,161350],{"class":1319}," \"小李\"\n",[39,161352,161353],{"class":41,"line":99},[39,161354,3458],{"emptyLinePlaceholder":1145},[39,161356,161357,161359,161362,161364],{"class":41,"line":106},[39,161358,4083],{"class":49},[39,161360,161361],{"class":45}," name ",[39,161363,27100],{"class":49},[39,161365,161366],{"class":45}," names:\n",[39,161368,161369,161371,161373,161375],{"class":41,"line":112},[39,161370,4159],{"class":49},[39,161372,161361],{"class":45},[39,161374,4007],{"class":49},[39,161376,161377],{"class":45}," target:\n",[39,161379,161380,161382,161384,161386],{"class":41,"line":118},[39,161381,33506],{"class":56},[39,161383,1221],{"class":45},[39,161385,161289],{"class":1319},[39,161387,209],{"class":45},[39,161389,161390],{"class":41,"line":413},[39,161391,32682],{"class":49},[39,161393,161394,161396],{"class":41,"line":419},[39,161395,2759],{"class":49},[39,161397,4797],{"class":45},[39,161399,161400,161402,161404,161406],{"class":41,"line":425},[39,161401,32354],{"class":56},[39,161403,1221],{"class":45},[39,161405,161310],{"class":1319},[39,161407,209],{"class":45},[14,161409,161411],{"id":161410},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161413,124237],{},[1171,161415,161416,161419,161422],{},[1174,161417,161418],{},"用户最多输入 3 次密码。",[1174,161420,161421],{},"密码正确则登录成功。",[1174,161423,161424],{},"3 次都错误则锁定账号。",[19,161426,11091],{},[29,161428,161430],{"className":31,"code":161429,"language":33,"meta":34,"style":34},"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",[36,161431,161432,161442,161446,161462,161478,161482,161494,161505,161509,161515,161540,161546],{"__ignoreMap":34},[39,161433,161434,161437,161439],{"class":41,"line":42},[39,161435,161436],{"class":45},"password ",[39,161438,50],{"class":49},[39,161440,161441],{"class":1319}," \"123456\"\n",[39,161443,161444],{"class":41,"line":74},[39,161445,3458],{"emptyLinePlaceholder":1145},[39,161447,161448,161450,161452,161454,161456,161458,161460],{"class":41,"line":99},[39,161449,4083],{"class":49},[39,161451,10494],{"class":45},[39,161453,27100],{"class":49},[39,161455,33498],{"class":56},[39,161457,1221],{"class":45},[39,161459,68],{"class":56},[39,161461,31841],{"class":45},[39,161463,161464,161467,161469,161471,161473,161476],{"class":41,"line":106},[39,161465,161466],{"class":45},"    user_password ",[39,161468,50],{"class":49},[39,161470,61659],{"class":56},[39,161472,1221],{"class":45},[39,161474,161475],{"class":1319},"\"请输入密码:\"",[39,161477,209],{"class":45},[39,161479,161480],{"class":41,"line":112},[39,161481,3458],{"emptyLinePlaceholder":1145},[39,161483,161484,161486,161489,161491],{"class":41,"line":118},[39,161485,4159],{"class":49},[39,161487,161488],{"class":45}," user_password ",[39,161490,4007],{"class":49},[39,161492,161493],{"class":45}," password:\n",[39,161495,161496,161498,161500,161503],{"class":41,"line":413},[39,161497,33506],{"class":56},[39,161499,1221],{"class":45},[39,161501,161502],{"class":1319},"\"登录成功\"",[39,161504,209],{"class":45},[39,161506,161507],{"class":41,"line":419},[39,161508,32682],{"class":49},[39,161510,161511,161513],{"class":41,"line":425},[39,161512,158967],{"class":49},[39,161514,4797],{"class":45},[39,161516,161517,161519,161521,161523,161526,161529,161531,161533,161535,161538],{"class":41,"line":443},[39,161518,33506],{"class":56},[39,161520,1221],{"class":45},[39,161522,1270],{"class":49},[39,161524,161525],{"class":1319},"\"密码错误，还剩",[39,161527,161528],{"class":56},"{2",[39,161530,53325],{"class":49},[39,161532,4090],{"class":45},[39,161534,2144],{"class":56},[39,161536,161537],{"class":1319},"次机会\"",[39,161539,209],{"class":45},[39,161541,161542,161544],{"class":41,"line":449},[39,161543,2759],{"class":49},[39,161545,4797],{"class":45},[39,161547,161548,161550,161552,161555],{"class":41,"line":455},[39,161549,32354],{"class":56},[39,161551,1221],{"class":45},[39,161553,161554],{"class":1319},"\"账号已锁定\"",[39,161556,209],{"class":45},[14,161558,161560],{"id":161559},"_413-小案例菜单程序","4.13 小案例：菜单程序",[29,161562,161564],{"className":31,"code":161563,"language":33,"meta":34,"style":34},"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",[36,161565,161566,161574,161585,161596,161607,161618,161629,161633,161648,161652,161664,161675,161687,161698,161710,161721,161733,161743,161747,161753],{"__ignoreMap":34},[39,161567,161568,161570,161572],{"class":41,"line":42},[39,161569,109608],{"class":49},[39,161571,96342],{"class":56},[39,161573,4797],{"class":45},[39,161575,161576,161578,161580,161583],{"class":41,"line":74},[39,161577,32354],{"class":56},[39,161579,1221],{"class":45},[39,161581,161582],{"class":1319},"\"====== 菜单 ======\"",[39,161584,209],{"class":45},[39,161586,161587,161589,161591,161594],{"class":41,"line":99},[39,161588,32354],{"class":56},[39,161590,1221],{"class":45},[39,161592,161593],{"class":1319},"\"1. 查询余额\"",[39,161595,209],{"class":45},[39,161597,161598,161600,161602,161605],{"class":41,"line":106},[39,161599,32354],{"class":56},[39,161601,1221],{"class":45},[39,161603,161604],{"class":1319},"\"2. 存款\"",[39,161606,209],{"class":45},[39,161608,161609,161611,161613,161616],{"class":41,"line":112},[39,161610,32354],{"class":56},[39,161612,1221],{"class":45},[39,161614,161615],{"class":1319},"\"3. 取款\"",[39,161617,209],{"class":45},[39,161619,161620,161622,161624,161627],{"class":41,"line":118},[39,161621,32354],{"class":56},[39,161623,1221],{"class":45},[39,161625,161626],{"class":1319},"\"0. 退出\"",[39,161628,209],{"class":45},[39,161630,161631],{"class":41,"line":413},[39,161632,3458],{"emptyLinePlaceholder":1145},[39,161634,161635,161638,161640,161642,161644,161646],{"class":41,"line":419},[39,161636,161637],{"class":45},"    choice ",[39,161639,50],{"class":49},[39,161641,61659],{"class":56},[39,161643,1221],{"class":45},[39,161645,154018],{"class":1319},[39,161647,209],{"class":45},[39,161649,161650],{"class":41,"line":425},[39,161651,3458],{"emptyLinePlaceholder":1145},[39,161653,161654,161656,161658,161660,161662],{"class":41,"line":443},[39,161655,4159],{"class":49},[39,161657,154031],{"class":45},[39,161659,4007],{"class":49},[39,161661,154036],{"class":1319},[39,161663,4797],{"class":45},[39,161665,161666,161668,161670,161673],{"class":41,"line":449},[39,161667,33506],{"class":56},[39,161669,1221],{"class":45},[39,161671,161672],{"class":1319},"\"余额为1000元\"",[39,161674,209],{"class":45},[39,161676,161677,161679,161681,161683,161685],{"class":41,"line":455},[39,161678,40348],{"class":49},[39,161680,154031],{"class":45},[39,161682,4007],{"class":49},[39,161684,154055],{"class":1319},[39,161686,4797],{"class":45},[39,161688,161689,161691,161693,161696],{"class":41,"line":461},[39,161690,33506],{"class":56},[39,161692,1221],{"class":45},[39,161694,161695],{"class":1319},"\"存款功能\"",[39,161697,209],{"class":45},[39,161699,161700,161702,161704,161706,161708],{"class":41,"line":475},[39,161701,40348],{"class":49},[39,161703,154031],{"class":45},[39,161705,4007],{"class":49},[39,161707,154073],{"class":1319},[39,161709,4797],{"class":45},[39,161711,161712,161714,161716,161719],{"class":41,"line":665},[39,161713,33506],{"class":56},[39,161715,1221],{"class":45},[39,161717,161718],{"class":1319},"\"取款功能\"",[39,161720,209],{"class":45},[39,161722,161723,161725,161727,161729,161731],{"class":41,"line":671},[39,161724,40348],{"class":49},[39,161726,154031],{"class":45},[39,161728,4007],{"class":49},[39,161730,154127],{"class":1319},[39,161732,4797],{"class":45},[39,161734,161735,161737,161739,161741],{"class":41,"line":684},[39,161736,33506],{"class":56},[39,161738,1221],{"class":45},[39,161740,154138],{"class":1319},[39,161742,209],{"class":45},[39,161744,161745],{"class":41,"line":2732},[39,161746,32682],{"class":49},[39,161748,161749,161751],{"class":41,"line":2737},[39,161750,158967],{"class":49},[39,161752,4797],{"class":45},[39,161754,161755,161757,161759,161761],{"class":41,"line":2751},[39,161756,33506],{"class":56},[39,161758,1221],{"class":45},[39,161760,154159],{"class":1319},[39,161762,209],{"class":45},[19,161764,161765,161766,161768,161769,29442],{},"菜单类程序通常使用 ",[36,161767,160467],{},"，用户选择退出时 ",[36,161770,3111],{},[14,161772,161774],{"id":161773},"_414-易错点","4.14 易错点",[1171,161776,161777,161782,161788,161796,161802],{},[1174,161778,161779,161781],{},[36,161780,109608],{}," 循环必须更新控制变量。",[1174,161783,161784,161787],{},[36,161785,161786],{},"range(1, 10)"," 不包含 10。",[1174,161789,161790,161792,161793,161795],{},[36,161791,3111],{}," 结束整个循环，",[36,161794,155617],{}," 只跳过本轮。",[1174,161797,161798,161799,161801],{},"嵌套循环中，",[36,161800,3111],{}," 只跳出当前所在的一层循环。",[1174,161803,161804],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161806,161808],{"id":161807},"_415-本章练习","4.15 本章练习",[1171,161810,161811,161814,161817,161820,161823],{},[1174,161812,161813],{},"输出 1 到 100。",[1174,161815,161816],{},"计算 1 到 100 的偶数和。",[1174,161818,161819],{},"输出 100 以内能被 3 和 5 同时整除的数。",[1174,161821,161822],{},"编写猜数字游戏，限制最多猜 7 次。",[1174,161824,161825],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1133,161827,161828],{},"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":34,"searchDepth":74,"depth":74,"links":161830},[161831,161832,161833,161834,161835,161839,161840,161841,161842,161843,161844,161845,161846,161847,161848],{"id":160087,"depth":74,"text":160088},{"id":160117,"depth":74,"text":160118},{"id":160206,"depth":74,"text":160207},{"id":160300,"depth":74,"text":160301},{"id":160474,"depth":74,"text":160475,"children":161836},[161837,161838],{"id":160478,"depth":99,"text":160479},{"id":160542,"depth":99,"text":160543},{"id":160606,"depth":74,"text":160607},{"id":160701,"depth":74,"text":160702},{"id":160810,"depth":74,"text":160811},{"id":161006,"depth":74,"text":161007},{"id":161091,"depth":74,"text":161092},{"id":161230,"depth":74,"text":161231},{"id":161410,"depth":74,"text":161411},{"id":161559,"depth":74,"text":161560},{"id":161773,"depth":74,"text":161774},{"id":161807,"depth":74,"text":161808},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160079,"description":1142},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161855,"title":161856,"body":161857,"description":1142,"extension":1143,"meta":163862,"navigation":1145,"path":163863,"seo":163864,"stem":163865,"__hash__":163866},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161858,"toc":163842},[161859,161862,161866,161869,161872,161886,161889,161903,161907,161909,161928,161930,161977,161979,161993,161997,162071,162074,162078,162081,162140,162148,162151,162204,162207,162211,162216,162271,162279,162329,162333,162338,162346,162445,162451,162455,162460,162463,162474,162515,162528,162532,162535,162571,162574,162587,162590,162650,162654,162658,162661,162712,162716,162719,162766,162772,162838,162841,162845,162848,162964,162967,162971,162974,163080,163084,163087,163125,163128,163170,163173,163233,163236,163240,163704,163707,163711,163738,163744,163805,163809,163839],[10,161860,161856],{"id":161861},"_5-函数基础",[14,161863,161865],{"id":161864},"_51-为什么需要函数","5.1 为什么需要函数",[19,161867,161868],{},"函数用于封装一段可以重复使用的代码。",[19,161870,161871],{},"不使用函数的问题：",[1171,161873,161874,161877,161880,161883],{},[1174,161875,161876],{},"重复代码多。",[1174,161878,161879],{},"修改逻辑时容易漏改。",[1174,161881,161882],{},"主流程不清晰。",[1174,161884,161885],{},"程序越写越长，难以维护。",[19,161887,161888],{},"使用函数后的好处：",[1171,161890,161891,161894,161897,161900],{},[1174,161892,161893],{},"提高复用性。",[1174,161895,161896],{},"提高可读性。",[1174,161898,161899],{},"便于调试。",[1174,161901,161902],{},"便于分工。",[14,161904,161906],{"id":161905},"_52-函数定义","5.2 函数定义",[19,161908,6238],{},[29,161910,161912],{"className":31,"code":161911,"language":33,"meta":34,"style":34},"def 函数名():\n    函数体\n",[36,161913,161914,161923],{"__ignoreMap":34},[39,161915,161916,161918,161921],{"class":41,"line":42},[39,161917,33002],{"class":49},[39,161919,161920],{"class":3021}," 函数名",[39,161922,33008],{"class":45},[39,161924,161925],{"class":41,"line":74},[39,161926,161927],{"class":45},"    函数体\n",[19,161929,16191],{},[29,161931,161933],{"className":31,"code":161932,"language":33,"meta":34,"style":34},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[36,161934,161935,161944,161954,161964,161968,161972],{"__ignoreMap":34},[39,161936,161937,161939,161942],{"class":41,"line":42},[39,161938,33002],{"class":49},[39,161940,161941],{"class":3021}," say_hello",[39,161943,33008],{"class":45},[39,161945,161946,161948,161950,161952],{"class":41,"line":74},[39,161947,32354],{"class":56},[39,161949,1221],{"class":45},[39,161951,6900],{"class":1319},[39,161953,209],{"class":45},[39,161955,161956,161958,161960,161962],{"class":41,"line":99},[39,161957,32354],{"class":56},[39,161959,1221],{"class":45},[39,161961,147584],{"class":1319},[39,161963,209],{"class":45},[39,161965,161966],{"class":41,"line":106},[39,161967,3458],{"emptyLinePlaceholder":1145},[39,161969,161970],{"class":41,"line":112},[39,161971,3458],{"emptyLinePlaceholder":1145},[39,161973,161974],{"class":41,"line":118},[39,161975,161976],{"class":45},"say_hello()\n",[19,161978,10081],{},[1171,161980,161981,161984,161987,161990],{},[1174,161982,161983],{},"函数必须先定义，再调用。",[1174,161985,161986],{},"函数名遵循变量命名规则。",[1174,161988,161989],{},"函数体需要缩进。",[1174,161991,161992],{},"函数不调用就不会执行。",[14,161994,161996],{"id":161995},"_53-函数调用","5.3 函数调用",[29,161998,162000],{"className":31,"code":161999,"language":33,"meta":34,"style":34},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[36,162001,162002,162011,162022,162033,162044,162054,162058,162062,162067],{"__ignoreMap":34},[39,162003,162004,162006,162009],{"class":41,"line":42},[39,162005,33002],{"class":49},[39,162007,162008],{"class":3021}," print_menu",[39,162010,33008],{"class":45},[39,162012,162013,162015,162017,162020],{"class":41,"line":74},[39,162014,32354],{"class":56},[39,162016,1221],{"class":45},[39,162018,162019],{"class":1319},"\"1. 查询\"",[39,162021,209],{"class":45},[39,162023,162024,162026,162028,162031],{"class":41,"line":99},[39,162025,32354],{"class":56},[39,162027,1221],{"class":45},[39,162029,162030],{"class":1319},"\"2. 添加\"",[39,162032,209],{"class":45},[39,162034,162035,162037,162039,162042],{"class":41,"line":106},[39,162036,32354],{"class":56},[39,162038,1221],{"class":45},[39,162040,162041],{"class":1319},"\"3. 删除\"",[39,162043,209],{"class":45},[39,162045,162046,162048,162050,162052],{"class":41,"line":112},[39,162047,32354],{"class":56},[39,162049,1221],{"class":45},[39,162051,161626],{"class":1319},[39,162053,209],{"class":45},[39,162055,162056],{"class":41,"line":118},[39,162057,3458],{"emptyLinePlaceholder":1145},[39,162059,162060],{"class":41,"line":413},[39,162061,3458],{"emptyLinePlaceholder":1145},[39,162063,162064],{"class":41,"line":419},[39,162065,162066],{"class":45},"print_menu()\n",[39,162068,162069],{"class":41,"line":425},[39,162070,162066],{"class":45},[19,162072,162073],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162075,162077],{"id":162076},"_54-参数","5.4 参数",[19,162079,162080],{},"参数用于向函数传递数据。",[29,162082,162084],{"className":31,"code":162083,"language":33,"meta":34,"style":34},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[36,162085,162086,162095,162115,162119,162123,162132],{"__ignoreMap":34},[39,162087,162088,162090,162092],{"class":41,"line":42},[39,162089,33002],{"class":49},[39,162091,161941],{"class":3021},[39,162093,162094],{"class":45},"(name):\n",[39,162096,162097,162099,162101,162103,162105,162107,162109,162111,162113],{"class":41,"line":74},[39,162098,32354],{"class":56},[39,162100,1221],{"class":45},[39,162102,1270],{"class":49},[39,162104,157999],{"class":1319},[39,162106,2094],{"class":56},[39,162108,80864],{"class":45},[39,162110,2144],{"class":56},[39,162112,1462],{"class":1319},[39,162114,209],{"class":45},[39,162116,162117],{"class":41,"line":99},[39,162118,3458],{"emptyLinePlaceholder":1145},[39,162120,162121],{"class":41,"line":106},[39,162122,3458],{"emptyLinePlaceholder":1145},[39,162124,162125,162128,162130],{"class":41,"line":112},[39,162126,162127],{"class":45},"say_hello(",[39,162129,150833],{"class":1319},[39,162131,209],{"class":45},[39,162133,162134,162136,162138],{"class":41,"line":118},[39,162135,162127],{"class":45},[39,162137,151881],{"class":1319},[39,162139,209],{"class":45},[19,162141,162142,162144,162145,162147],{},[36,162143,80864],{}," 是形参，",[36,162146,150833],{}," 是实参。",[19,162149,162150],{},"多个参数：",[29,162152,162154],{"className":31,"code":162153,"language":33,"meta":34,"style":34},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[36,162155,162156,162164,162177,162183,162187,162191],{"__ignoreMap":34},[39,162157,162158,162160,162162],{"class":41,"line":42},[39,162159,33002],{"class":49},[39,162161,6266],{"class":3021},[39,162163,152038],{"class":45},[39,162165,162166,162169,162171,162173,162175],{"class":41,"line":74},[39,162167,162168],{"class":45},"    result ",[39,162170,50],{"class":49},[39,162172,11925],{"class":45},[39,162174,1682],{"class":49},[39,162176,152049],{"class":45},[39,162178,162179,162181],{"class":41,"line":99},[39,162180,32354],{"class":56},[39,162182,77639],{"class":45},[39,162184,162185],{"class":41,"line":106},[39,162186,3458],{"emptyLinePlaceholder":1145},[39,162188,162189],{"class":41,"line":112},[39,162190,3458],{"emptyLinePlaceholder":1145},[39,162192,162193,162196,162198,162200,162202],{"class":41,"line":118},[39,162194,162195],{"class":45},"add(",[39,162197,146],{"class":56},[39,162199,13491],{"class":45},[39,162201,1898],{"class":56},[39,162203,209],{"class":45},[19,162205,162206],{},"调用时参数数量必须匹配。",[14,162208,162210],{"id":162209},"_55-返回值","5.5 返回值",[19,162212,162213,162215],{},[36,162214,18102],{}," 用于把函数内部的结果返回给调用者。",[29,162217,162219],{"className":31,"code":162218,"language":33,"meta":34,"style":34},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[36,162220,162221,162229,162239,162243,162247,162265],{"__ignoreMap":34},[39,162222,162223,162225,162227],{"class":41,"line":42},[39,162224,33002],{"class":49},[39,162226,6266],{"class":3021},[39,162228,152038],{"class":45},[39,162230,162231,162233,162235,162237],{"class":41,"line":74},[39,162232,5148],{"class":49},[39,162234,11925],{"class":45},[39,162236,1682],{"class":49},[39,162238,152049],{"class":45},[39,162240,162241],{"class":41,"line":99},[39,162242,3458],{"emptyLinePlaceholder":1145},[39,162244,162245],{"class":41,"line":106},[39,162246,3458],{"emptyLinePlaceholder":1145},[39,162248,162249,162252,162254,162257,162259,162261,162263],{"class":41,"line":112},[39,162250,162251],{"class":45},"result ",[39,162253,50],{"class":49},[39,162255,162256],{"class":45}," add(",[39,162258,146],{"class":56},[39,162260,13491],{"class":45},[39,162262,1898],{"class":56},[39,162264,209],{"class":45},[39,162266,162267,162269],{"class":41,"line":118},[39,162268,31470],{"class":56},[39,162270,77639],{"class":45},[19,162272,162273,162274,162276,162277,29442],{},"如果函数没有写 ",[36,162275,18102],{},"，默认返回 ",[36,162278,96735],{},[29,162280,162282],{"className":31,"code":162281,"language":33,"meta":34,"style":34},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[36,162283,162284,162292,162302,162306,162310,162319],{"__ignoreMap":34},[39,162285,162286,162288,162290],{"class":41,"line":42},[39,162287,33002],{"class":49},[39,162289,161941],{"class":3021},[39,162291,33008],{"class":45},[39,162293,162294,162296,162298,162300],{"class":41,"line":74},[39,162295,32354],{"class":56},[39,162297,1221],{"class":45},[39,162299,6900],{"class":1319},[39,162301,209],{"class":45},[39,162303,162304],{"class":41,"line":99},[39,162305,3458],{"emptyLinePlaceholder":1145},[39,162307,162308],{"class":41,"line":106},[39,162309,3458],{"emptyLinePlaceholder":1145},[39,162311,162312,162314,162316],{"class":41,"line":112},[39,162313,162251],{"class":45},[39,162315,50],{"class":49},[39,162317,162318],{"class":45}," say_hello()\n",[39,162320,162321,162323,162326],{"class":41,"line":118},[39,162322,31470],{"class":56},[39,162324,162325],{"class":45},"(result)  ",[39,162327,162328],{"class":102},"# None\n",[14,162330,162332],{"id":162331},"_56-return的作用","5.6 return的作用",[19,162334,162335,162337],{},[36,162336,18102],{}," 有两个作用：",[1171,162339,162340,162343],{},[1174,162341,162342],{},"返回结果。",[1174,162344,162345],{},"结束函数。",[29,162347,162349],{"className":31,"code":162348,"language":33,"meta":34,"style":34},"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",[36,162350,162351,162361,162373,162380,162384,162396,162403,162407,162414,162418,162422,162433],{"__ignoreMap":34},[39,162352,162353,162355,162358],{"class":41,"line":42},[39,162354,33002],{"class":49},[39,162356,162357],{"class":3021}," check_age",[39,162359,162360],{"class":45},"(age):\n",[39,162362,162363,162365,162367,162369,162371],{"class":41,"line":74},[39,162364,4159],{"class":49},[39,162366,16763],{"class":45},[39,162368,2108],{"class":49},[39,162370,5151],{"class":56},[39,162372,4797],{"class":45},[39,162374,162375,162377],{"class":41,"line":99},[39,162376,15808],{"class":49},[39,162378,162379],{"class":1319}," \"年龄不合法\"\n",[39,162381,162382],{"class":41,"line":106},[39,162383,3458],{"emptyLinePlaceholder":1145},[39,162385,162386,162388,162390,162392,162394],{"class":41,"line":112},[39,162387,4159],{"class":49},[39,162389,16763],{"class":45},[39,162391,2768],{"class":49},[39,162393,157230],{"class":56},[39,162395,4797],{"class":45},[39,162397,162398,162400],{"class":41,"line":118},[39,162399,15808],{"class":49},[39,162401,162402],{"class":1319}," \"成年人\"\n",[39,162404,162405],{"class":41,"line":413},[39,162406,3458],{"emptyLinePlaceholder":1145},[39,162408,162409,162411],{"class":41,"line":419},[39,162410,5148],{"class":49},[39,162412,162413],{"class":1319}," \"未成年人\"\n",[39,162415,162416],{"class":41,"line":425},[39,162417,3458],{"emptyLinePlaceholder":1145},[39,162419,162420],{"class":41,"line":443},[39,162421,3458],{"emptyLinePlaceholder":1145},[39,162423,162424,162426,162429,162431],{"class":41,"line":449},[39,162425,31470],{"class":56},[39,162427,162428],{"class":45},"(check_age(",[39,162430,1898],{"class":56},[39,162432,31552],{"class":45},[39,162434,162435,162437,162439,162441,162443],{"class":41,"line":455},[39,162436,31470],{"class":56},[39,162438,162428],{"class":45},[39,162440,1732],{"class":49},[39,162442,57],{"class":56},[39,162444,31552],{"class":45},[19,162446,162447,162448,162450],{},"函数执行到 ",[36,162449,18102],{}," 后，后面的代码不会继续执行。",[14,162452,162454],{"id":162453},"_57-none","5.7 None",[19,162456,162457,162459],{},[36,162458,96735],{}," 表示空值或没有结果。",[19,162461,162462],{},"常见使用场景：",[1171,162464,162465,162468,162471],{},[1174,162466,162467],{},"函数没有返回值。",[1174,162469,162470],{},"变量暂时没有具体值。",[1174,162472,162473],{},"表示查询不到结果。",[29,162475,162477],{"className":31,"code":162476,"language":33,"meta":34,"style":34},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[36,162478,162479,162487,162491,162504],{"__ignoreMap":34},[39,162480,162481,162483,162485],{"class":41,"line":42},[39,162482,162251],{"class":45},[39,162484,50],{"class":49},[39,162486,153117],{"class":56},[39,162488,162489],{"class":41,"line":74},[39,162490,3458],{"emptyLinePlaceholder":1145},[39,162492,162493,162495,162498,162500,162502],{"class":41,"line":99},[39,162494,2596],{"class":49},[39,162496,162497],{"class":45}," result ",[39,162499,39982],{"class":49},[39,162501,39988],{"class":56},[39,162503,4797],{"class":45},[39,162505,162506,162508,162510,162513],{"class":41,"line":106},[39,162507,32354],{"class":56},[39,162509,1221],{"class":45},[39,162511,162512],{"class":1319},"\"没有数据\"",[39,162514,209],{"class":45},[19,162516,162517,162518,162520,162521,162524,162525,29442],{},"判断 ",[36,162519,96735],{}," 推荐使用 ",[36,162522,162523],{},"is None","，不要写成 ",[36,162526,162527],{},"== None",[14,162529,162531],{"id":162530},"_58-函数文档字符串","5.8 函数文档字符串",[19,162533,162534],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[29,162536,162538],{"className":31,"code":162537,"language":33,"meta":34,"style":34},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[36,162539,162540,162550,162555],{"__ignoreMap":34},[39,162541,162542,162544,162547],{"class":41,"line":42},[39,162543,33002],{"class":49},[39,162545,162546],{"class":3021}," calculate_bmi",[39,162548,162549],{"class":45},"(weight, height):\n",[39,162551,162552],{"class":41,"line":74},[39,162553,162554],{"class":1319},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[39,162556,162557,162559,162562,162564,162567,162569],{"class":41,"line":99},[39,162558,5148],{"class":49},[39,162560,162561],{"class":45}," weight ",[39,162563,1784],{"class":49},[39,162565,162566],{"class":45}," height ",[39,162568,11717],{"class":49},[39,162570,48777],{"class":56},[19,162572,162573],{},"查看说明：",[29,162575,162577],{"className":31,"code":162576,"language":33,"meta":34,"style":34},"help(calculate_bmi)\n",[36,162578,162579],{"__ignoreMap":34},[39,162580,162581,162584],{"class":41,"line":42},[39,162582,162583],{"class":56},"help",[39,162585,162586],{"class":45},"(calculate_bmi)\n",[19,162588,162589],{},"较完整的写法：",[29,162591,162593],{"className":31,"code":162592,"language":33,"meta":34,"style":34},"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",[36,162594,162595,162603,162608,162613,162617,162622,162627,162632,162636],{"__ignoreMap":34},[39,162596,162597,162599,162601],{"class":41,"line":42},[39,162598,33002],{"class":49},[39,162600,162546],{"class":3021},[39,162602,162549],{"class":45},[39,162604,162605],{"class":41,"line":74},[39,162606,162607],{"class":1319},"    \"\"\"\n",[39,162609,162610],{"class":41,"line":99},[39,162611,162612],{"class":1319},"    计算BMI。\n",[39,162614,162615],{"class":41,"line":106},[39,162616,3458],{"emptyLinePlaceholder":1145},[39,162618,162619],{"class":41,"line":112},[39,162620,162621],{"class":1319},"    :param weight: 体重，单位kg\n",[39,162623,162624],{"class":41,"line":118},[39,162625,162626],{"class":1319},"    :param height: 身高，单位m\n",[39,162628,162629],{"class":41,"line":413},[39,162630,162631],{"class":1319},"    :return: BMI数值\n",[39,162633,162634],{"class":41,"line":419},[39,162635,162607],{"class":1319},[39,162637,162638,162640,162642,162644,162646,162648],{"class":41,"line":425},[39,162639,5148],{"class":49},[39,162641,162561],{"class":45},[39,162643,1784],{"class":49},[39,162645,162566],{"class":45},[39,162647,11717],{"class":49},[39,162649,48777],{"class":56},[14,162651,162653],{"id":162652},"_59-变量作用域","5.9 变量作用域",[1188,162655,162657],{"id":162656},"_591-局部变量","5.9.1 局部变量",[19,162659,162660],{},"在函数内部定义的变量，只能在函数内部使用。",[29,162662,162664],{"className":31,"code":162663,"language":33,"meta":34,"style":34},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[36,162665,162666,162675,162683,162689,162693,162697,162702],{"__ignoreMap":34},[39,162667,162668,162670,162673],{"class":41,"line":42},[39,162669,33002],{"class":49},[39,162671,162672],{"class":3021}," test",[39,162674,33008],{"class":45},[39,162676,162677,162679,162681],{"class":41,"line":74},[39,162678,46648],{"class":45},[39,162680,50],{"class":49},[39,162682,59482],{"class":56},[39,162684,162685,162687],{"class":41,"line":99},[39,162686,32354],{"class":56},[39,162688,1233],{"class":45},[39,162690,162691],{"class":41,"line":106},[39,162692,3458],{"emptyLinePlaceholder":1145},[39,162694,162695],{"class":41,"line":112},[39,162696,3458],{"emptyLinePlaceholder":1145},[39,162698,162699],{"class":41,"line":118},[39,162700,162701],{"class":45},"test()\n",[39,162703,162704,162706,162709],{"class":41,"line":413},[39,162705,31470],{"class":56},[39,162707,162708],{"class":45},"(num)  ",[39,162710,162711],{"class":102},"# 报错\n",[1188,162713,162715],{"id":162714},"_592-全局变量","5.9.2 全局变量",[19,162717,162718],{},"在函数外部定义的变量，可以在函数内部读取。",[29,162720,162722],{"className":31,"code":162721,"language":33,"meta":34,"style":34},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[36,162723,162724,162732,162736,162740,162748,162754,162758,162762],{"__ignoreMap":34},[39,162725,162726,162728,162730],{"class":41,"line":42},[39,162727,147481],{"class":45},[39,162729,50],{"class":49},[39,162731,150298],{"class":1319},[39,162733,162734],{"class":41,"line":74},[39,162735,3458],{"emptyLinePlaceholder":1145},[39,162737,162738],{"class":41,"line":99},[39,162739,3458],{"emptyLinePlaceholder":1145},[39,162741,162742,162744,162746],{"class":41,"line":106},[39,162743,33002],{"class":49},[39,162745,161941],{"class":3021},[39,162747,33008],{"class":45},[39,162749,162750,162752],{"class":41,"line":112},[39,162751,32354],{"class":56},[39,162753,151605],{"class":45},[39,162755,162756],{"class":41,"line":118},[39,162757,3458],{"emptyLinePlaceholder":1145},[39,162759,162760],{"class":41,"line":413},[39,162761,3458],{"emptyLinePlaceholder":1145},[39,162763,162764],{"class":41,"line":419},[39,162765,161976],{"class":45},[19,162767,162768,162769,29442],{},"如果要在函数内部修改全局变量，需要 ",[36,162770,162771],{},"global",[29,162773,162775],{"className":31,"code":162774,"language":33,"meta":34,"style":34},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[36,162776,162777,162785,162789,162793,162802,162810,162818,162822,162826,162831],{"__ignoreMap":34},[39,162778,162779,162781,162783],{"class":41,"line":42},[39,162780,147636],{"class":45},[39,162782,50],{"class":49},[39,162784,48388],{"class":56},[39,162786,162787],{"class":41,"line":74},[39,162788,3458],{"emptyLinePlaceholder":1145},[39,162790,162791],{"class":41,"line":99},[39,162792,3458],{"emptyLinePlaceholder":1145},[39,162794,162795,162797,162800],{"class":41,"line":106},[39,162796,33002],{"class":49},[39,162798,162799],{"class":3021}," add_count",[39,162801,33008],{"class":45},[39,162803,162804,162807],{"class":41,"line":112},[39,162805,162806],{"class":49},"    global",[39,162808,162809],{"class":45}," count\n",[39,162811,162812,162814,162816],{"class":41,"line":118},[39,162813,160378],{"class":45},[39,162815,10533],{"class":49},[39,162817,56753],{"class":56},[39,162819,162820],{"class":41,"line":413},[39,162821,3458],{"emptyLinePlaceholder":1145},[39,162823,162824],{"class":41,"line":419},[39,162825,3458],{"emptyLinePlaceholder":1145},[39,162827,162828],{"class":41,"line":425},[39,162829,162830],{"class":45},"add_count()\n",[39,162832,162833,162835],{"class":41,"line":443},[39,162834,31470],{"class":56},[39,162836,162837],{"class":45},"(count)\n",[19,162839,162840],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162842,162844],{"id":162843},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162846,162847],{},"一个函数中可以调用另一个函数。",[29,162849,162851],{"className":31,"code":162850,"language":33,"meta":34,"style":34},"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",[36,162852,162853,162862,162876,162880,162884,162893,162898,162918,162939,162943,162947,162951],{"__ignoreMap":34},[39,162854,162855,162857,162860],{"class":41,"line":42},[39,162856,33002],{"class":49},[39,162858,162859],{"class":3021}," print_line",[39,162861,33008],{"class":45},[39,162863,162864,162866,162868,162870,162872,162874],{"class":41,"line":74},[39,162865,32354],{"class":56},[39,162867,1221],{"class":45},[39,162869,33538],{"class":1319},[39,162871,7574],{"class":49},[39,162873,79719],{"class":56},[39,162875,209],{"class":45},[39,162877,162878],{"class":41,"line":99},[39,162879,3458],{"emptyLinePlaceholder":1145},[39,162881,162882],{"class":41,"line":106},[39,162883,3458],{"emptyLinePlaceholder":1145},[39,162885,162886,162888,162891],{"class":41,"line":112},[39,162887,33002],{"class":49},[39,162889,162890],{"class":3021}," print_info",[39,162892,150320],{"class":45},[39,162894,162895],{"class":41,"line":118},[39,162896,162897],{"class":45},"    print_line()\n",[39,162899,162900,162902,162904,162906,162908,162910,162912,162914,162916],{"class":41,"line":413},[39,162901,32354],{"class":56},[39,162903,1221],{"class":45},[39,162905,1270],{"class":49},[39,162907,157627],{"class":1319},[39,162909,2094],{"class":56},[39,162911,80864],{"class":45},[39,162913,2144],{"class":56},[39,162915,1462],{"class":1319},[39,162917,209],{"class":45},[39,162919,162920,162922,162924,162926,162929,162931,162933,162935,162937],{"class":41,"line":419},[39,162921,32354],{"class":56},[39,162923,1221],{"class":45},[39,162925,1270],{"class":49},[39,162927,162928],{"class":1319},"\"年龄:",[39,162930,2094],{"class":56},[39,162932,71275],{"class":45},[39,162934,2144],{"class":56},[39,162936,1462],{"class":1319},[39,162938,209],{"class":45},[39,162940,162941],{"class":41,"line":425},[39,162942,162897],{"class":45},[39,162944,162945],{"class":41,"line":443},[39,162946,3458],{"emptyLinePlaceholder":1145},[39,162948,162949],{"class":41,"line":449},[39,162950,3458],{"emptyLinePlaceholder":1145},[39,162952,162953,162956,162958,162960,162962],{"class":41,"line":455},[39,162954,162955],{"class":45},"print_info(",[39,162957,150833],{"class":1319},[39,162959,13491],{"class":45},[39,162961,1849],{"class":56},[39,162963,209],{"class":45},[19,162965,162966],{},"这种方式可以把小功能组合成大功能。",[14,162968,162970],{"id":162969},"_511-参数检查","5.11 参数检查",[19,162972,162973],{},"函数内部可以检查参数是否合法。",[29,162975,162977],{"className":31,"code":162976,"language":33,"meta":34,"style":34},"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",[36,162978,162979,162988,163000,163006,163016,163020,163024,163041,163045,163057,163068,163074],{"__ignoreMap":34},[39,162980,162981,162983,162986],{"class":41,"line":42},[39,162982,33002],{"class":49},[39,162984,162985],{"class":3021}," divide",[39,162987,152038],{"class":45},[39,162989,162990,162992,162994,162996,162998],{"class":41,"line":74},[39,162991,4159],{"class":49},[39,162993,11938],{"class":45},[39,162995,4007],{"class":49},[39,162997,5151],{"class":56},[39,162999,4797],{"class":45},[39,163001,163002,163004],{"class":41,"line":99},[39,163003,15808],{"class":49},[39,163005,153117],{"class":56},[39,163007,163008,163010,163012,163014],{"class":41,"line":106},[39,163009,5148],{"class":49},[39,163011,11925],{"class":45},[39,163013,1784],{"class":49},[39,163015,152049],{"class":45},[39,163017,163018],{"class":41,"line":112},[39,163019,3458],{"emptyLinePlaceholder":1145},[39,163021,163022],{"class":41,"line":118},[39,163023,3458],{"emptyLinePlaceholder":1145},[39,163025,163026,163028,163030,163033,163035,163037,163039],{"class":41,"line":413},[39,163027,162251],{"class":45},[39,163029,50],{"class":49},[39,163031,163032],{"class":45}," divide(",[39,163034,146],{"class":56},[39,163036,13491],{"class":45},[39,163038,260],{"class":56},[39,163040,209],{"class":45},[39,163042,163043],{"class":41,"line":419},[39,163044,3458],{"emptyLinePlaceholder":1145},[39,163046,163047,163049,163051,163053,163055],{"class":41,"line":425},[39,163048,2596],{"class":49},[39,163050,162497],{"class":45},[39,163052,39982],{"class":49},[39,163054,39988],{"class":56},[39,163056,4797],{"class":45},[39,163058,163059,163061,163063,163066],{"class":41,"line":443},[39,163060,32354],{"class":56},[39,163062,1221],{"class":45},[39,163064,163065],{"class":1319},"\"除数不能为0\"",[39,163067,209],{"class":45},[39,163069,163070,163072],{"class":41,"line":449},[39,163071,2759],{"class":49},[39,163073,4797],{"class":45},[39,163075,163076,163078],{"class":41,"line":455},[39,163077,32354],{"class":56},[39,163079,77639],{"class":45},[14,163081,163083],{"id":163082},"_512-类型提示","5.12 类型提示",[19,163085,163086],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[29,163088,163090],{"className":31,"code":163089,"language":33,"meta":34,"style":34},"def add(a: int, b: int) -> int:\n    return a + b\n",[36,163091,163092,163115],{"__ignoreMap":34},[39,163093,163094,163096,163098,163101,163103,163106,163108,163111,163113],{"class":41,"line":42},[39,163095,33002],{"class":49},[39,163097,6266],{"class":3021},[39,163099,163100],{"class":45},"(a: ",[39,163102,1224],{"class":56},[39,163104,163105],{"class":45},", b: ",[39,163107,1224],{"class":56},[39,163109,163110],{"class":45},") -> ",[39,163112,1224],{"class":56},[39,163114,4797],{"class":45},[39,163116,163117,163119,163121,163123],{"class":41,"line":74},[39,163118,5148],{"class":49},[39,163120,11925],{"class":45},[39,163122,1682],{"class":49},[39,163124,152049],{"class":45},[19,163126,163127],{},"字符串参数：",[29,163129,163131],{"className":31,"code":163130,"language":33,"meta":34,"style":34},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[36,163132,163133,163150],{"__ignoreMap":34},[39,163134,163135,163137,163139,163142,163144,163146,163148],{"class":41,"line":42},[39,163136,33002],{"class":49},[39,163138,161941],{"class":3021},[39,163140,163141],{"class":45},"(name: ",[39,163143,2368],{"class":56},[39,163145,163110],{"class":45},[39,163147,96735],{"class":56},[39,163149,4797],{"class":45},[39,163151,163152,163154,163156,163158,163160,163162,163164,163166,163168],{"class":41,"line":74},[39,163153,32354],{"class":56},[39,163155,1221],{"class":45},[39,163157,1270],{"class":49},[39,163159,157999],{"class":1319},[39,163161,2094],{"class":56},[39,163163,80864],{"class":45},[39,163165,2144],{"class":56},[39,163167,1462],{"class":1319},[39,163169,209],{"class":45},[19,163171,163172],{},"列表参数：",[29,163174,163176],{"className":31,"code":163175,"language":33,"meta":34,"style":34},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[36,163177,163178,163197,163205,163217,163226],{"__ignoreMap":34},[39,163179,163180,163182,163185,163188,163190,163193,163195],{"class":41,"line":42},[39,163181,33002],{"class":49},[39,163183,163184],{"class":3021}," get_total",[39,163186,163187],{"class":45},"(numbers: list[",[39,163189,1224],{"class":56},[39,163191,163192],{"class":45},"]) -> ",[39,163194,1224],{"class":56},[39,163196,4797],{"class":45},[39,163198,163199,163201,163203],{"class":41,"line":74},[39,163200,160252],{"class":45},[39,163202,50],{"class":49},[39,163204,48388],{"class":56},[39,163206,163207,163209,163212,163214],{"class":41,"line":99},[39,163208,4259],{"class":49},[39,163210,163211],{"class":45}," number ",[39,163213,27100],{"class":49},[39,163215,163216],{"class":45}," numbers:\n",[39,163218,163219,163221,163223],{"class":41,"line":106},[39,163220,160927],{"class":45},[39,163222,10533],{"class":49},[39,163224,163225],{"class":45}," number\n",[39,163227,163228,163230],{"class":41,"line":112},[39,163229,5148],{"class":49},[39,163231,163232],{"class":45}," total\n",[19,163234,163235],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163237,163239],{"id":163238},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[29,163241,163243],{"className":31,"code":163242,"language":33,"meta":34,"style":34},"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",[36,163244,163245,163255,163259,163263,163271,163282,163292,163302,163312,163322,163326,163330,163339,163361,163365,163369,163378,163384,163404,163416,163427,163431,163440,163451,163456,163460,163464,163473,163479,163498,163510,163520,163524,163535,163545,163549,163557,163568,163572,163576,163580,163588,163593,163607,163611,163623,163628,163640,163645,163657,163662,163674,163684,163688,163694],{"__ignoreMap":34},[39,163246,163247,163250,163252],{"class":41,"line":42},[39,163248,163249],{"class":45},"balance ",[39,163251,50],{"class":49},[39,163253,163254],{"class":56}," 1000\n",[39,163256,163257],{"class":41,"line":74},[39,163258,3458],{"emptyLinePlaceholder":1145},[39,163260,163261],{"class":41,"line":99},[39,163262,3458],{"emptyLinePlaceholder":1145},[39,163264,163265,163267,163269],{"class":41,"line":106},[39,163266,33002],{"class":49},[39,163268,152978],{"class":3021},[39,163270,33008],{"class":45},[39,163272,163273,163275,163277,163280],{"class":41,"line":112},[39,163274,32354],{"class":56},[39,163276,1221],{"class":45},[39,163278,163279],{"class":1319},"\"====== ATM ======\"",[39,163281,209],{"class":45},[39,163283,163284,163286,163288,163290],{"class":41,"line":118},[39,163285,32354],{"class":56},[39,163287,1221],{"class":45},[39,163289,161593],{"class":1319},[39,163291,209],{"class":45},[39,163293,163294,163296,163298,163300],{"class":41,"line":413},[39,163295,32354],{"class":56},[39,163297,1221],{"class":45},[39,163299,161604],{"class":1319},[39,163301,209],{"class":45},[39,163303,163304,163306,163308,163310],{"class":41,"line":419},[39,163305,32354],{"class":56},[39,163307,1221],{"class":45},[39,163309,161615],{"class":1319},[39,163311,209],{"class":45},[39,163313,163314,163316,163318,163320],{"class":41,"line":425},[39,163315,32354],{"class":56},[39,163317,1221],{"class":45},[39,163319,161626],{"class":1319},[39,163321,209],{"class":45},[39,163323,163324],{"class":41,"line":443},[39,163325,3458],{"emptyLinePlaceholder":1145},[39,163327,163328],{"class":41,"line":449},[39,163329,3458],{"emptyLinePlaceholder":1145},[39,163331,163332,163334,163337],{"class":41,"line":455},[39,163333,33002],{"class":49},[39,163335,163336],{"class":3021}," show_balance",[39,163338,33008],{"class":45},[39,163340,163341,163343,163345,163347,163350,163352,163355,163357,163359],{"class":41,"line":461},[39,163342,32354],{"class":56},[39,163344,1221],{"class":45},[39,163346,1270],{"class":49},[39,163348,163349],{"class":1319},"\"当前余额:",[39,163351,2094],{"class":56},[39,163353,163354],{"class":45},"balance",[39,163356,2144],{"class":56},[39,163358,157957],{"class":1319},[39,163360,209],{"class":45},[39,163362,163363],{"class":41,"line":475},[39,163364,3458],{"emptyLinePlaceholder":1145},[39,163366,163367],{"class":41,"line":665},[39,163368,3458],{"emptyLinePlaceholder":1145},[39,163370,163371,163373,163376],{"class":41,"line":671},[39,163372,33002],{"class":49},[39,163374,163375],{"class":3021}," save_money",[39,163377,33008],{"class":45},[39,163379,163380,163382],{"class":41,"line":684},[39,163381,162806],{"class":49},[39,163383,151044],{"class":45},[39,163385,163386,163389,163391,163393,163395,163397,163399,163402],{"class":41,"line":2732},[39,163387,163388],{"class":45},"    money ",[39,163390,50],{"class":49},[39,163392,110742],{"class":56},[39,163394,1221],{"class":45},[39,163396,54875],{"class":56},[39,163398,1221],{"class":45},[39,163400,163401],{"class":1319},"\"请输入存款金额:\"",[39,163403,31552],{"class":45},[39,163405,163406,163408,163410,163412,163414],{"class":41,"line":2737},[39,163407,4159],{"class":49},[39,163409,151087],{"class":45},[39,163411,2653],{"class":49},[39,163413,5151],{"class":56},[39,163415,4797],{"class":45},[39,163417,163418,163420,163422,163425],{"class":41,"line":2751},[39,163419,33506],{"class":56},[39,163421,1221],{"class":45},[39,163423,163424],{"class":1319},"\"金额必须大于0\"",[39,163426,209],{"class":45},[39,163428,163429],{"class":41,"line":2756},[39,163430,153306],{"class":49},[39,163432,163433,163436,163438],{"class":41,"line":2785},[39,163434,163435],{"class":45},"    balance ",[39,163437,10533],{"class":49},[39,163439,151120],{"class":45},[39,163441,163442,163444,163446,163449],{"class":41,"line":2790},[39,163443,32354],{"class":56},[39,163445,1221],{"class":45},[39,163447,163448],{"class":1319},"\"存款成功\"",[39,163450,209],{"class":45},[39,163452,163453],{"class":41,"line":2807},[39,163454,163455],{"class":45},"    show_balance()\n",[39,163457,163458],{"class":41,"line":2812},[39,163459,3458],{"emptyLinePlaceholder":1145},[39,163461,163462],{"class":41,"line":2817},[39,163463,3458],{"emptyLinePlaceholder":1145},[39,163465,163466,163468,163471],{"class":41,"line":2822},[39,163467,33002],{"class":49},[39,163469,163470],{"class":3021}," withdraw_money",[39,163472,33008],{"class":45},[39,163474,163475,163477],{"class":41,"line":2836},[39,163476,162806],{"class":49},[39,163478,151044],{"class":45},[39,163480,163481,163483,163485,163487,163489,163491,163493,163496],{"class":41,"line":2841},[39,163482,163388],{"class":45},[39,163484,50],{"class":49},[39,163486,110742],{"class":56},[39,163488,1221],{"class":45},[39,163490,54875],{"class":56},[39,163492,1221],{"class":45},[39,163494,163495],{"class":1319},"\"请输入取款金额:\"",[39,163497,31552],{"class":45},[39,163499,163500,163502,163504,163506,163508],{"class":41,"line":3635},[39,163501,4159],{"class":49},[39,163503,151087],{"class":45},[39,163505,2653],{"class":49},[39,163507,5151],{"class":56},[39,163509,4797],{"class":45},[39,163511,163512,163514,163516,163518],{"class":41,"line":3649},[39,163513,33506],{"class":56},[39,163515,1221],{"class":45},[39,163517,163424],{"class":1319},[39,163519,209],{"class":45},[39,163521,163522],{"class":41,"line":3657},[39,163523,153306],{"class":49},[39,163525,163526,163528,163530,163532],{"class":41,"line":3662},[39,163527,4159],{"class":49},[39,163529,151087],{"class":45},[39,163531,2158],{"class":49},[39,163533,163534],{"class":45}," balance:\n",[39,163536,163537,163539,163541,163543],{"class":41,"line":3668},[39,163538,33506],{"class":56},[39,163540,1221],{"class":45},[39,163542,151182],{"class":1319},[39,163544,209],{"class":45},[39,163546,163547],{"class":41,"line":3674},[39,163548,153306],{"class":49},[39,163550,163551,163553,163555],{"class":41,"line":3679},[39,163552,163435],{"class":45},[39,163554,151197],{"class":49},[39,163556,151120],{"class":45},[39,163558,163559,163561,163563,163566],{"class":41,"line":9004},[39,163560,32354],{"class":56},[39,163562,1221],{"class":45},[39,163564,163565],{"class":1319},"\"取款成功\"",[39,163567,209],{"class":45},[39,163569,163570],{"class":41,"line":9028},[39,163571,163455],{"class":45},[39,163573,163574],{"class":41,"line":9033},[39,163575,3458],{"emptyLinePlaceholder":1145},[39,163577,163578],{"class":41,"line":9039},[39,163579,3458],{"emptyLinePlaceholder":1145},[39,163581,163582,163584,163586],{"class":41,"line":9066},[39,163583,109608],{"class":49},[39,163585,96342],{"class":56},[39,163587,4797],{"class":45},[39,163589,163590],{"class":41,"line":9071},[39,163591,163592],{"class":45},"    show_menu()\n",[39,163594,163595,163597,163599,163601,163603,163605],{"class":41,"line":9077},[39,163596,161637],{"class":45},[39,163598,50],{"class":49},[39,163600,61659],{"class":56},[39,163602,1221],{"class":45},[39,163604,154018],{"class":1319},[39,163606,209],{"class":45},[39,163608,163609],{"class":41,"line":9089},[39,163610,3458],{"emptyLinePlaceholder":1145},[39,163612,163613,163615,163617,163619,163621],{"class":41,"line":9101},[39,163614,4159],{"class":49},[39,163616,154031],{"class":45},[39,163618,4007],{"class":49},[39,163620,154036],{"class":1319},[39,163622,4797],{"class":45},[39,163624,163625],{"class":41,"line":9113},[39,163626,163627],{"class":45},"        show_balance()\n",[39,163629,163630,163632,163634,163636,163638],{"class":41,"line":10772},[39,163631,40348],{"class":49},[39,163633,154031],{"class":45},[39,163635,4007],{"class":49},[39,163637,154055],{"class":1319},[39,163639,4797],{"class":45},[39,163641,163642],{"class":41,"line":10797},[39,163643,163644],{"class":45},"        save_money()\n",[39,163646,163647,163649,163651,163653,163655],{"class":41,"line":10820},[39,163648,40348],{"class":49},[39,163650,154031],{"class":45},[39,163652,4007],{"class":49},[39,163654,154073],{"class":1319},[39,163656,4797],{"class":45},[39,163658,163659],{"class":41,"line":10844},[39,163660,163661],{"class":45},"        withdraw_money()\n",[39,163663,163664,163666,163668,163670,163672],{"class":41,"line":10849},[39,163665,40348],{"class":49},[39,163667,154031],{"class":45},[39,163669,4007],{"class":49},[39,163671,154127],{"class":1319},[39,163673,4797],{"class":45},[39,163675,163676,163678,163680,163682],{"class":41,"line":10854},[39,163677,33506],{"class":56},[39,163679,1221],{"class":45},[39,163681,154138],{"class":1319},[39,163683,209],{"class":45},[39,163685,163686],{"class":41,"line":10859},[39,163687,32682],{"class":49},[39,163689,163690,163692],{"class":41,"line":10868},[39,163691,158967],{"class":49},[39,163693,4797],{"class":45},[39,163695,163696,163698,163700,163702],{"class":41,"line":10873},[39,163697,33506],{"class":56},[39,163699,1221],{"class":45},[39,163701,154159],{"class":1319},[39,163703,209],{"class":45},[19,163705,163706],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,163708,163710],{"id":163709},"_514-易错点","5.14 易错点",[1171,163712,163713,163716,163719,163724,163729,163732],{},[1174,163714,163715],{},"函数定义后必须调用才会执行。",[1174,163717,163718],{},"函数名后面有括号才是调用。",[1174,163720,163721,163723],{},[36,163722,18102],{}," 后面的代码不会执行。",[1174,163725,163726,163727,29442],{},"没有返回值的函数默认返回 ",[36,163728,96735],{},[1174,163730,163731],{},"局部变量不能在函数外部访问。",[1174,163733,163734,163735,163737],{},"不要滥用 ",[36,163736,162771],{},"，更好的方式是让函数返回新值。",[19,163739,163740,163741,163743],{},"例如不用 ",[36,163742,162771],{}," 改写存款：",[29,163745,163747],{"className":31,"code":163746,"language":33,"meta":34,"style":34},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[36,163748,163749,163758,163769,163773,163777,163785,163798],{"__ignoreMap":34},[39,163750,163751,163753,163755],{"class":41,"line":42},[39,163752,33002],{"class":49},[39,163754,163375],{"class":3021},[39,163756,163757],{"class":45},"(balance, money):\n",[39,163759,163760,163762,163765,163767],{"class":41,"line":74},[39,163761,5148],{"class":49},[39,163763,163764],{"class":45}," balance ",[39,163766,1682],{"class":49},[39,163768,151120],{"class":45},[39,163770,163771],{"class":41,"line":99},[39,163772,3458],{"emptyLinePlaceholder":1145},[39,163774,163775],{"class":41,"line":106},[39,163776,3458],{"emptyLinePlaceholder":1145},[39,163778,163779,163781,163783],{"class":41,"line":112},[39,163780,163249],{"class":45},[39,163782,50],{"class":49},[39,163784,163254],{"class":56},[39,163786,163787,163789,163791,163794,163796],{"class":41,"line":118},[39,163788,163249],{"class":45},[39,163790,50],{"class":49},[39,163792,163793],{"class":45}," save_money(balance, ",[39,163795,2780],{"class":56},[39,163797,209],{"class":45},[39,163799,163800,163802],{"class":41,"line":413},[39,163801,31470],{"class":56},[39,163803,163804],{"class":45},"(balance)\n",[14,163806,163808],{"id":163807},"_515-本章练习","5.15 本章练习",[1171,163810,163811,163818,163824,163830,163836],{},[1174,163812,163813,163814,163817],{},"定义函数 ",[36,163815,163816],{},"print_student(name, age)","，输出学生信息。",[1174,163819,163813,163820,163823],{},[36,163821,163822],{},"get_max(a, b, c)","，返回三个数中的最大值。",[1174,163825,163813,163826,163829],{},[36,163827,163828],{},"is_even(num)","，判断一个数是否为偶数。",[1174,163831,163813,163832,163835],{},[36,163833,163834],{},"calculate_bmi(weight, height)","，返回 BMI。",[1174,163837,163838],{},"把第 4 章的菜单程序拆分成多个函数。",[1133,163840,163841],{},"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":34,"searchDepth":74,"depth":74,"links":163843},[163844,163845,163846,163847,163848,163849,163850,163851,163852,163856,163857,163858,163859,163860,163861],{"id":161864,"depth":74,"text":161865},{"id":161905,"depth":74,"text":161906},{"id":161995,"depth":74,"text":161996},{"id":162076,"depth":74,"text":162077},{"id":162209,"depth":74,"text":162210},{"id":162331,"depth":74,"text":162332},{"id":162453,"depth":74,"text":162454},{"id":162530,"depth":74,"text":162531},{"id":162652,"depth":74,"text":162653,"children":163853},[163854,163855],{"id":162656,"depth":99,"text":162657},{"id":162714,"depth":99,"text":162715},{"id":162843,"depth":74,"text":162844},{"id":162969,"depth":74,"text":162970},{"id":163082,"depth":74,"text":163083},{"id":163238,"depth":74,"text":163239},{"id":163709,"depth":74,"text":163710},{"id":163807,"depth":74,"text":163808},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161856,"description":1142},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163868,"title":163869,"body":163870,"description":1142,"extension":1143,"meta":166914,"navigation":1145,"path":166915,"seo":166916,"stem":166917,"__hash__":166918},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163871,"toc":166895},[163872,163875,163879,163882,163885,163989,163992,163996,163999,164079,164082,164086,164089,164149,164152,164188,164191,164206,164210,164283,164286,164341,164344,164414,164417,164501,164511,164569,164573,164618,164621,164647,164650,164756,164760,164763,164805,164808,164872,164875,164879,164882,164943,164946,164976,164979,165017,165021,165024,165033,165036,165160,165163,165204,165208,165211,165222,165262,165265,165280,165285,165288,165355,165358,165448,165452,165455,165503,165506,165533,165535,165565,165568,165588,165591,165622,165625,165658,165662,165665,165689,165692,165716,165719,165743,165747,165750,165880,165883,165963,165966,166041,166045,166048,166098,166101,166143,166146,166170,166172,166196,166199,166254,166257,166323,166327,166330,166333,166371,166374,166427,166430,166476,166479,166512,166515,166519,166838,166842,166871,166875,166892],[10,163873,163869],{"id":163874},"_6-数据容器",[14,163876,163878],{"id":163877},"_61-什么是数据容器","6.1 什么是数据容器",[19,163880,163881],{},"数据容器用于一次保存多个数据。",[19,163883,163884],{},"常见容器：",[1352,163886,163887,163904],{},[1355,163888,163889],{},[1358,163890,163891,163893,163896,163899,163902],{},[1361,163892,26828],{},[1361,163894,163895],{},"是否有序",[1361,163897,163898],{},"是否可变",[1361,163900,163901],{},"是否允许重复",[1361,163903,28549],{},[1398,163905,163906,163924,163940,163955,163972],{},[1358,163907,163908,163911,163914,163917,163920],{},[1403,163909,163910],{},"list列表",[1403,163912,163913],{},"有序",[1403,163915,163916],{},"可变",[1403,163918,163919],{},"允许",[1403,163921,163922],{},[36,163923,156202],{},[1358,163925,163926,163929,163931,163934,163936],{},[1403,163927,163928],{},"tuple元组",[1403,163930,163913],{},[1403,163932,163933],{},"不可变",[1403,163935,163919],{},[1403,163937,163938],{},[36,163939,156215],{},[1358,163941,163942,163945,163947,163949,163951],{},[1403,163943,163944],{},"str字符串",[1403,163946,163913],{},[1403,163948,163933],{},[1403,163950,163919],{},[1403,163952,163953],{},[36,163954,156825],{},[1358,163956,163957,163960,163963,163965,163968],{},[1403,163958,163959],{},"set集合",[1403,163961,163962],{},"无序",[1403,163964,163916],{},[1403,163966,163967],{},"不允许",[1403,163969,163970],{},[36,163971,156240],{},[1358,163973,163974,163977,163979,163981,163984],{},[1403,163975,163976],{},"dict字典",[1403,163978,163913],{},[1403,163980,163916],{},[1403,163982,163983],{},"key不允许重复",[1403,163985,163986],{},[36,163987,163988],{},"{\"name\": \"小明\"}",[19,163990,163991],{},"Python 3.7 之后，字典保持插入顺序。",[14,163993,163995],{"id":163994},"_62-列表list","6.2 列表list",[19,163997,163998],{},"列表用于保存一组有顺序的数据。",[29,164000,164002],{"className":31,"code":164001,"language":33,"meta":34,"style":34},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[36,164003,164004,164024,164049,164070],{"__ignoreMap":34},[39,164005,164006,164008,164010,164012,164014,164016,164018,164020,164022],{"class":41,"line":42},[39,164007,161325],{"class":45},[39,164009,50],{"class":49},[39,164011,53280],{"class":45},[39,164013,150833],{"class":1319},[39,164015,13491],{"class":45},[39,164017,151881],{"class":1319},[39,164019,13491],{"class":45},[39,164021,160676],{"class":1319},[39,164023,34301],{"class":45},[39,164025,164026,164029,164031,164033,164035,164037,164039,164041,164043,164045,164047],{"class":41,"line":74},[39,164027,164028],{"class":45},"numbers ",[39,164030,50],{"class":49},[39,164032,53280],{"class":45},[39,164034,57],{"class":56},[39,164036,13491],{"class":45},[39,164038,63],{"class":56},[39,164040,13491],{"class":45},[39,164042,68],{"class":56},[39,164044,13491],{"class":45},[39,164046,84],{"class":56},[39,164048,34301],{"class":45},[39,164050,164051,164054,164056,164058,164060,164062,164064,164066,164068],{"class":41,"line":99},[39,164052,164053],{"class":45},"mixed ",[39,164055,50],{"class":49},[39,164057,53280],{"class":45},[39,164059,150833],{"class":1319},[39,164061,13491],{"class":45},[39,164063,1849],{"class":56},[39,164065,13491],{"class":45},[39,164067,32531],{"class":56},[39,164069,34301],{"class":45},[39,164071,164072,164075,164077],{"class":41,"line":106},[39,164073,164074],{"class":45},"empty ",[39,164076,50],{"class":49},[39,164078,52892],{"class":45},[19,164080,164081],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164083,164085],{"id":164084},"_63-列表索引","6.3 列表索引",[19,164087,164088],{},"正向索引从 0 开始：",[29,164090,164092],{"className":31,"code":164091,"language":33,"meta":34,"style":34},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[36,164093,164094,164114,164118,164129,164139],{"__ignoreMap":34},[39,164095,164096,164098,164100,164102,164104,164106,164108,164110,164112],{"class":41,"line":42},[39,164097,161325],{"class":45},[39,164099,50],{"class":49},[39,164101,53280],{"class":45},[39,164103,150833],{"class":1319},[39,164105,13491],{"class":45},[39,164107,151881],{"class":1319},[39,164109,13491],{"class":45},[39,164111,160676],{"class":1319},[39,164113,34301],{"class":45},[39,164115,164116],{"class":41,"line":74},[39,164117,3458],{"emptyLinePlaceholder":1145},[39,164119,164120,164122,164125,164127],{"class":41,"line":99},[39,164121,31470],{"class":56},[39,164123,164124],{"class":45},"(names[",[39,164126,260],{"class":56},[39,164128,71],{"class":45},[39,164130,164131,164133,164135,164137],{"class":41,"line":106},[39,164132,31470],{"class":56},[39,164134,164124],{"class":45},[39,164136,57],{"class":56},[39,164138,71],{"class":45},[39,164140,164141,164143,164145,164147],{"class":41,"line":112},[39,164142,31470],{"class":56},[39,164144,164124],{"class":45},[39,164146,63],{"class":56},[39,164148,71],{"class":45},[19,164150,164151],{},"反向索引从 -1 开始：",[29,164153,164155],{"className":31,"code":164154,"language":33,"meta":34,"style":34},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[36,164156,164157,164173],{"__ignoreMap":34},[39,164158,164159,164161,164163,164165,164167,164170],{"class":41,"line":42},[39,164160,31470],{"class":56},[39,164162,164124],{"class":45},[39,164164,1732],{"class":49},[39,164166,57],{"class":56},[39,164168,164169],{"class":45},"])  ",[39,164171,164172],{"class":102},"# 小刚\n",[39,164174,164175,164177,164179,164181,164183,164185],{"class":41,"line":74},[39,164176,31470],{"class":56},[39,164178,164124],{"class":45},[39,164180,1732],{"class":49},[39,164182,63],{"class":56},[39,164184,164169],{"class":45},[39,164186,164187],{"class":102},"# 小红\n",[19,164189,164190],{},"索引越界会报错：",[29,164192,164194],{"className":31,"code":164193,"language":33,"meta":34,"style":34},"print(names[3])\n",[36,164195,164196],{"__ignoreMap":34},[39,164197,164198,164200,164202,164204],{"class":41,"line":42},[39,164199,31470],{"class":56},[39,164201,164124],{"class":45},[39,164203,68],{"class":56},[39,164205,71],{"class":45},[14,164207,164209],{"id":164208},"_64-列表常用方法","6.4 列表常用方法",[29,164211,164213],{"className":31,"code":164212,"language":33,"meta":34,"style":34},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[36,164214,164215,164231,164235,164244,164258,164272,164276],{"__ignoreMap":34},[39,164216,164217,164219,164221,164223,164225,164227,164229],{"class":41,"line":42},[39,164218,161325],{"class":45},[39,164220,50],{"class":49},[39,164222,53280],{"class":45},[39,164224,150833],{"class":1319},[39,164226,13491],{"class":45},[39,164228,151881],{"class":1319},[39,164230,34301],{"class":45},[39,164232,164233],{"class":41,"line":74},[39,164234,3458],{"emptyLinePlaceholder":1145},[39,164236,164237,164240,164242],{"class":41,"line":99},[39,164238,164239],{"class":45},"names.append(",[39,164241,160676],{"class":1319},[39,164243,209],{"class":45},[39,164245,164246,164249,164251,164253,164256],{"class":41,"line":106},[39,164247,164248],{"class":45},"names.insert(",[39,164250,57],{"class":56},[39,164252,13491],{"class":45},[39,164254,164255],{"class":1319},"\"小李\"",[39,164257,209],{"class":45},[39,164259,164260,164263,164265,164267,164270],{"class":41,"line":112},[39,164261,164262],{"class":45},"names.extend([",[39,164264,9739],{"class":1319},[39,164266,13491],{"class":45},[39,164268,164269],{"class":1319},"\"小赵\"",[39,164271,71],{"class":45},[39,164273,164274],{"class":41,"line":118},[39,164275,3458],{"emptyLinePlaceholder":1145},[39,164277,164278,164280],{"class":41,"line":413},[39,164279,31470],{"class":56},[39,164281,164282],{"class":45},"(names)\n",[19,164284,164285],{},"删除元素：",[29,164287,164289],{"className":31,"code":164288,"language":33,"meta":34,"style":34},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[36,164290,164291,164300,164310,164324,164336],{"__ignoreMap":34},[39,164292,164293,164296,164298],{"class":41,"line":42},[39,164294,164295],{"class":45},"names.remove(",[39,164297,151881],{"class":1319},[39,164299,209],{"class":45},[39,164301,164302,164305,164307],{"class":41,"line":74},[39,164303,164304],{"class":45},"last ",[39,164306,50],{"class":49},[39,164308,164309],{"class":45}," names.pop()\n",[39,164311,164312,164315,164317,164320,164322],{"class":41,"line":99},[39,164313,164314],{"class":45},"first ",[39,164316,50],{"class":49},[39,164318,164319],{"class":45}," names.pop(",[39,164321,260],{"class":56},[39,164323,209],{"class":45},[39,164325,164326,164329,164332,164334],{"class":41,"line":106},[39,164327,164328],{"class":49},"del",[39,164330,164331],{"class":45}," names[",[39,164333,260],{"class":56},[39,164335,34301],{"class":45},[39,164337,164338],{"class":41,"line":112},[39,164339,164340],{"class":45},"names.clear()\n",[19,164342,164343],{},"查询和统计：",[29,164345,164347],{"className":31,"code":164346,"language":33,"meta":34,"style":34},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[36,164348,164349,164377,164381,164392,164403],{"__ignoreMap":34},[39,164350,164351,164353,164355,164357,164359,164361,164363,164365,164367,164369,164371,164373,164375],{"class":41,"line":42},[39,164352,164028],{"class":45},[39,164354,50],{"class":49},[39,164356,53280],{"class":45},[39,164358,57],{"class":56},[39,164360,13491],{"class":45},[39,164362,63],{"class":56},[39,164364,13491],{"class":45},[39,164366,68],{"class":56},[39,164368,13491],{"class":45},[39,164370,63],{"class":56},[39,164372,13491],{"class":45},[39,164374,84],{"class":56},[39,164376,34301],{"class":45},[39,164378,164379],{"class":41,"line":74},[39,164380,3458],{"emptyLinePlaceholder":1145},[39,164382,164383,164385,164388,164390],{"class":41,"line":99},[39,164384,31470],{"class":56},[39,164386,164387],{"class":45},"(numbers.index(",[39,164389,68],{"class":56},[39,164391,31552],{"class":45},[39,164393,164394,164396,164399,164401],{"class":41,"line":106},[39,164395,31470],{"class":56},[39,164397,164398],{"class":45},"(numbers.count(",[39,164400,63],{"class":56},[39,164402,31552],{"class":45},[39,164404,164405,164407,164409,164411],{"class":41,"line":112},[39,164406,31470],{"class":56},[39,164408,1221],{"class":45},[39,164410,8414],{"class":56},[39,164412,164413],{"class":45},"(numbers))\n",[19,164415,164416],{},"排序：",[29,164418,164420],{"className":31,"code":164419,"language":33,"meta":34,"style":34},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[36,164421,164422,164446,164450,164455,164462,164466,164480,164486,164490,164495],{"__ignoreMap":34},[39,164423,164424,164426,164428,164430,164432,164434,164436,164438,164440,164442,164444],{"class":41,"line":42},[39,164425,164028],{"class":45},[39,164427,50],{"class":49},[39,164429,53280],{"class":45},[39,164431,68],{"class":56},[39,164433,13491],{"class":45},[39,164435,57],{"class":56},[39,164437,13491],{"class":45},[39,164439,89],{"class":56},[39,164441,13491],{"class":45},[39,164443,63],{"class":56},[39,164445,34301],{"class":45},[39,164447,164448],{"class":41,"line":74},[39,164449,3458],{"emptyLinePlaceholder":1145},[39,164451,164452],{"class":41,"line":99},[39,164453,164454],{"class":45},"numbers.sort()\n",[39,164456,164457,164459],{"class":41,"line":106},[39,164458,31470],{"class":56},[39,164460,164461],{"class":45},"(numbers)\n",[39,164463,164464],{"class":41,"line":112},[39,164465,3458],{"emptyLinePlaceholder":1145},[39,164467,164468,164471,164474,164476,164478],{"class":41,"line":118},[39,164469,164470],{"class":45},"numbers.sort(",[39,164472,164473],{"class":254},"reverse",[39,164475,50],{"class":49},[39,164477,32531],{"class":56},[39,164479,209],{"class":45},[39,164481,164482,164484],{"class":41,"line":413},[39,164483,31470],{"class":56},[39,164485,164461],{"class":45},[39,164487,164488],{"class":41,"line":419},[39,164489,3458],{"emptyLinePlaceholder":1145},[39,164491,164492],{"class":41,"line":425},[39,164493,164494],{"class":45},"numbers.reverse()\n",[39,164496,164497,164499],{"class":41,"line":443},[39,164498,31470],{"class":56},[39,164500,164461],{"class":45},[19,164502,164503,164506,164507,164510],{},[36,164504,164505],{},"sort()"," 会修改原列表，",[36,164508,164509],{},"sorted()"," 返回新列表。",[29,164512,164514],{"className":31,"code":164513,"language":33,"meta":34,"style":34},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[36,164515,164516,164540,164552,164556,164562],{"__ignoreMap":34},[39,164517,164518,164520,164522,164524,164526,164528,164530,164532,164534,164536,164538],{"class":41,"line":42},[39,164519,164028],{"class":45},[39,164521,50],{"class":49},[39,164523,53280],{"class":45},[39,164525,68],{"class":56},[39,164527,13491],{"class":45},[39,164529,57],{"class":56},[39,164531,13491],{"class":45},[39,164533,89],{"class":56},[39,164535,13491],{"class":45},[39,164537,63],{"class":56},[39,164539,34301],{"class":45},[39,164541,164542,164545,164547,164550],{"class":41,"line":74},[39,164543,164544],{"class":45},"new_numbers ",[39,164546,50],{"class":49},[39,164548,164549],{"class":56}," sorted",[39,164551,164461],{"class":45},[39,164553,164554],{"class":41,"line":99},[39,164555,3458],{"emptyLinePlaceholder":1145},[39,164557,164558,164560],{"class":41,"line":106},[39,164559,31470],{"class":56},[39,164561,164461],{"class":45},[39,164563,164564,164566],{"class":41,"line":112},[39,164565,31470],{"class":56},[39,164567,164568],{"class":45},"(new_numbers)\n",[14,164570,164572],{"id":164571},"_65-列表遍历","6.5 列表遍历",[29,164574,164576],{"className":31,"code":164575,"language":33,"meta":34,"style":34},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[36,164577,164578,164598,164602,164612],{"__ignoreMap":34},[39,164579,164580,164582,164584,164586,164588,164590,164592,164594,164596],{"class":41,"line":42},[39,164581,161325],{"class":45},[39,164583,50],{"class":49},[39,164585,53280],{"class":45},[39,164587,150833],{"class":1319},[39,164589,13491],{"class":45},[39,164591,151881],{"class":1319},[39,164593,13491],{"class":45},[39,164595,160676],{"class":1319},[39,164597,34301],{"class":45},[39,164599,164600],{"class":41,"line":74},[39,164601,3458],{"emptyLinePlaceholder":1145},[39,164603,164604,164606,164608,164610],{"class":41,"line":99},[39,164605,4083],{"class":49},[39,164607,161361],{"class":45},[39,164609,27100],{"class":49},[39,164611,161366],{"class":45},[39,164613,164614,164616],{"class":41,"line":106},[39,164615,32354],{"class":56},[39,164617,151605],{"class":45},[19,164619,164620],{},"需要索引时：",[29,164622,164624],{"className":31,"code":164623,"language":33,"meta":34,"style":34},"for index, name in enumerate(names):\n    print(index, name)\n",[36,164625,164626,164640],{"__ignoreMap":34},[39,164627,164628,164630,164633,164635,164637],{"class":41,"line":42},[39,164629,4083],{"class":49},[39,164631,164632],{"class":45}," index, name ",[39,164634,27100],{"class":49},[39,164636,32661],{"class":56},[39,164638,164639],{"class":45},"(names):\n",[39,164641,164642,164644],{"class":41,"line":74},[39,164643,32354],{"class":56},[39,164645,164646],{"class":45},"(index, name)\n",[19,164648,164649],{},"统计总分：",[29,164651,164653],{"className":31,"code":164652,"language":33,"meta":34,"style":34},"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",[36,164654,164655,164680,164688,164692,164703,164711,164715,164732],{"__ignoreMap":34},[39,164656,164657,164660,164662,164664,164666,164668,164670,164672,164674,164676,164678],{"class":41,"line":42},[39,164658,164659],{"class":45},"scores ",[39,164661,50],{"class":49},[39,164663,53280],{"class":45},[39,164665,2060],{"class":56},[39,164667,13491],{"class":45},[39,164669,1934],{"class":56},[39,164671,13491],{"class":45},[39,164673,1465],{"class":56},[39,164675,13491],{"class":45},[39,164677,1761],{"class":56},[39,164679,34301],{"class":45},[39,164681,164682,164684,164686],{"class":41,"line":74},[39,164683,158205],{"class":45},[39,164685,50],{"class":49},[39,164687,48388],{"class":56},[39,164689,164690],{"class":41,"line":99},[39,164691,3458],{"emptyLinePlaceholder":1145},[39,164693,164694,164696,164698,164700],{"class":41,"line":106},[39,164695,4083],{"class":49},[39,164697,158728],{"class":45},[39,164699,27100],{"class":49},[39,164701,164702],{"class":45}," scores:\n",[39,164704,164705,164707,164709],{"class":41,"line":112},[39,164706,160252],{"class":45},[39,164708,10533],{"class":49},[39,164710,2644],{"class":45},[39,164712,164713],{"class":41,"line":118},[39,164714,3458],{"emptyLinePlaceholder":1145},[39,164716,164717,164720,164722,164725,164727,164729],{"class":41,"line":413},[39,164718,164719],{"class":45},"avg ",[39,164721,50],{"class":49},[39,164723,164724],{"class":45}," total ",[39,164726,1784],{"class":49},[39,164728,8387],{"class":56},[39,164730,164731],{"class":45},"(scores)\n",[39,164733,164734,164736,164738,164740,164743,164745,164748,164750,164752,164754],{"class":41,"line":419},[39,164735,31470],{"class":56},[39,164737,1221],{"class":45},[39,164739,1270],{"class":49},[39,164741,164742],{"class":1319},"\"平均分:",[39,164744,2094],{"class":56},[39,164746,164747],{"class":45},"avg",[39,164749,158104],{"class":49},[39,164751,2144],{"class":56},[39,164753,1462],{"class":1319},[39,164755,209],{"class":45},[14,164757,164759],{"id":164758},"_66-元组tuple","6.6 元组tuple",[19,164761,164762],{},"元组和列表类似，但不可修改。",[29,164764,164766],{"className":31,"code":164765,"language":33,"meta":34,"style":34},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[36,164767,164768,164785],{"__ignoreMap":34},[39,164769,164770,164773,164775,164777,164779,164781,164783],{"class":41,"line":42},[39,164771,164772],{"class":45},"point ",[39,164774,50],{"class":49},[39,164776,2716],{"class":45},[39,164778,146],{"class":56},[39,164780,13491],{"class":45},[39,164782,1898],{"class":56},[39,164784,209],{"class":45},[39,164786,164787,164789,164791,164793,164795,164797,164799,164801,164803],{"class":41,"line":74},[39,164788,117259],{"class":45},[39,164790,50],{"class":49},[39,164792,2716],{"class":45},[39,164794,150833],{"class":1319},[39,164796,13491],{"class":45},[39,164798,1849],{"class":56},[39,164800,13491],{"class":45},[39,164802,70323],{"class":1319},[39,164804,209],{"class":45},[19,164806,164807],{},"单元素元组必须加逗号：",[29,164809,164811],{"className":31,"code":164810,"language":33,"meta":34,"style":34},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[36,164812,164813,164827,164840,164844,164858],{"__ignoreMap":34},[39,164814,164815,164818,164820,164822,164824],{"class":41,"line":42},[39,164816,164817],{"class":45},"t1 ",[39,164819,50],{"class":49},[39,164821,2716],{"class":45},[39,164823,146],{"class":56},[39,164825,164826],{"class":45},",)\n",[39,164828,164829,164832,164834,164836,164838],{"class":41,"line":74},[39,164830,164831],{"class":45},"t2 ",[39,164833,50],{"class":49},[39,164835,2716],{"class":45},[39,164837,146],{"class":56},[39,164839,209],{"class":45},[39,164841,164842],{"class":41,"line":99},[39,164843,3458],{"emptyLinePlaceholder":1145},[39,164845,164846,164848,164850,164852,164855],{"class":41,"line":106},[39,164847,31470],{"class":56},[39,164849,1221],{"class":45},[39,164851,104052],{"class":56},[39,164853,164854],{"class":45},"(t1))  ",[39,164856,164857],{"class":102},"# tuple\n",[39,164859,164860,164862,164864,164866,164869],{"class":41,"line":112},[39,164861,31470],{"class":56},[39,164863,1221],{"class":45},[39,164865,104052],{"class":56},[39,164867,164868],{"class":45},"(t2))  ",[39,164870,164871],{"class":102},"# int\n",[19,164873,164874],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164876,164878],{"id":164877},"_67-字符串str","6.7 字符串str",[19,164880,164881],{},"字符串也是序列，可以索引、切片和遍历。",[29,164883,164885],{"className":31,"code":164884,"language":33,"meta":34,"style":34},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[36,164886,164887,164895,164899,164910,164922,164926,164937],{"__ignoreMap":34},[39,164888,164889,164891,164893],{"class":41,"line":42},[39,164890,157389],{"class":45},[39,164892,50],{"class":49},[39,164894,160626],{"class":1319},[39,164896,164897],{"class":41,"line":74},[39,164898,3458],{"emptyLinePlaceholder":1145},[39,164900,164901,164903,164906,164908],{"class":41,"line":99},[39,164902,31470],{"class":56},[39,164904,164905],{"class":45},"(text[",[39,164907,260],{"class":56},[39,164909,71],{"class":45},[39,164911,164912,164914,164916,164918,164920],{"class":41,"line":106},[39,164913,31470],{"class":56},[39,164915,164905],{"class":45},[39,164917,1732],{"class":49},[39,164919,57],{"class":56},[39,164921,71],{"class":45},[39,164923,164924],{"class":41,"line":112},[39,164925,3458],{"emptyLinePlaceholder":1145},[39,164927,164928,164930,164932,164934],{"class":41,"line":118},[39,164929,4083],{"class":49},[39,164931,160637],{"class":45},[39,164933,27100],{"class":49},[39,164935,164936],{"class":45}," text:\n",[39,164938,164939,164941],{"class":41,"line":413},[39,164940,32354],{"class":56},[39,164942,160648],{"class":45},[19,164944,164945],{},"字符串不可变：",[29,164947,164949],{"className":31,"code":164948,"language":33,"meta":34,"style":34},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[36,164950,164951,164959],{"__ignoreMap":34},[39,164952,164953,164955,164957],{"class":41,"line":42},[39,164954,157389],{"class":45},[39,164956,50],{"class":49},[39,164958,160626],{"class":1319},[39,164960,164961,164964,164966,164968,164970,164973],{"class":41,"line":74},[39,164962,164963],{"class":45},"text[",[39,164965,260],{"class":56},[39,164967,5501],{"class":45},[39,164969,50],{"class":49},[39,164971,164972],{"class":1319}," \"P\"",[39,164974,164975],{"class":102},"  # 报错\n",[19,164977,164978],{},"如果要得到新字符串：",[29,164980,164982],{"className":31,"code":164981,"language":33,"meta":34,"style":34},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[36,164983,164984,164992,165010],{"__ignoreMap":34},[39,164985,164986,164988,164990],{"class":41,"line":42},[39,164987,157389],{"class":45},[39,164989,50],{"class":49},[39,164991,160626],{"class":1319},[39,164993,164994,164996,164998,165000,165002,165005,165007],{"class":41,"line":74},[39,164995,157389],{"class":45},[39,164997,50],{"class":49},[39,164999,164972],{"class":1319},[39,165001,46621],{"class":49},[39,165003,165004],{"class":45}," text[",[39,165006,57],{"class":56},[39,165008,165009],{"class":45},":]\n",[39,165011,165012,165014],{"class":41,"line":99},[39,165013,31470],{"class":56},[39,165015,165016],{"class":45},"(text)\n",[14,165018,165020],{"id":165019},"_68-切片","6.8 切片",[19,165022,165023],{},"切片用于从序列中取一部分。",[29,165025,165027],{"className":31,"code":165026,"language":33,"meta":34,"style":34},"序列[开始:结束:步长]\n",[36,165028,165029],{"__ignoreMap":34},[39,165030,165031],{"class":41,"line":42},[39,165032,165026],{"class":45},[19,165034,165035],{},"结束位置不包含。",[29,165037,165039],{"className":31,"code":165038,"language":33,"meta":34,"style":34},"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",[36,165040,165041,165078,165082,165101,165116,165130,165144],{"__ignoreMap":34},[39,165042,165043,165046,165048,165050,165052,165054,165056,165058,165060,165062,165064,165066,165068,165070,165072,165074,165076],{"class":41,"line":42},[39,165044,165045],{"class":45},"nums ",[39,165047,50],{"class":49},[39,165049,53280],{"class":45},[39,165051,260],{"class":56},[39,165053,13491],{"class":45},[39,165055,57],{"class":56},[39,165057,13491],{"class":45},[39,165059,63],{"class":56},[39,165061,13491],{"class":45},[39,165063,68],{"class":56},[39,165065,13491],{"class":45},[39,165067,84],{"class":56},[39,165069,13491],{"class":45},[39,165071,89],{"class":56},[39,165073,13491],{"class":45},[39,165075,94],{"class":56},[39,165077,34301],{"class":45},[39,165079,165080],{"class":41,"line":74},[39,165081,3458],{"emptyLinePlaceholder":1145},[39,165083,165084,165086,165089,165091,165093,165095,165098],{"class":41,"line":99},[39,165085,31470],{"class":56},[39,165087,165088],{"class":45},"(nums[",[39,165090,57],{"class":56},[39,165092,2057],{"class":45},[39,165094,84],{"class":56},[39,165096,165097],{"class":45},"])    ",[39,165099,165100],{"class":102},"# [1, 2, 3]\n",[39,165102,165103,165105,165108,165110,165113],{"class":41,"line":106},[39,165104,31470],{"class":56},[39,165106,165107],{"class":45},"(nums[:",[39,165109,68],{"class":56},[39,165111,165112],{"class":45},"])     ",[39,165114,165115],{"class":102},"# [0, 1, 2]\n",[39,165117,165118,165120,165122,165124,165127],{"class":41,"line":112},[39,165119,31470],{"class":56},[39,165121,165088],{"class":45},[39,165123,68],{"class":56},[39,165125,165126],{"class":45},":])     ",[39,165128,165129],{"class":102},"# [3, 4, 5, 6]\n",[39,165131,165132,165134,165137,165139,165141],{"class":41,"line":118},[39,165133,31470],{"class":56},[39,165135,165136],{"class":45},"(nums[::",[39,165138,63],{"class":56},[39,165140,165097],{"class":45},[39,165142,165143],{"class":102},"# [0, 2, 4, 6]\n",[39,165145,165146,165148,165150,165152,165154,165157],{"class":41,"line":413},[39,165147,31470],{"class":56},[39,165149,165136],{"class":45},[39,165151,1732],{"class":49},[39,165153,57],{"class":56},[39,165155,165156],{"class":45},"])   ",[39,165158,165159],{"class":102},"# 反转\n",[19,165161,165162],{},"字符串切片：",[29,165164,165166],{"className":31,"code":165165,"language":33,"meta":34,"style":34},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[36,165167,165168,165177,165191],{"__ignoreMap":34},[39,165169,165170,165172,165174],{"class":41,"line":42},[39,165171,157389],{"class":45},[39,165173,50],{"class":49},[39,165175,165176],{"class":1319}," \"abcdef\"\n",[39,165178,165179,165181,165183,165185,165187,165189],{"class":41,"line":74},[39,165180,31470],{"class":56},[39,165182,164905],{"class":45},[39,165184,57],{"class":56},[39,165186,2057],{"class":45},[39,165188,84],{"class":56},[39,165190,71],{"class":45},[39,165192,165193,165195,165198,165200,165202],{"class":41,"line":99},[39,165194,31470],{"class":56},[39,165196,165197],{"class":45},"(text[::",[39,165199,1732],{"class":49},[39,165201,57],{"class":56},[39,165203,71],{"class":45},[14,165205,165207],{"id":165206},"_69-集合set","6.9 集合set",[19,165209,165210],{},"集合特点：",[1171,165212,165213,165216,165219],{},[1174,165214,165215],{},"无序。",[1174,165217,165218],{},"元素不重复。",[1174,165220,165221],{},"可以做交集、并集、差集。",[29,165223,165225],{"className":31,"code":165224,"language":33,"meta":34,"style":34},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[36,165226,165227,165255],{"__ignoreMap":34},[39,165228,165229,165231,165233,165235,165237,165239,165241,165243,165245,165247,165249,165251,165253],{"class":41,"line":42},[39,165230,165045],{"class":45},[39,165232,50],{"class":49},[39,165234,5506],{"class":45},[39,165236,57],{"class":56},[39,165238,13491],{"class":45},[39,165240,63],{"class":56},[39,165242,13491],{"class":45},[39,165244,68],{"class":56},[39,165246,13491],{"class":45},[39,165248,68],{"class":56},[39,165250,13491],{"class":45},[39,165252,84],{"class":56},[39,165254,2630],{"class":45},[39,165256,165257,165259],{"class":41,"line":74},[39,165258,31470],{"class":56},[39,165260,165261],{"class":45},"(nums)\n",[19,165263,165264],{},"创建空集合：",[29,165266,165268],{"className":31,"code":165267,"language":33,"meta":34,"style":34},"s = set()\n",[36,165269,165270],{"__ignoreMap":34},[39,165271,165272,165274,165276,165278],{"class":41,"line":42},[39,165273,11635],{"class":45},[39,165275,50],{"class":49},[39,165277,120667],{"class":56},[39,165279,3034],{"class":45},[19,165281,10081,165282,165284],{},[36,165283,33514],{}," 是空字典，不是空集合。",[19,165286,165287],{},"集合常用操作：",[29,165289,165291],{"className":31,"code":165290,"language":33,"meta":34,"style":34},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[36,165292,165293,165313,165317,165326,165335,165344],{"__ignoreMap":34},[39,165294,165295,165297,165299,165301,165303,165305,165307,165309,165311],{"class":41,"line":42},[39,165296,11635],{"class":45},[39,165298,50],{"class":49},[39,165300,5506],{"class":45},[39,165302,57],{"class":56},[39,165304,13491],{"class":45},[39,165306,63],{"class":56},[39,165308,13491],{"class":45},[39,165310,68],{"class":56},[39,165312,2630],{"class":45},[39,165314,165315],{"class":41,"line":74},[39,165316,3458],{"emptyLinePlaceholder":1145},[39,165318,165319,165322,165324],{"class":41,"line":99},[39,165320,165321],{"class":45},"s.add(",[39,165323,84],{"class":56},[39,165325,209],{"class":45},[39,165327,165328,165331,165333],{"class":41,"line":106},[39,165329,165330],{"class":45},"s.remove(",[39,165332,63],{"class":56},[39,165334,209],{"class":45},[39,165336,165337,165340,165342],{"class":41,"line":112},[39,165338,165339],{"class":45},"s.discard(",[39,165341,146],{"class":56},[39,165343,209],{"class":45},[39,165345,165346,165348,165350,165352],{"class":41,"line":118},[39,165347,31470],{"class":56},[39,165349,1221],{"class":45},[39,165351,8414],{"class":56},[39,165353,165354],{"class":45},"(s))\n",[19,165356,165357],{},"交并差：",[29,165359,165361],{"className":31,"code":165360,"language":33,"meta":34,"style":34},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[36,165362,165363,165383,165403,165407,165422,165435],{"__ignoreMap":34},[39,165364,165365,165367,165369,165371,165373,165375,165377,165379,165381],{"class":41,"line":42},[39,165366,11975],{"class":45},[39,165368,50],{"class":49},[39,165370,5506],{"class":45},[39,165372,57],{"class":56},[39,165374,13491],{"class":45},[39,165376,63],{"class":56},[39,165378,13491],{"class":45},[39,165380,68],{"class":56},[39,165382,2630],{"class":45},[39,165384,165385,165387,165389,165391,165393,165395,165397,165399,165401],{"class":41,"line":74},[39,165386,12001],{"class":45},[39,165388,50],{"class":49},[39,165390,5506],{"class":45},[39,165392,68],{"class":56},[39,165394,13491],{"class":45},[39,165396,84],{"class":56},[39,165398,13491],{"class":45},[39,165400,89],{"class":56},[39,165402,2630],{"class":45},[39,165404,165405],{"class":41,"line":99},[39,165406,3458],{"emptyLinePlaceholder":1145},[39,165408,165409,165411,165414,165416,165419],{"class":41,"line":106},[39,165410,31470],{"class":56},[39,165412,165413],{"class":45},"(a ",[39,165415,1557],{"class":49},[39,165417,165418],{"class":45}," b)  ",[39,165420,165421],{"class":102},"# 交集\n",[39,165423,165424,165426,165428,165430,165432],{"class":41,"line":112},[39,165425,31470],{"class":56},[39,165427,165413],{"class":45},[39,165429,2119],{"class":49},[39,165431,165418],{"class":45},[39,165433,165434],{"class":102},"# 并集\n",[39,165436,165437,165439,165441,165443,165445],{"class":41,"line":118},[39,165438,31470],{"class":56},[39,165440,165413],{"class":45},[39,165442,1732],{"class":49},[39,165444,165418],{"class":45},[39,165446,165447],{"class":102},"# 差集\n",[14,165449,165451],{"id":165450},"_610-字典dict","6.10 字典dict",[19,165453,165454],{},"字典通过 key-value 保存数据。",[29,165456,165458],{"className":31,"code":165457,"language":33,"meta":34,"style":34},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[36,165459,165460,165468,165478,165489,165499],{"__ignoreMap":34},[39,165461,165462,165464,165466],{"class":41,"line":42},[39,165463,150426],{"class":45},[39,165465,50],{"class":49},[39,165467,16628],{"class":45},[39,165469,165470,165472,165474,165476],{"class":41,"line":74},[39,165471,147965],{"class":1319},[39,165473,52491],{"class":45},[39,165475,150833],{"class":1319},[39,165477,32521],{"class":45},[39,165479,165480,165483,165485,165487],{"class":41,"line":99},[39,165481,165482],{"class":1319},"    \"age\"",[39,165484,52491],{"class":45},[39,165486,1849],{"class":56},[39,165488,32521],{"class":45},[39,165490,165491,165494,165496],{"class":41,"line":106},[39,165492,165493],{"class":1319},"    \"score\"",[39,165495,52491],{"class":45},[39,165497,165498],{"class":56},"95\n",[39,165500,165501],{"class":41,"line":112},[39,165502,2630],{"class":45},[19,165504,165505],{},"获取值：",[29,165507,165509],{"className":31,"code":165508,"language":33,"meta":34,"style":34},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[36,165510,165511,165522],{"__ignoreMap":34},[39,165512,165513,165515,165518,165520],{"class":41,"line":42},[39,165514,31470],{"class":56},[39,165516,165517],{"class":45},"(student[",[39,165519,63733],{"class":1319},[39,165521,71],{"class":45},[39,165523,165524,165526,165529,165531],{"class":41,"line":74},[39,165525,31470],{"class":56},[39,165527,165528],{"class":45},"(student.get(",[39,165530,63733],{"class":1319},[39,165532,31552],{"class":45},[19,165534,16444],{},[29,165536,165538],{"className":31,"code":165537,"language":33,"meta":34,"style":34},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[36,165539,165540,165553],{"__ignoreMap":34},[39,165541,165542,165544,165547,165550],{"class":41,"line":42},[39,165543,153804],{"class":45},[39,165545,165546],{"class":1319},"\"address\"",[39,165548,165549],{"class":45},"]     ",[39,165551,165552],{"class":102},"# key不存在会报错\n",[39,165554,165555,165558,165560,165562],{"class":41,"line":74},[39,165556,165557],{"class":45},"student.get(",[39,165559,165546],{"class":1319},[39,165561,14770],{"class":45},[39,165563,165564],{"class":102},"# key不存在返回None\n",[19,165566,165567],{},"设置默认值：",[29,165569,165571],{"className":31,"code":165570,"language":33,"meta":34,"style":34},"print(student.get(\"address\", \"未知\"))\n",[36,165572,165573],{"__ignoreMap":34},[39,165574,165575,165577,165579,165581,165583,165586],{"class":41,"line":42},[39,165576,31470],{"class":56},[39,165578,165528],{"class":45},[39,165580,165546],{"class":1319},[39,165582,13491],{"class":45},[39,165584,165585],{"class":1319},"\"未知\"",[39,165587,31552],{"class":45},[19,165589,165590],{},"新增和修改：",[29,165592,165594],{"className":31,"code":165593,"language":33,"meta":34,"style":34},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[36,165595,165596,165609],{"__ignoreMap":34},[39,165597,165598,165600,165602,165604,165606],{"class":41,"line":42},[39,165599,153804],{"class":45},[39,165601,70178],{"class":1319},[39,165603,5501],{"class":45},[39,165605,50],{"class":49},[39,165607,165608],{"class":56}," 19\n",[39,165610,165611,165613,165615,165617,165619],{"class":41,"line":74},[39,165612,153804],{"class":45},[39,165614,165546],{"class":1319},[39,165616,5501],{"class":45},[39,165618,50],{"class":49},[39,165620,165621],{"class":1319}," \"北京\"\n",[19,165623,165624],{},"删除：",[29,165626,165628],{"className":31,"code":165627,"language":33,"meta":34,"style":34},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[36,165629,165630,165643,165653],{"__ignoreMap":34},[39,165631,165632,165634,165636,165639,165641],{"class":41,"line":42},[39,165633,156303],{"class":45},[39,165635,50],{"class":49},[39,165637,165638],{"class":45}," student.pop(",[39,165640,152417],{"class":1319},[39,165642,209],{"class":45},[39,165644,165645,165647,165649,165651],{"class":41,"line":74},[39,165646,164328],{"class":49},[39,165648,153094],{"class":45},[39,165650,70178],{"class":1319},[39,165652,34301],{"class":45},[39,165654,165655],{"class":41,"line":99},[39,165656,165657],{"class":45},"student.clear()\n",[14,165659,165661],{"id":165660},"_611-字典遍历","6.11 字典遍历",[19,165663,165664],{},"遍历 key：",[29,165666,165668],{"className":31,"code":165667,"language":33,"meta":34,"style":34},"for key in student:\n    print(key, student[key])\n",[36,165669,165670,165682],{"__ignoreMap":34},[39,165671,165672,165674,165677,165679],{"class":41,"line":42},[39,165673,4083],{"class":49},[39,165675,165676],{"class":45}," key ",[39,165678,27100],{"class":49},[39,165680,165681],{"class":45}," student:\n",[39,165683,165684,165686],{"class":41,"line":74},[39,165685,32354],{"class":56},[39,165687,165688],{"class":45},"(key, student[key])\n",[19,165690,165691],{},"遍历 value：",[29,165693,165695],{"className":31,"code":165694,"language":33,"meta":34,"style":34},"for value in student.values():\n    print(value)\n",[36,165696,165697,165709],{"__ignoreMap":34},[39,165698,165699,165701,165704,165706],{"class":41,"line":42},[39,165700,4083],{"class":49},[39,165702,165703],{"class":45}," value ",[39,165705,27100],{"class":49},[39,165707,165708],{"class":45}," student.values():\n",[39,165710,165711,165713],{"class":41,"line":74},[39,165712,32354],{"class":56},[39,165714,165715],{"class":45},"(value)\n",[19,165717,165718],{},"遍历 key 和 value：",[29,165720,165722],{"className":31,"code":165721,"language":33,"meta":34,"style":34},"for key, value in student.items():\n    print(key, value)\n",[36,165723,165724,165736],{"__ignoreMap":34},[39,165725,165726,165728,165731,165733],{"class":41,"line":42},[39,165727,4083],{"class":49},[39,165729,165730],{"class":45}," key, value ",[39,165732,27100],{"class":49},[39,165734,165735],{"class":45}," student.items():\n",[39,165737,165738,165740],{"class":41,"line":74},[39,165739,32354],{"class":56},[39,165741,165742],{"class":45},"(key, value)\n",[14,165744,165746],{"id":165745},"_612-嵌套容器","6.12 嵌套容器",[19,165748,165749],{},"列表中保存字典，是项目中最常见的结构之一。",[29,165751,165753],{"className":31,"code":165752,"language":33,"meta":34,"style":34},"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",[36,165754,165755,165763,165791,165819,165847,165851,165855,165865],{"__ignoreMap":34},[39,165756,165757,165759,165761],{"class":41,"line":42},[39,165758,160661],{"class":45},[39,165760,50],{"class":49},[39,165762,56501],{"class":45},[39,165764,165765,165767,165769,165771,165773,165775,165777,165779,165781,165783,165785,165787,165789],{"class":41,"line":74},[39,165766,149330],{"class":45},[39,165768,63733],{"class":1319},[39,165770,52491],{"class":45},[39,165772,150833],{"class":1319},[39,165774,13491],{"class":45},[39,165776,70178],{"class":1319},[39,165778,52491],{"class":45},[39,165780,1849],{"class":56},[39,165782,13491],{"class":45},[39,165784,152417],{"class":1319},[39,165786,52491],{"class":45},[39,165788,2187],{"class":56},[39,165790,5987],{"class":45},[39,165792,165793,165795,165797,165799,165801,165803,165805,165807,165809,165811,165813,165815,165817],{"class":41,"line":99},[39,165794,149330],{"class":45},[39,165796,63733],{"class":1319},[39,165798,52491],{"class":45},[39,165800,151881],{"class":1319},[39,165802,13491],{"class":45},[39,165804,70178],{"class":1319},[39,165806,52491],{"class":45},[39,165808,1825],{"class":56},[39,165810,13491],{"class":45},[39,165812,152417],{"class":1319},[39,165814,52491],{"class":45},[39,165816,2009],{"class":56},[39,165818,5987],{"class":45},[39,165820,165821,165823,165825,165827,165829,165831,165833,165835,165837,165839,165841,165843,165845],{"class":41,"line":106},[39,165822,149330],{"class":45},[39,165824,63733],{"class":1319},[39,165826,52491],{"class":45},[39,165828,160676],{"class":1319},[39,165830,13491],{"class":45},[39,165832,70178],{"class":1319},[39,165834,52491],{"class":45},[39,165836,1874],{"class":56},[39,165838,13491],{"class":45},[39,165840,152417],{"class":1319},[39,165842,52491],{"class":45},[39,165844,1609],{"class":56},[39,165846,5987],{"class":45},[39,165848,165849],{"class":41,"line":112},[39,165850,34301],{"class":45},[39,165852,165853],{"class":41,"line":118},[39,165854,3458],{"emptyLinePlaceholder":1145},[39,165856,165857,165859,165861,165863],{"class":41,"line":413},[39,165858,4083],{"class":49},[39,165860,153082],{"class":45},[39,165862,27100],{"class":49},[39,165864,153087],{"class":45},[39,165866,165867,165869,165871,165873,165876,165878],{"class":41,"line":419},[39,165868,32354],{"class":56},[39,165870,165517],{"class":45},[39,165872,63733],{"class":1319},[39,165874,165875],{"class":45},"], student[",[39,165877,152417],{"class":1319},[39,165879,71],{"class":45},[19,165881,165882],{},"统计平均分：",[29,165884,165886],{"className":31,"code":165885,"language":33,"meta":34,"style":34},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[36,165887,165888,165896,165900,165910,165922,165926,165941],{"__ignoreMap":34},[39,165889,165890,165892,165894],{"class":41,"line":42},[39,165891,158205],{"class":45},[39,165893,50],{"class":49},[39,165895,48388],{"class":56},[39,165897,165898],{"class":41,"line":74},[39,165899,3458],{"emptyLinePlaceholder":1145},[39,165901,165902,165904,165906,165908],{"class":41,"line":99},[39,165903,4083],{"class":49},[39,165905,153082],{"class":45},[39,165907,27100],{"class":49},[39,165909,153087],{"class":45},[39,165911,165912,165914,165916,165918,165920],{"class":41,"line":106},[39,165913,160252],{"class":45},[39,165915,10533],{"class":49},[39,165917,153094],{"class":45},[39,165919,152417],{"class":1319},[39,165921,34301],{"class":45},[39,165923,165924],{"class":41,"line":112},[39,165925,3458],{"emptyLinePlaceholder":1145},[39,165927,165928,165930,165932,165934,165936,165938],{"class":41,"line":118},[39,165929,164719],{"class":45},[39,165931,50],{"class":49},[39,165933,164724],{"class":45},[39,165935,1784],{"class":49},[39,165937,8387],{"class":56},[39,165939,165940],{"class":45},"(students)\n",[39,165942,165943,165945,165947,165949,165951,165953,165955,165957,165959,165961],{"class":41,"line":413},[39,165944,31470],{"class":56},[39,165946,1221],{"class":45},[39,165948,1270],{"class":49},[39,165950,164742],{"class":1319},[39,165952,2094],{"class":56},[39,165954,164747],{"class":45},[39,165956,158104],{"class":49},[39,165958,2144],{"class":56},[39,165960,1462],{"class":1319},[39,165962,209],{"class":45},[19,165964,165965],{},"查找学生：",[29,165967,165969],{"className":31,"code":165968,"language":33,"meta":34,"style":34},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[36,165970,165971,165986,165990,166000,166014,166020,166024,166030],{"__ignoreMap":34},[39,165972,165973,165975,165977,165979,165981,165984],{"class":41,"line":42},[39,165974,112523],{"class":45},[39,165976,50],{"class":49},[39,165978,61659],{"class":56},[39,165980,1221],{"class":45},[39,165982,165983],{"class":1319},"\"请输入学生姓名:\"",[39,165985,209],{"class":45},[39,165987,165988],{"class":41,"line":74},[39,165989,3458],{"emptyLinePlaceholder":1145},[39,165991,165992,165994,165996,165998],{"class":41,"line":99},[39,165993,4083],{"class":49},[39,165995,153082],{"class":45},[39,165997,27100],{"class":49},[39,165999,153087],{"class":45},[39,166001,166002,166004,166006,166008,166010,166012],{"class":41,"line":106},[39,166003,4159],{"class":49},[39,166005,153094],{"class":45},[39,166007,63733],{"class":1319},[39,166009,5501],{"class":45},[39,166011,4007],{"class":49},[39,166013,161377],{"class":45},[39,166015,166016,166018],{"class":41,"line":112},[39,166017,33506],{"class":56},[39,166019,150987],{"class":45},[39,166021,166022],{"class":41,"line":118},[39,166023,32682],{"class":49},[39,166025,166026,166028],{"class":41,"line":413},[39,166027,2759],{"class":49},[39,166029,4797],{"class":45},[39,166031,166032,166034,166036,166039],{"class":41,"line":419},[39,166033,32354],{"class":56},[39,166035,1221],{"class":45},[39,166037,166038],{"class":1319},"\"没有找到\"",[39,166040,209],{"class":45},[14,166042,166044],{"id":166043},"_613-容器通用操作","6.13 容器通用操作",[19,166046,166047],{},"长度：",[29,166049,166051],{"className":31,"code":166050,"language":33,"meta":34,"style":34},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[36,166052,166053,166072,166082],{"__ignoreMap":34},[39,166054,166055,166057,166060,166062,166064,166066,166068,166070],{"class":41,"line":42},[39,166056,8414],{"class":56},[39,166058,166059],{"class":45},"([",[39,166061,57],{"class":56},[39,166063,13491],{"class":45},[39,166065,63],{"class":56},[39,166067,13491],{"class":45},[39,166069,68],{"class":56},[39,166071,71],{"class":45},[39,166073,166074,166076,166078,166080],{"class":41,"line":74},[39,166075,8414],{"class":56},[39,166077,1221],{"class":45},[39,166079,156825],{"class":1319},[39,166081,209],{"class":45},[39,166083,166084,166086,166089,166091,166093,166095],{"class":41,"line":99},[39,166085,8414],{"class":56},[39,166087,166088],{"class":45},"({",[39,166090,63733],{"class":1319},[39,166092,52491],{"class":45},[39,166094,150833],{"class":1319},[39,166096,166097],{"class":45},"})\n",[19,166099,166100],{},"最大最小：",[29,166102,166104],{"className":31,"code":166103,"language":33,"meta":34,"style":34},"max([1, 2, 3])\nmin([1, 2, 3])\n",[36,166105,166106,166124],{"__ignoreMap":34},[39,166107,166108,166110,166112,166114,166116,166118,166120,166122],{"class":41,"line":42},[39,166109,7071],{"class":56},[39,166111,166059],{"class":45},[39,166113,57],{"class":56},[39,166115,13491],{"class":45},[39,166117,63],{"class":56},[39,166119,13491],{"class":45},[39,166121,68],{"class":56},[39,166123,71],{"class":45},[39,166125,166126,166129,166131,166133,166135,166137,166139,166141],{"class":41,"line":74},[39,166127,166128],{"class":56},"min",[39,166130,166059],{"class":45},[39,166132,57],{"class":56},[39,166134,13491],{"class":45},[39,166136,63],{"class":56},[39,166138,13491],{"class":45},[39,166140,68],{"class":56},[39,166142,71],{"class":45},[19,166144,166145],{},"求和：",[29,166147,166149],{"className":31,"code":166148,"language":33,"meta":34,"style":34},"sum([1, 2, 3])\n",[36,166150,166151],{"__ignoreMap":34},[39,166152,166153,166156,166158,166160,166162,166164,166166,166168],{"class":41,"line":42},[39,166154,166155],{"class":56},"sum",[39,166157,166059],{"class":45},[39,166159,57],{"class":56},[39,166161,13491],{"class":45},[39,166163,63],{"class":56},[39,166165,13491],{"class":45},[39,166167,68],{"class":56},[39,166169,71],{"class":45},[19,166171,164416],{},[29,166173,166175],{"className":31,"code":166174,"language":33,"meta":34,"style":34},"sorted([3, 1, 2])\n",[36,166176,166177],{"__ignoreMap":34},[39,166178,166179,166182,166184,166186,166188,166190,166192,166194],{"class":41,"line":42},[39,166180,166181],{"class":56},"sorted",[39,166183,166059],{"class":45},[39,166185,68],{"class":56},[39,166187,13491],{"class":45},[39,166189,57],{"class":56},[39,166191,13491],{"class":45},[39,166193,63],{"class":56},[39,166195,71],{"class":45},[19,166197,166198],{},"类型转换：",[29,166200,166202],{"className":31,"code":166201,"language":33,"meta":34,"style":34},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[36,166203,166204,166214,166232],{"__ignoreMap":34},[39,166205,166206,166208,166210,166212],{"class":41,"line":42},[39,166207,155015],{"class":56},[39,166209,1221],{"class":45},[39,166211,156825],{"class":1319},[39,166213,209],{"class":45},[39,166215,166216,166218,166220,166222,166224,166226,166228,166230],{"class":41,"line":74},[39,166217,156210],{"class":56},[39,166219,166059],{"class":45},[39,166221,57],{"class":56},[39,166223,13491],{"class":45},[39,166225,63],{"class":56},[39,166227,13491],{"class":45},[39,166229,68],{"class":56},[39,166231,71],{"class":45},[39,166233,166234,166236,166238,166240,166242,166244,166246,166248,166250,166252],{"class":41,"line":99},[39,166235,156235],{"class":56},[39,166237,166059],{"class":45},[39,166239,57],{"class":56},[39,166241,13491],{"class":45},[39,166243,57],{"class":56},[39,166245,13491],{"class":45},[39,166247,63],{"class":56},[39,166249,13491],{"class":45},[39,166251,68],{"class":56},[39,166253,71],{"class":45},[19,166255,166256],{},"成员判断：",[29,166258,166260],{"className":31,"code":166259,"language":33,"meta":34,"style":34},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[36,166261,166262,166279,166303],{"__ignoreMap":34},[39,166263,166264,166266,166268,166271,166274,166277],{"class":41,"line":42},[39,166265,31470],{"class":56},[39,166267,1221],{"class":45},[39,166269,166270],{"class":1319},"\"a\"",[39,166272,166273],{"class":49}," in",[39,166275,166276],{"class":1319}," \"abc\"",[39,166278,209],{"class":45},[39,166280,166281,166283,166285,166287,166289,166291,166293,166295,166297,166299,166301],{"class":41,"line":74},[39,166282,31470],{"class":56},[39,166284,1221],{"class":45},[39,166286,57],{"class":56},[39,166288,166273],{"class":49},[39,166290,53280],{"class":45},[39,166292,57],{"class":56},[39,166294,13491],{"class":45},[39,166296,63],{"class":56},[39,166298,13491],{"class":45},[39,166300,68],{"class":56},[39,166302,71],{"class":45},[39,166304,166305,166307,166309,166311,166313,166315,166317,166319,166321],{"class":41,"line":99},[39,166306,31470],{"class":56},[39,166308,1221],{"class":45},[39,166310,63733],{"class":1319},[39,166312,166273],{"class":49},[39,166314,5506],{"class":45},[39,166316,63733],{"class":1319},[39,166318,52491],{"class":45},[39,166320,150833],{"class":1319},[39,166322,166097],{"class":45},[14,166324,166326],{"id":166325},"_614-推导式","6.14 推导式",[19,166328,166329],{},"推导式用于快速生成容器。",[19,166331,166332],{},"列表推导式：",[29,166334,166336],{"className":31,"code":166335,"language":33,"meta":34,"style":34},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[36,166337,166338,166365],{"__ignoreMap":34},[39,166339,166340,166342,166344,166347,166349,166351,166353,166355,166357,166359,166361,166363],{"class":41,"line":42},[39,166341,165045],{"class":45},[39,166343,50],{"class":49},[39,166345,166346],{"class":45}," [i ",[39,166348,4083],{"class":49},[39,166350,10494],{"class":45},[39,166352,27100],{"class":49},[39,166354,33498],{"class":56},[39,166356,1221],{"class":45},[39,166358,57],{"class":56},[39,166360,13491],{"class":45},[39,166362,94],{"class":56},[39,166364,98349],{"class":45},[39,166366,166367,166369],{"class":41,"line":74},[39,166368,31470],{"class":56},[39,166370,165261],{"class":45},[19,166372,166373],{},"带条件：",[29,166375,166377],{"className":31,"code":166376,"language":33,"meta":34,"style":34},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[36,166378,166379,166420],{"__ignoreMap":34},[39,166380,166381,166384,166386,166388,166390,166392,166394,166396,166398,166400,166402,166404,166406,166408,166410,166412,166414,166416,166418],{"class":41,"line":42},[39,166382,166383],{"class":45},"even_nums ",[39,166385,50],{"class":49},[39,166387,166346],{"class":45},[39,166389,4083],{"class":49},[39,166391,10494],{"class":45},[39,166393,27100],{"class":49},[39,166395,33498],{"class":56},[39,166397,1221],{"class":45},[39,166399,57],{"class":56},[39,166401,13491],{"class":45},[39,166403,221],{"class":56},[39,166405,14770],{"class":45},[39,166407,2596],{"class":49},[39,166409,10494],{"class":45},[39,166411,1534],{"class":49},[39,166413,15811],{"class":56},[39,166415,102504],{"class":49},[39,166417,5151],{"class":56},[39,166419,34301],{"class":45},[39,166421,166422,166424],{"class":41,"line":74},[39,166423,31470],{"class":56},[39,166425,166426],{"class":45},"(even_nums)\n",[19,166428,166429],{},"字典推导式：",[29,166431,166433],{"className":31,"code":166432,"language":33,"meta":34,"style":34},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[36,166434,166435,166469],{"__ignoreMap":34},[39,166436,166437,166440,166442,166445,166447,166449,166452,166454,166456,166458,166460,166462,166464,166466],{"class":41,"line":42},[39,166438,166439],{"class":45},"squares ",[39,166441,50],{"class":49},[39,166443,166444],{"class":45}," {i: i ",[39,166446,11717],{"class":49},[39,166448,15811],{"class":56},[39,166450,166451],{"class":49}," for",[39,166453,10494],{"class":45},[39,166455,27100],{"class":49},[39,166457,33498],{"class":56},[39,166459,1221],{"class":45},[39,166461,57],{"class":56},[39,166463,13491],{"class":45},[39,166465,94],{"class":56},[39,166467,166468],{"class":45},")}\n",[39,166470,166471,166473],{"class":41,"line":74},[39,166472,31470],{"class":56},[39,166474,166475],{"class":45},"(squares)\n",[19,166477,166478],{},"集合推导式：",[29,166480,166482],{"className":31,"code":166481,"language":33,"meta":34,"style":34},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[36,166483,166484,166505],{"__ignoreMap":34},[39,166485,166486,166489,166491,166494,166496,166498,166500,166503],{"class":41,"line":42},[39,166487,166488],{"class":45},"chars ",[39,166490,50],{"class":49},[39,166492,166493],{"class":45}," {ch ",[39,166495,4083],{"class":49},[39,166497,160637],{"class":45},[39,166499,27100],{"class":49},[39,166501,166502],{"class":1319}," \"hello\"",[39,166504,2630],{"class":45},[39,166506,166507,166509],{"class":41,"line":74},[39,166508,31470],{"class":56},[39,166510,166511],{"class":45},"(chars)\n",[19,166513,166514],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166516,166518],{"id":166517},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[29,166520,166522],{"className":31,"code":166521,"language":33,"meta":34,"style":34},"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",[36,166523,166524,166532,166552,166572,166592,166612,166616,166620,166628,166642,166651,166655,166665,166677,166681,166701,166710,166714,166730,166735,166739,166753,166757,166779,166815],{"__ignoreMap":34},[39,166525,166526,166528,166530],{"class":41,"line":42},[39,166527,160661],{"class":45},[39,166529,50],{"class":49},[39,166531,56501],{"class":45},[39,166533,166534,166536,166538,166540,166542,166544,166546,166548,166550],{"class":41,"line":74},[39,166535,149330],{"class":45},[39,166537,63733],{"class":1319},[39,166539,52491],{"class":45},[39,166541,150833],{"class":1319},[39,166543,13491],{"class":45},[39,166545,152417],{"class":1319},[39,166547,52491],{"class":45},[39,166549,2187],{"class":56},[39,166551,5987],{"class":45},[39,166553,166554,166556,166558,166560,166562,166564,166566,166568,166570],{"class":41,"line":99},[39,166555,149330],{"class":45},[39,166557,63733],{"class":1319},[39,166559,52491],{"class":45},[39,166561,151881],{"class":1319},[39,166563,13491],{"class":45},[39,166565,152417],{"class":1319},[39,166567,52491],{"class":45},[39,166569,2009],{"class":56},[39,166571,5987],{"class":45},[39,166573,166574,166576,166578,166580,166582,166584,166586,166588,166590],{"class":41,"line":106},[39,166575,149330],{"class":45},[39,166577,63733],{"class":1319},[39,166579,52491],{"class":45},[39,166581,160676],{"class":1319},[39,166583,13491],{"class":45},[39,166585,152417],{"class":1319},[39,166587,52491],{"class":45},[39,166589,1609],{"class":56},[39,166591,5987],{"class":45},[39,166593,166594,166596,166598,166600,166602,166604,166606,166608,166610],{"class":41,"line":112},[39,166595,149330],{"class":45},[39,166597,63733],{"class":1319},[39,166599,52491],{"class":45},[39,166601,164255],{"class":1319},[39,166603,13491],{"class":45},[39,166605,152417],{"class":1319},[39,166607,52491],{"class":45},[39,166609,2080],{"class":56},[39,166611,5987],{"class":45},[39,166613,166614],{"class":41,"line":118},[39,166615,34301],{"class":45},[39,166617,166618],{"class":41,"line":413},[39,166619,3458],{"emptyLinePlaceholder":1145},[39,166621,166622,166624,166626],{"class":41,"line":419},[39,166623,158205],{"class":45},[39,166625,50],{"class":49},[39,166627,48388],{"class":56},[39,166629,166630,166633,166635,166638,166640],{"class":41,"line":425},[39,166631,166632],{"class":45},"max_student ",[39,166634,50],{"class":49},[39,166636,166637],{"class":45}," students[",[39,166639,260],{"class":56},[39,166641,34301],{"class":45},[39,166643,166644,166647,166649],{"class":41,"line":443},[39,166645,166646],{"class":45},"passed ",[39,166648,50],{"class":49},[39,166650,52892],{"class":45},[39,166652,166653],{"class":41,"line":449},[39,166654,3458],{"emptyLinePlaceholder":1145},[39,166656,166657,166659,166661,166663],{"class":41,"line":455},[39,166658,4083],{"class":49},[39,166660,153082],{"class":45},[39,166662,27100],{"class":49},[39,166664,153087],{"class":45},[39,166666,166667,166669,166671,166673,166675],{"class":41,"line":461},[39,166668,160252],{"class":45},[39,166670,10533],{"class":49},[39,166672,153094],{"class":45},[39,166674,152417],{"class":1319},[39,166676,34301],{"class":45},[39,166678,166679],{"class":41,"line":475},[39,166680,3458],{"emptyLinePlaceholder":1145},[39,166682,166683,166685,166687,166689,166691,166693,166696,166698],{"class":41,"line":665},[39,166684,4159],{"class":49},[39,166686,153094],{"class":45},[39,166688,152417],{"class":1319},[39,166690,5501],{"class":45},[39,166692,2158],{"class":49},[39,166694,166695],{"class":45}," max_student[",[39,166697,152417],{"class":1319},[39,166699,166700],{"class":45},"]:\n",[39,166702,166703,166706,166708],{"class":41,"line":671},[39,166704,166705],{"class":45},"        max_student ",[39,166707,50],{"class":49},[39,166709,153110],{"class":45},[39,166711,166712],{"class":41,"line":684},[39,166713,3458],{"emptyLinePlaceholder":1145},[39,166715,166716,166718,166720,166722,166724,166726,166728],{"class":41,"line":2732},[39,166717,4159],{"class":49},[39,166719,153094],{"class":45},[39,166721,152417],{"class":1319},[39,166723,5501],{"class":45},[39,166725,2768],{"class":49},[39,166727,158782],{"class":56},[39,166729,4797],{"class":45},[39,166731,166732],{"class":41,"line":2737},[39,166733,166734],{"class":45},"        passed.append(student)\n",[39,166736,166737],{"class":41,"line":2751},[39,166738,3458],{"emptyLinePlaceholder":1145},[39,166740,166741,166743,166745,166747,166749,166751],{"class":41,"line":2756},[39,166742,164719],{"class":45},[39,166744,50],{"class":49},[39,166746,164724],{"class":45},[39,166748,1784],{"class":49},[39,166750,8387],{"class":56},[39,166752,165940],{"class":45},[39,166754,166755],{"class":41,"line":2785},[39,166756,3458],{"emptyLinePlaceholder":1145},[39,166758,166759,166761,166763,166765,166767,166769,166771,166773,166775,166777],{"class":41,"line":2790},[39,166760,31470],{"class":56},[39,166762,1221],{"class":45},[39,166764,1270],{"class":49},[39,166766,164742],{"class":1319},[39,166768,2094],{"class":56},[39,166770,164747],{"class":45},[39,166772,158104],{"class":49},[39,166774,2144],{"class":56},[39,166776,1462],{"class":1319},[39,166778,209],{"class":45},[39,166780,166781,166783,166785,166787,166790,166792,166795,166797,166799,166801,166803,166805,166807,166809,166811,166813],{"class":41,"line":2807},[39,166782,31470],{"class":56},[39,166784,1221],{"class":45},[39,166786,1270],{"class":49},[39,166788,166789],{"class":1319},"\"最高分学生:",[39,166791,2094],{"class":56},[39,166793,166794],{"class":45},"max_student[",[39,166796,153827],{"class":1319},[39,166798,2138],{"class":45},[39,166800,2144],{"class":56},[39,166802,5506],{"class":56},[39,166804,166794],{"class":45},[39,166806,153865],{"class":1319},[39,166808,2138],{"class":45},[39,166810,2144],{"class":56},[39,166812,1462],{"class":1319},[39,166814,209],{"class":45},[39,166816,166817,166819,166821,166823,166826,166829,166832,166834,166836],{"class":41,"line":2812},[39,166818,31470],{"class":56},[39,166820,1221],{"class":45},[39,166822,1270],{"class":49},[39,166824,166825],{"class":1319},"\"及格人数:",[39,166827,166828],{"class":56},"{len",[39,166830,166831],{"class":45},"(passed)",[39,166833,2144],{"class":56},[39,166835,1462],{"class":1319},[39,166837,209],{"class":45},[14,166839,166841],{"id":166840},"_616-易错点","6.16 易错点",[1171,166843,166844,166847,166850,166853,166859,166868],{},[1174,166845,166846],{},"列表可变，元组和字符串不可变。",[1174,166848,166849],{},"切片结束位置不包含。",[1174,166851,166852],{},"字典通过 key 取值，不是通过索引。",[1174,166854,166855,166856,29442],{},"空集合要用 ",[36,166857,166858],{},"set()",[1174,166860,105311,166861,166864,166865,29442],{},[36,166862,166863],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[36,166866,166867],{},"get()",[1174,166869,166870],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166872,166874],{"id":166873},"_617-本章练习","6.17 本章练习",[1171,166876,166877,166880,166883,166886,166889],{},[1174,166878,166879],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[1174,166881,166882],{},"输入一句话，统计每个字符出现次数。",[1174,166884,166885],{},"使用集合去除列表中的重复元素。",[1174,166887,166888],{},"使用字典保存一个学生的信息，并实现修改成绩。",[1174,166890,166891],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1133,166893,166894],{},"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":34,"searchDepth":74,"depth":74,"links":166896},[166897,166898,166899,166900,166901,166902,166903,166904,166905,166906,166907,166908,166909,166910,166911,166912,166913],{"id":163877,"depth":74,"text":163878},{"id":163994,"depth":74,"text":163995},{"id":164084,"depth":74,"text":164085},{"id":164208,"depth":74,"text":164209},{"id":164571,"depth":74,"text":164572},{"id":164758,"depth":74,"text":164759},{"id":164877,"depth":74,"text":164878},{"id":165019,"depth":74,"text":165020},{"id":165206,"depth":74,"text":165207},{"id":165450,"depth":74,"text":165451},{"id":165660,"depth":74,"text":165661},{"id":165745,"depth":74,"text":165746},{"id":166043,"depth":74,"text":166044},{"id":166325,"depth":74,"text":166326},{"id":166517,"depth":74,"text":166518},{"id":166840,"depth":74,"text":166841},{"id":166873,"depth":74,"text":166874},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163869,"description":1142},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166920,"title":166921,"body":166922,"description":1142,"extension":1143,"meta":169094,"navigation":1145,"path":169095,"seo":169096,"stem":169097,"__hash__":169098},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166923,"toc":169069},[166924,166927,166931,166934,167014,167017,167038,167041,167045,167048,167110,167113,167130,167134,167137,167182,167184,167192,167196,167199,167281,167284,167287,167312,167315,167338,167342,167345,167347,167409,167412,167414,167465,167469,167473,167479,167584,167588,167594,167665,167669,167672,167740,167743,167823,167827,167833,167869,167872,167875,167985,167991,167995,167998,168070,168073,168077,168081,168086,168148,168152,168157,168225,168229,168234,168350,168354,168357,168437,168440,168444,168447,168551,168553,168568,168571,168575,168713,168721,168725,168727,168738,168740,168998,169002,169034,169038,169066],[10,166925,166921],{"id":166926},"_7-函数进阶",[14,166928,166930],{"id":166929},"_71-多返回值","7.1 多返回值",[19,166932,166933],{},"Python 函数可以返回多个值，本质上返回的是元组。",[29,166935,166937],{"className":31,"code":166936,"language":33,"meta":34,"style":34},"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",[36,166938,166939,166948,166956,166964,166973,166980,166984,166988,166997,167003],{"__ignoreMap":34},[39,166940,166941,166943,166946],{"class":41,"line":42},[39,166942,33002],{"class":49},[39,166944,166945],{"class":3021}," get_info",[39,166947,33008],{"class":45},[39,166949,166950,166952,166954],{"class":41,"line":74},[39,166951,153315],{"class":45},[39,166953,50],{"class":49},[39,166955,150298],{"class":1319},[39,166957,166958,166960,166962],{"class":41,"line":99},[39,166959,153331],{"class":45},[39,166961,50],{"class":49},[39,166963,147496],{"class":56},[39,166965,166966,166968,166970],{"class":41,"line":106},[39,166967,153346],{"class":45},[39,166969,50],{"class":49},[39,166971,166972],{"class":56}," 95\n",[39,166974,166975,166977],{"class":41,"line":112},[39,166976,5148],{"class":49},[39,166978,166979],{"class":45}," name, age, score\n",[39,166981,166982],{"class":41,"line":118},[39,166983,3458],{"emptyLinePlaceholder":1145},[39,166985,166986],{"class":41,"line":413},[39,166987,3458],{"emptyLinePlaceholder":1145},[39,166989,166990,166992,166994],{"class":41,"line":419},[39,166991,162251],{"class":45},[39,166993,50],{"class":49},[39,166995,166996],{"class":45}," get_info()\n",[39,166998,166999,167001],{"class":41,"line":425},[39,167000,31470],{"class":56},[39,167002,77639],{"class":45},[39,167004,167005,167007,167009,167011],{"class":41,"line":443},[39,167006,31470],{"class":56},[39,167008,1221],{"class":45},[39,167010,104052],{"class":56},[39,167012,167013],{"class":45},"(result))\n",[19,167015,167016],{},"可以直接解包：",[29,167018,167020],{"className":31,"code":167019,"language":33,"meta":34,"style":34},"name, age, score = get_info()\nprint(name, age, score)\n",[36,167021,167022,167031],{"__ignoreMap":34},[39,167023,167024,167027,167029],{"class":41,"line":42},[39,167025,167026],{"class":45},"name, age, score ",[39,167028,50],{"class":49},[39,167030,166996],{"class":45},[39,167032,167033,167035],{"class":41,"line":74},[39,167034,31470],{"class":56},[39,167036,167037],{"class":45},"(name, age, score)\n",[19,167039,167040],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167042,167044],{"id":167043},"_72-位置参数","7.2 位置参数",[19,167046,167047],{},"位置参数按顺序传递。",[29,167049,167051],{"className":31,"code":167050,"language":33,"meta":34,"style":34},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[36,167052,167053,167061,167089,167093,167097],{"__ignoreMap":34},[39,167054,167055,167057,167059],{"class":41,"line":42},[39,167056,33002],{"class":49},[39,167058,150317],{"class":3021},[39,167060,150320],{"class":45},[39,167062,167063,167065,167067,167069,167071,167073,167075,167077,167079,167081,167083,167085,167087],{"class":41,"line":74},[39,167064,32354],{"class":56},[39,167066,1221],{"class":45},[39,167068,1270],{"class":49},[39,167070,150331],{"class":1319},[39,167072,2094],{"class":56},[39,167074,80864],{"class":45},[39,167076,2144],{"class":56},[39,167078,150340],{"class":1319},[39,167080,2094],{"class":56},[39,167082,71275],{"class":45},[39,167084,2144],{"class":56},[39,167086,150349],{"class":1319},[39,167088,209],{"class":45},[39,167090,167091],{"class":41,"line":99},[39,167092,3458],{"emptyLinePlaceholder":1145},[39,167094,167095],{"class":41,"line":106},[39,167096,3458],{"emptyLinePlaceholder":1145},[39,167098,167099,167102,167104,167106,167108],{"class":41,"line":112},[39,167100,167101],{"class":45},"introduce(",[39,167103,150833],{"class":1319},[39,167105,13491],{"class":45},[39,167107,1849],{"class":56},[39,167109,209],{"class":45},[19,167111,167112],{},"顺序错了就会得到错误含义：",[29,167114,167116],{"className":31,"code":167115,"language":33,"meta":34,"style":34},"introduce(18, \"小明\")\n",[36,167117,167118],{"__ignoreMap":34},[39,167119,167120,167122,167124,167126,167128],{"class":41,"line":42},[39,167121,167101],{"class":45},[39,167123,1849],{"class":56},[39,167125,13491],{"class":45},[39,167127,150833],{"class":1319},[39,167129,209],{"class":45},[14,167131,167133],{"id":167132},"_73-关键字参数","7.3 关键字参数",[19,167135,167136],{},"关键字参数按参数名传递。",[29,167138,167140],{"className":31,"code":167139,"language":33,"meta":34,"style":34},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[36,167141,167142,167162],{"__ignoreMap":34},[39,167143,167144,167146,167148,167150,167152,167154,167156,167158,167160],{"class":41,"line":42},[39,167145,167101],{"class":45},[39,167147,80864],{"class":254},[39,167149,50],{"class":49},[39,167151,150833],{"class":1319},[39,167153,13491],{"class":45},[39,167155,71275],{"class":254},[39,167157,50],{"class":49},[39,167159,1849],{"class":56},[39,167161,209],{"class":45},[39,167163,167164,167166,167168,167170,167172,167174,167176,167178,167180],{"class":41,"line":74},[39,167165,167101],{"class":45},[39,167167,71275],{"class":254},[39,167169,50],{"class":49},[39,167171,1849],{"class":56},[39,167173,13491],{"class":45},[39,167175,80864],{"class":254},[39,167177,50],{"class":49},[39,167179,150833],{"class":1319},[39,167181,209],{"class":45},[19,167183,118879],{},[1171,167185,167186,167189],{},[1174,167187,167188],{},"顺序不容易错。",[1174,167190,167191],{},"调用时可读性更强。",[14,167193,167195],{"id":167194},"_74-默认参数","7.4 默认参数",[19,167197,167198],{},"默认参数给参数设置默认值。",[29,167200,167202],{"className":31,"code":167201,"language":33,"meta":34,"style":34},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[36,167203,167204,167220,167250,167254,167258,167268],{"__ignoreMap":34},[39,167205,167206,167208,167210,167213,167215,167218],{"class":41,"line":42},[39,167207,33002],{"class":49},[39,167209,123038],{"class":3021},[39,167211,167212],{"class":45},"(host, port",[39,167214,50],{"class":49},[39,167216,167217],{"class":56},"3306",[39,167219,31841],{"class":45},[39,167221,167222,167224,167226,167228,167231,167233,167235,167237,167239,167241,167244,167246,167248],{"class":41,"line":74},[39,167223,32354],{"class":56},[39,167225,1221],{"class":45},[39,167227,1270],{"class":49},[39,167229,167230],{"class":1319},"\"连接",[39,167232,2094],{"class":56},[39,167234,28452],{"class":45},[39,167236,2144],{"class":56},[39,167238,2057],{"class":1319},[39,167240,2094],{"class":56},[39,167242,167243],{"class":45},"port",[39,167245,2144],{"class":56},[39,167247,1462],{"class":1319},[39,167249,209],{"class":45},[39,167251,167252],{"class":41,"line":99},[39,167253,3458],{"emptyLinePlaceholder":1145},[39,167255,167256],{"class":41,"line":106},[39,167257,3458],{"emptyLinePlaceholder":1145},[39,167259,167260,167263,167266],{"class":41,"line":112},[39,167261,167262],{"class":45},"connect(",[39,167264,167265],{"class":1319},"\"localhost\"",[39,167267,209],{"class":45},[39,167269,167270,167272,167274,167276,167279],{"class":41,"line":118},[39,167271,167262],{"class":45},[39,167273,167265],{"class":1319},[39,167275,13491],{"class":45},[39,167277,167278],{"class":56},"6379",[39,167280,209],{"class":45},[19,167282,167283],{},"注意：默认参数必须放在非默认参数后面。",[19,167285,167286],{},"错误：",[29,167288,167290],{"className":31,"code":167289,"language":33,"meta":34,"style":34},"def connect(port=3306, host):\n    pass\n",[36,167291,167292,167308],{"__ignoreMap":34},[39,167293,167294,167296,167298,167301,167303,167305],{"class":41,"line":42},[39,167295,33002],{"class":49},[39,167297,123038],{"class":3021},[39,167299,167300],{"class":45},"(port",[39,167302,50],{"class":49},[39,167304,167217],{"class":56},[39,167306,167307],{"class":45},", host):\n",[39,167309,167310],{"class":41,"line":74},[39,167311,150482],{"class":49},[19,167313,167314],{},"正确：",[29,167316,167318],{"className":31,"code":167317,"language":33,"meta":34,"style":34},"def connect(host, port=3306):\n    pass\n",[36,167319,167320,167334],{"__ignoreMap":34},[39,167321,167322,167324,167326,167328,167330,167332],{"class":41,"line":42},[39,167323,33002],{"class":49},[39,167325,123038],{"class":3021},[39,167327,167212],{"class":45},[39,167329,50],{"class":49},[39,167331,167217],{"class":56},[39,167333,31841],{"class":45},[39,167335,167336],{"class":41,"line":74},[39,167337,150482],{"class":49},[14,167339,167341],{"id":167340},"_75-默认参数的坑","7.5 默认参数的坑",[19,167343,167344],{},"不要使用可变对象作为默认参数。",[19,167346,158568],{},[29,167348,167350],{"className":31,"code":167349,"language":33,"meta":34,"style":34},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[36,167351,167352,167367,167372,167379,167383,167387,167398],{"__ignoreMap":34},[39,167353,167354,167356,167359,167362,167364],{"class":41,"line":42},[39,167355,33002],{"class":49},[39,167357,167358],{"class":3021}," add_item",[39,167360,167361],{"class":45},"(item, items",[39,167363,50],{"class":49},[39,167365,167366],{"class":45},"[]):\n",[39,167368,167369],{"class":41,"line":74},[39,167370,167371],{"class":45},"    items.append(item)\n",[39,167373,167374,167376],{"class":41,"line":99},[39,167375,5148],{"class":49},[39,167377,167378],{"class":45}," items\n",[39,167380,167381],{"class":41,"line":106},[39,167382,3458],{"emptyLinePlaceholder":1145},[39,167384,167385],{"class":41,"line":112},[39,167386,3458],{"emptyLinePlaceholder":1145},[39,167388,167389,167391,167394,167396],{"class":41,"line":118},[39,167390,31470],{"class":56},[39,167392,167393],{"class":45},"(add_item(",[39,167395,166270],{"class":1319},[39,167397,31552],{"class":45},[39,167399,167400,167402,167404,167407],{"class":41,"line":413},[39,167401,31470],{"class":56},[39,167403,167393],{"class":45},[39,167405,167406],{"class":1319},"\"b\"",[39,167408,31552],{"class":45},[19,167410,167411],{},"第二次调用会复用第一次的列表。",[19,167413,156833],{},[29,167415,167417],{"className":31,"code":167416,"language":33,"meta":34,"style":34},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[36,167418,167419,167433,167446,167455,167459],{"__ignoreMap":34},[39,167420,167421,167423,167425,167427,167429,167431],{"class":41,"line":42},[39,167422,33002],{"class":49},[39,167424,167358],{"class":3021},[39,167426,167361],{"class":45},[39,167428,50],{"class":49},[39,167430,96735],{"class":56},[39,167432,31841],{"class":45},[39,167434,167435,167437,167440,167442,167444],{"class":41,"line":74},[39,167436,4159],{"class":49},[39,167438,167439],{"class":45}," items ",[39,167441,39982],{"class":49},[39,167443,39988],{"class":56},[39,167445,4797],{"class":45},[39,167447,167448,167451,167453],{"class":41,"line":99},[39,167449,167450],{"class":45},"        items ",[39,167452,50],{"class":49},[39,167454,52892],{"class":45},[39,167456,167457],{"class":41,"line":106},[39,167458,167371],{"class":45},[39,167460,167461,167463],{"class":41,"line":112},[39,167462,5148],{"class":49},[39,167464,167378],{"class":45},[14,167466,167468],{"id":167467},"_76-不定长参数","7.6 不定长参数",[1188,167470,167472],{"id":167471},"_761-args","7.6.1 *args",[19,167474,167475,167478],{},[36,167476,167477],{},"*args"," 接收任意数量的位置参数，得到元组。",[29,167480,167482],{"className":31,"code":167481,"language":33,"meta":34,"style":34},"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",[36,167483,167484,167497,167505,167516,167525,167531,167535,167539,167558],{"__ignoreMap":34},[39,167485,167486,167488,167490,167492,167494],{"class":41,"line":42},[39,167487,33002],{"class":49},[39,167489,6266],{"class":3021},[39,167491,1221],{"class":45},[39,167493,1657],{"class":49},[39,167495,167496],{"class":45},"args):\n",[39,167498,167499,167501,167503],{"class":41,"line":74},[39,167500,160252],{"class":45},[39,167502,50],{"class":49},[39,167504,48388],{"class":56},[39,167506,167507,167509,167511,167513],{"class":41,"line":99},[39,167508,4259],{"class":49},[39,167510,157125],{"class":45},[39,167512,27100],{"class":49},[39,167514,167515],{"class":45}," args:\n",[39,167517,167518,167520,167522],{"class":41,"line":106},[39,167519,160927],{"class":45},[39,167521,10533],{"class":49},[39,167523,167524],{"class":45}," num\n",[39,167526,167527,167529],{"class":41,"line":112},[39,167528,5148],{"class":49},[39,167530,163232],{"class":45},[39,167532,167533],{"class":41,"line":118},[39,167534,3458],{"emptyLinePlaceholder":1145},[39,167536,167537],{"class":41,"line":413},[39,167538,3458],{"emptyLinePlaceholder":1145},[39,167540,167541,167543,167546,167548,167550,167552,167554,167556],{"class":41,"line":419},[39,167542,31470],{"class":56},[39,167544,167545],{"class":45},"(add(",[39,167547,57],{"class":56},[39,167549,13491],{"class":45},[39,167551,63],{"class":56},[39,167553,13491],{"class":45},[39,167555,68],{"class":56},[39,167557,31552],{"class":45},[39,167559,167560,167562,167564,167566,167568,167570,167572,167574,167576,167578,167580,167582],{"class":41,"line":425},[39,167561,31470],{"class":56},[39,167563,167545],{"class":45},[39,167565,57],{"class":56},[39,167567,13491],{"class":45},[39,167569,63],{"class":56},[39,167571,13491],{"class":45},[39,167573,68],{"class":56},[39,167575,13491],{"class":45},[39,167577,84],{"class":56},[39,167579,13491],{"class":45},[39,167581,89],{"class":56},[39,167583,31552],{"class":45},[1188,167585,167587],{"id":167586},"_762-kwargs","7.6.2 **kwargs",[19,167589,167590,167593],{},[36,167591,167592],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[29,167595,167597],{"className":31,"code":167596,"language":33,"meta":34,"style":34},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[36,167598,167599,167612,167623,167629,167633,167637],{"__ignoreMap":34},[39,167600,167601,167603,167605,167607,167609],{"class":41,"line":42},[39,167602,33002],{"class":49},[39,167604,162890],{"class":3021},[39,167606,1221],{"class":45},[39,167608,11717],{"class":49},[39,167610,167611],{"class":45},"kwargs):\n",[39,167613,167614,167616,167618,167620],{"class":41,"line":74},[39,167615,4259],{"class":49},[39,167617,165730],{"class":45},[39,167619,27100],{"class":49},[39,167621,167622],{"class":45}," kwargs.items():\n",[39,167624,167625,167627],{"class":41,"line":99},[39,167626,33506],{"class":56},[39,167628,165742],{"class":45},[39,167630,167631],{"class":41,"line":106},[39,167632,3458],{"emptyLinePlaceholder":1145},[39,167634,167635],{"class":41,"line":112},[39,167636,3458],{"emptyLinePlaceholder":1145},[39,167638,167639,167641,167643,167645,167647,167649,167651,167653,167655,167657,167659,167661,167663],{"class":41,"line":118},[39,167640,162955],{"class":45},[39,167642,80864],{"class":254},[39,167644,50],{"class":49},[39,167646,150833],{"class":1319},[39,167648,13491],{"class":45},[39,167650,71275],{"class":254},[39,167652,50],{"class":49},[39,167654,1849],{"class":56},[39,167656,13491],{"class":45},[39,167658,71326],{"class":254},[39,167660,50],{"class":49},[39,167662,70323],{"class":1319},[39,167664,209],{"class":45},[14,167666,167668],{"id":167667},"_77-参数解包","7.7 参数解包",[19,167670,167671],{},"列表或元组解包为位置参数：",[29,167673,167675],{"className":31,"code":167674,"language":33,"meta":34,"style":34},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[36,167676,167677,167686,167701,167705,167709,167729],{"__ignoreMap":34},[39,167678,167679,167681,167683],{"class":41,"line":42},[39,167680,33002],{"class":49},[39,167682,6266],{"class":3021},[39,167684,167685],{"class":45},"(a, b, c):\n",[39,167687,167688,167690,167692,167694,167696,167698],{"class":41,"line":74},[39,167689,5148],{"class":49},[39,167691,11925],{"class":45},[39,167693,1682],{"class":49},[39,167695,11938],{"class":45},[39,167697,1682],{"class":49},[39,167699,167700],{"class":45}," c\n",[39,167702,167703],{"class":41,"line":99},[39,167704,3458],{"emptyLinePlaceholder":1145},[39,167706,167707],{"class":41,"line":106},[39,167708,3458],{"emptyLinePlaceholder":1145},[39,167710,167711,167713,167715,167717,167719,167721,167723,167725,167727],{"class":41,"line":112},[39,167712,165045],{"class":45},[39,167714,50],{"class":49},[39,167716,53280],{"class":45},[39,167718,57],{"class":56},[39,167720,13491],{"class":45},[39,167722,63],{"class":56},[39,167724,13491],{"class":45},[39,167726,68],{"class":56},[39,167728,34301],{"class":45},[39,167730,167731,167733,167735,167737],{"class":41,"line":118},[39,167732,31470],{"class":56},[39,167734,167545],{"class":45},[39,167736,1657],{"class":49},[39,167738,167739],{"class":45},"nums))\n",[19,167741,167742],{},"字典解包为关键字参数：",[29,167744,167746],{"className":31,"code":167745,"language":33,"meta":34,"style":34},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[36,167747,167748,167756,167782,167786,167790,167814],{"__ignoreMap":34},[39,167749,167750,167752,167754],{"class":41,"line":42},[39,167751,33002],{"class":49},[39,167753,150317],{"class":3021},[39,167755,150320],{"class":45},[39,167757,167758,167760,167762,167764,167766,167768,167770,167772,167774,167776,167778,167780],{"class":41,"line":74},[39,167759,32354],{"class":56},[39,167761,1221],{"class":45},[39,167763,1270],{"class":49},[39,167765,1462],{"class":1319},[39,167767,2094],{"class":56},[39,167769,80864],{"class":45},[39,167771,2144],{"class":56},[39,167773,5506],{"class":56},[39,167775,71275],{"class":45},[39,167777,2144],{"class":56},[39,167779,1462],{"class":1319},[39,167781,209],{"class":45},[39,167783,167784],{"class":41,"line":99},[39,167785,3458],{"emptyLinePlaceholder":1145},[39,167787,167788],{"class":41,"line":106},[39,167789,3458],{"emptyLinePlaceholder":1145},[39,167791,167792,167794,167796,167798,167800,167802,167804,167806,167808,167810,167812],{"class":41,"line":112},[39,167793,117259],{"class":45},[39,167795,50],{"class":49},[39,167797,5506],{"class":45},[39,167799,63733],{"class":1319},[39,167801,52491],{"class":45},[39,167803,150833],{"class":1319},[39,167805,13491],{"class":45},[39,167807,70178],{"class":1319},[39,167809,52491],{"class":45},[39,167811,1849],{"class":56},[39,167813,2630],{"class":45},[39,167815,167816,167818,167820],{"class":41,"line":118},[39,167817,167101],{"class":45},[39,167819,11717],{"class":49},[39,167821,167822],{"class":45},"info)\n",[14,167824,167826],{"id":167825},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167828,167829,167832],{},[36,167830,167831],{},"lambda"," 用于定义简单匿名函数。",[29,167834,167836],{"className":31,"code":167835,"language":33,"meta":34,"style":34},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[36,167837,167838,167855],{"__ignoreMap":34},[39,167839,167840,167843,167845,167848,167851,167853],{"class":41,"line":42},[39,167841,167842],{"class":45},"add ",[39,167844,50],{"class":49},[39,167846,167847],{"class":49}," lambda",[39,167849,167850],{"class":45}," a, b: a ",[39,167852,1682],{"class":49},[39,167854,152049],{"class":45},[39,167856,167857,167859,167861,167863,167865,167867],{"class":41,"line":74},[39,167858,31470],{"class":56},[39,167860,167545],{"class":45},[39,167862,57],{"class":56},[39,167864,13491],{"class":45},[39,167866,63],{"class":56},[39,167868,31552],{"class":45},[19,167870,167871],{},"常和排序、过滤等函数一起使用。",[19,167873,167874],{},"按分数排序：",[29,167876,167878],{"className":31,"code":167877,"language":33,"meta":34,"style":34},"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",[36,167879,167880,167888,167908,167928,167948,167952,167956,167979],{"__ignoreMap":34},[39,167881,167882,167884,167886],{"class":41,"line":42},[39,167883,160661],{"class":45},[39,167885,50],{"class":49},[39,167887,56501],{"class":45},[39,167889,167890,167892,167894,167896,167898,167900,167902,167904,167906],{"class":41,"line":74},[39,167891,149330],{"class":45},[39,167893,63733],{"class":1319},[39,167895,52491],{"class":45},[39,167897,150833],{"class":1319},[39,167899,13491],{"class":45},[39,167901,152417],{"class":1319},[39,167903,52491],{"class":45},[39,167905,2187],{"class":56},[39,167907,5987],{"class":45},[39,167909,167910,167912,167914,167916,167918,167920,167922,167924,167926],{"class":41,"line":99},[39,167911,149330],{"class":45},[39,167913,63733],{"class":1319},[39,167915,52491],{"class":45},[39,167917,151881],{"class":1319},[39,167919,13491],{"class":45},[39,167921,152417],{"class":1319},[39,167923,52491],{"class":45},[39,167925,2009],{"class":56},[39,167927,5987],{"class":45},[39,167929,167930,167932,167934,167936,167938,167940,167942,167944,167946],{"class":41,"line":106},[39,167931,149330],{"class":45},[39,167933,63733],{"class":1319},[39,167935,52491],{"class":45},[39,167937,160676],{"class":1319},[39,167939,13491],{"class":45},[39,167941,152417],{"class":1319},[39,167943,52491],{"class":45},[39,167945,1609],{"class":56},[39,167947,5987],{"class":45},[39,167949,167950],{"class":41,"line":112},[39,167951,34301],{"class":45},[39,167953,167954],{"class":41,"line":118},[39,167955,3458],{"emptyLinePlaceholder":1145},[39,167957,167958,167961,167963,167965,167967,167969,167971,167973,167975,167977],{"class":41,"line":413},[39,167959,167960],{"class":45},"students.sort(",[39,167962,154891],{"class":254},[39,167964,154894],{"class":49},[39,167966,154897],{"class":45},[39,167968,152417],{"class":1319},[39,167970,113147],{"class":45},[39,167972,164473],{"class":254},[39,167974,50],{"class":49},[39,167976,32531],{"class":56},[39,167978,209],{"class":45},[39,167980,167981,167983],{"class":41,"line":419},[39,167982,31470],{"class":56},[39,167984,165940],{"class":45},[19,167986,167987,167988,167990],{},"如果逻辑复杂，不要硬写 ",[36,167989,167831],{},"，定义普通函数更清晰。",[14,167992,167994],{"id":167993},"_79-函数作为参数","7.9 函数作为参数",[19,167996,167997],{},"函数可以作为参数传给另一个函数。",[29,167999,168001],{"className":31,"code":168000,"language":33,"meta":34,"style":34},"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",[36,168002,168003,168011,168021,168025,168029,168039,168046,168050,168054],{"__ignoreMap":34},[39,168004,168005,168007,168009],{"class":41,"line":42},[39,168006,33002],{"class":49},[39,168008,6266],{"class":3021},[39,168010,152038],{"class":45},[39,168012,168013,168015,168017,168019],{"class":41,"line":74},[39,168014,5148],{"class":49},[39,168016,11925],{"class":45},[39,168018,1682],{"class":49},[39,168020,152049],{"class":45},[39,168022,168023],{"class":41,"line":99},[39,168024,3458],{"emptyLinePlaceholder":1145},[39,168026,168027],{"class":41,"line":106},[39,168028,3458],{"emptyLinePlaceholder":1145},[39,168030,168031,168033,168036],{"class":41,"line":112},[39,168032,33002],{"class":49},[39,168034,168035],{"class":3021}," calculate",[39,168037,168038],{"class":45},"(a, b, func):\n",[39,168040,168041,168043],{"class":41,"line":118},[39,168042,5148],{"class":49},[39,168044,168045],{"class":45}," func(a, b)\n",[39,168047,168048],{"class":41,"line":413},[39,168049,3458],{"emptyLinePlaceholder":1145},[39,168051,168052],{"class":41,"line":419},[39,168053,3458],{"emptyLinePlaceholder":1145},[39,168055,168056,168058,168061,168063,168065,168067],{"class":41,"line":425},[39,168057,31470],{"class":56},[39,168059,168060],{"class":45},"(calculate(",[39,168062,146],{"class":56},[39,168064,13491],{"class":45},[39,168066,1898],{"class":56},[39,168068,168069],{"class":45},", add))\n",[19,168071,168072],{},"这种思想在排序、回调、框架中经常出现。",[14,168074,168076],{"id":168075},"_710-mapfiltersorted","7.10 map、filter、sorted",[1188,168078,168080],{"id":168079},"_7101-map","7.10.1 map",[19,168082,168083,168085],{},[36,168084,75098],{}," 对每个元素执行函数。",[29,168087,168089],{"className":31,"code":168088,"language":33,"meta":34,"style":34},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[36,168090,168091,168115,168138],{"__ignoreMap":34},[39,168092,168093,168095,168097,168099,168101,168103,168105,168107,168109,168111,168113],{"class":41,"line":42},[39,168094,165045],{"class":45},[39,168096,50],{"class":49},[39,168098,53280],{"class":45},[39,168100,57],{"class":56},[39,168102,13491],{"class":45},[39,168104,63],{"class":56},[39,168106,13491],{"class":45},[39,168108,68],{"class":56},[39,168110,13491],{"class":45},[39,168112,84],{"class":56},[39,168114,34301],{"class":45},[39,168116,168117,168119,168121,168124,168126,168128,168131,168133,168135],{"class":41,"line":74},[39,168118,162251],{"class":45},[39,168120,50],{"class":49},[39,168122,168123],{"class":56}," map",[39,168125,1221],{"class":45},[39,168127,167831],{"class":49},[39,168129,168130],{"class":45}," x: x ",[39,168132,1657],{"class":49},[39,168134,15811],{"class":56},[39,168136,168137],{"class":45},", nums)\n",[39,168139,168140,168142,168144,168146],{"class":41,"line":99},[39,168141,31470],{"class":56},[39,168143,1221],{"class":45},[39,168145,155015],{"class":56},[39,168147,167013],{"class":45},[1188,168149,168151],{"id":168150},"_7102-filter","7.10.2 filter",[19,168153,168154,168156],{},[36,168155,81105],{}," 保留满足条件的元素。",[29,168158,168160],{"className":31,"code":168159,"language":33,"meta":34,"style":34},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[36,168161,168162,168190,168215],{"__ignoreMap":34},[39,168163,168164,168166,168168,168170,168172,168174,168176,168178,168180,168182,168184,168186,168188],{"class":41,"line":42},[39,168165,165045],{"class":45},[39,168167,50],{"class":49},[39,168169,53280],{"class":45},[39,168171,57],{"class":56},[39,168173,13491],{"class":45},[39,168175,63],{"class":56},[39,168177,13491],{"class":45},[39,168179,68],{"class":56},[39,168181,13491],{"class":45},[39,168183,84],{"class":56},[39,168185,13491],{"class":45},[39,168187,89],{"class":56},[39,168189,34301],{"class":45},[39,168191,168192,168194,168196,168199,168201,168203,168205,168207,168209,168211,168213],{"class":41,"line":74},[39,168193,162251],{"class":45},[39,168195,50],{"class":49},[39,168197,168198],{"class":56}," filter",[39,168200,1221],{"class":45},[39,168202,167831],{"class":49},[39,168204,168130],{"class":45},[39,168206,1534],{"class":49},[39,168208,15811],{"class":56},[39,168210,102504],{"class":49},[39,168212,5151],{"class":56},[39,168214,168137],{"class":45},[39,168216,168217,168219,168221,168223],{"class":41,"line":99},[39,168218,31470],{"class":56},[39,168220,1221],{"class":45},[39,168222,155015],{"class":56},[39,168224,167013],{"class":45},[1188,168226,168228],{"id":168227},"_7103-sorted","7.10.3 sorted",[19,168230,168231,168233],{},[36,168232,166181],{}," 返回排序后的新列表。",[29,168235,168237],{"className":31,"code":168236,"language":33,"meta":34,"style":34},"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",[36,168238,168239,168247,168267,168287,168307,168311,168315,168344],{"__ignoreMap":34},[39,168240,168241,168243,168245],{"class":41,"line":42},[39,168242,160661],{"class":45},[39,168244,50],{"class":49},[39,168246,56501],{"class":45},[39,168248,168249,168251,168253,168255,168257,168259,168261,168263,168265],{"class":41,"line":74},[39,168250,149330],{"class":45},[39,168252,63733],{"class":1319},[39,168254,52491],{"class":45},[39,168256,150833],{"class":1319},[39,168258,13491],{"class":45},[39,168260,152417],{"class":1319},[39,168262,52491],{"class":45},[39,168264,2187],{"class":56},[39,168266,5987],{"class":45},[39,168268,168269,168271,168273,168275,168277,168279,168281,168283,168285],{"class":41,"line":99},[39,168270,149330],{"class":45},[39,168272,63733],{"class":1319},[39,168274,52491],{"class":45},[39,168276,151881],{"class":1319},[39,168278,13491],{"class":45},[39,168280,152417],{"class":1319},[39,168282,52491],{"class":45},[39,168284,2009],{"class":56},[39,168286,5987],{"class":45},[39,168288,168289,168291,168293,168295,168297,168299,168301,168303,168305],{"class":41,"line":106},[39,168290,149330],{"class":45},[39,168292,63733],{"class":1319},[39,168294,52491],{"class":45},[39,168296,160676],{"class":1319},[39,168298,13491],{"class":45},[39,168300,152417],{"class":1319},[39,168302,52491],{"class":45},[39,168304,1609],{"class":56},[39,168306,5987],{"class":45},[39,168308,168309],{"class":41,"line":112},[39,168310,34301],{"class":45},[39,168312,168313],{"class":41,"line":118},[39,168314,3458],{"emptyLinePlaceholder":1145},[39,168316,168317,168319,168321,168323,168326,168328,168330,168332,168334,168336,168338,168340,168342],{"class":41,"line":413},[39,168318,162251],{"class":45},[39,168320,50],{"class":49},[39,168322,164549],{"class":56},[39,168324,168325],{"class":45},"(students, ",[39,168327,154891],{"class":254},[39,168329,154894],{"class":49},[39,168331,154897],{"class":45},[39,168333,152417],{"class":1319},[39,168335,113147],{"class":45},[39,168337,164473],{"class":254},[39,168339,50],{"class":49},[39,168341,32531],{"class":56},[39,168343,209],{"class":45},[39,168345,168346,168348],{"class":41,"line":419},[39,168347,31470],{"class":56},[39,168349,77639],{"class":45},[14,168351,168353],{"id":168352},"_711-闭包入门","7.11 闭包入门",[19,168355,168356],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[29,168358,168360],{"className":31,"code":168359,"language":33,"meta":34,"style":34},"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",[36,168361,168362,168372,168382,168393,168397,168404,168408,168412,168426],{"__ignoreMap":34},[39,168363,168364,168366,168369],{"class":41,"line":42},[39,168365,33002],{"class":49},[39,168367,168368],{"class":3021}," outer",[39,168370,168371],{"class":45},"(base):\n",[39,168373,168374,168376,168379],{"class":41,"line":74},[39,168375,31856],{"class":49},[39,168377,168378],{"class":3021}," inner",[39,168380,168381],{"class":45},"(num):\n",[39,168383,168384,168386,168389,168391],{"class":41,"line":99},[39,168385,15808],{"class":49},[39,168387,168388],{"class":45}," base ",[39,168390,1682],{"class":49},[39,168392,167524],{"class":45},[39,168394,168395],{"class":41,"line":106},[39,168396,3458],{"emptyLinePlaceholder":1145},[39,168398,168399,168401],{"class":41,"line":112},[39,168400,5148],{"class":49},[39,168402,168403],{"class":45}," inner\n",[39,168405,168406],{"class":41,"line":118},[39,168407,3458],{"emptyLinePlaceholder":1145},[39,168409,168410],{"class":41,"line":413},[39,168411,3458],{"emptyLinePlaceholder":1145},[39,168413,168414,168417,168419,168422,168424],{"class":41,"line":419},[39,168415,168416],{"class":45},"add_10 ",[39,168418,50],{"class":49},[39,168420,168421],{"class":45}," outer(",[39,168423,146],{"class":56},[39,168425,209],{"class":45},[39,168427,168428,168430,168433,168435],{"class":41,"line":425},[39,168429,31470],{"class":56},[39,168431,168432],{"class":45},"(add_10(",[39,168434,89],{"class":56},[39,168436,31552],{"class":45},[19,168438,168439],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168441,168443],{"id":168442},"_712-装饰器入门","7.12 装饰器入门",[19,168445,168446],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[29,168448,168450],{"className":31,"code":168449,"language":33,"meta":34,"style":34},"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",[36,168451,168452,168461,168470,168481,168486,168497,168501,168508,168512,168516,168521,168529,168539,168543,168547],{"__ignoreMap":34},[39,168453,168454,168456,168458],{"class":41,"line":42},[39,168455,33002],{"class":49},[39,168457,88245],{"class":3021},[39,168459,168460],{"class":45},"(func):\n",[39,168462,168463,168465,168468],{"class":41,"line":74},[39,168464,31856],{"class":49},[39,168466,168467],{"class":3021}," wrapper",[39,168469,33008],{"class":45},[39,168471,168472,168474,168476,168479],{"class":41,"line":99},[39,168473,33506],{"class":56},[39,168475,1221],{"class":45},[39,168477,168478],{"class":1319},"\"函数开始执行\"",[39,168480,209],{"class":45},[39,168482,168483],{"class":41,"line":106},[39,168484,168485],{"class":45},"        func()\n",[39,168487,168488,168490,168492,168495],{"class":41,"line":112},[39,168489,33506],{"class":56},[39,168491,1221],{"class":45},[39,168493,168494],{"class":1319},"\"函数执行结束\"",[39,168496,209],{"class":45},[39,168498,168499],{"class":41,"line":118},[39,168500,3458],{"emptyLinePlaceholder":1145},[39,168502,168503,168505],{"class":41,"line":413},[39,168504,5148],{"class":49},[39,168506,168507],{"class":45}," wrapper\n",[39,168509,168510],{"class":41,"line":419},[39,168511,3458],{"emptyLinePlaceholder":1145},[39,168513,168514],{"class":41,"line":425},[39,168515,3458],{"emptyLinePlaceholder":1145},[39,168517,168518],{"class":41,"line":443},[39,168519,168520],{"class":3021},"@log\n",[39,168522,168523,168525,168527],{"class":41,"line":449},[39,168524,33002],{"class":49},[39,168526,161941],{"class":3021},[39,168528,33008],{"class":45},[39,168530,168531,168533,168535,168537],{"class":41,"line":455},[39,168532,32354],{"class":56},[39,168534,1221],{"class":45},[39,168536,6900],{"class":1319},[39,168538,209],{"class":45},[39,168540,168541],{"class":41,"line":461},[39,168542,3458],{"emptyLinePlaceholder":1145},[39,168544,168545],{"class":41,"line":475},[39,168546,3458],{"emptyLinePlaceholder":1145},[39,168548,168549],{"class":41,"line":665},[39,168550,161976],{"class":45},[19,168552,159219],{},[29,168554,168556],{"className":31,"code":168555,"language":33,"meta":34,"style":34},"say_hello = log(say_hello)\n",[36,168557,168558],{"__ignoreMap":34},[39,168559,168560,168563,168565],{"class":41,"line":42},[39,168561,168562],{"class":45},"say_hello ",[39,168564,50],{"class":49},[39,168566,168567],{"class":45}," log(say_hello)\n",[19,168569,168570],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168572,168574],{"id":168573},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[29,168576,168578],{"className":31,"code":168577,"language":33,"meta":34,"style":34},"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",[36,168579,168580,168588,168605,168615,168634,168644,168651,168655,168661,168665,168669,168673,168681,168691,168695,168699],{"__ignoreMap":34},[39,168581,168582,168584,168586],{"class":41,"line":42},[39,168583,33002],{"class":49},[39,168585,88245],{"class":3021},[39,168587,168460],{"class":45},[39,168589,168590,168592,168594,168596,168598,168601,168603],{"class":41,"line":74},[39,168591,31856],{"class":49},[39,168593,168467],{"class":3021},[39,168595,1221],{"class":45},[39,168597,1657],{"class":49},[39,168599,168600],{"class":45},"args, ",[39,168602,11717],{"class":49},[39,168604,167611],{"class":45},[39,168606,168607,168609,168611,168613],{"class":41,"line":99},[39,168608,33506],{"class":56},[39,168610,1221],{"class":45},[39,168612,168478],{"class":1319},[39,168614,209],{"class":45},[39,168616,168617,168620,168622,168625,168627,168629,168631],{"class":41,"line":106},[39,168618,168619],{"class":45},"        result ",[39,168621,50],{"class":49},[39,168623,168624],{"class":45}," func(",[39,168626,1657],{"class":49},[39,168628,168600],{"class":45},[39,168630,11717],{"class":49},[39,168632,168633],{"class":45},"kwargs)\n",[39,168635,168636,168638,168640,168642],{"class":41,"line":112},[39,168637,33506],{"class":56},[39,168639,1221],{"class":45},[39,168641,168494],{"class":1319},[39,168643,209],{"class":45},[39,168645,168646,168648],{"class":41,"line":118},[39,168647,15808],{"class":49},[39,168649,168650],{"class":45}," result\n",[39,168652,168653],{"class":41,"line":413},[39,168654,3458],{"emptyLinePlaceholder":1145},[39,168656,168657,168659],{"class":41,"line":419},[39,168658,5148],{"class":49},[39,168660,168507],{"class":45},[39,168662,168663],{"class":41,"line":425},[39,168664,3458],{"emptyLinePlaceholder":1145},[39,168666,168667],{"class":41,"line":443},[39,168668,3458],{"emptyLinePlaceholder":1145},[39,168670,168671],{"class":41,"line":449},[39,168672,168520],{"class":3021},[39,168674,168675,168677,168679],{"class":41,"line":455},[39,168676,33002],{"class":49},[39,168678,6266],{"class":3021},[39,168680,152038],{"class":45},[39,168682,168683,168685,168687,168689],{"class":41,"line":461},[39,168684,5148],{"class":49},[39,168686,11925],{"class":45},[39,168688,1682],{"class":49},[39,168690,152049],{"class":45},[39,168692,168693],{"class":41,"line":475},[39,168694,3458],{"emptyLinePlaceholder":1145},[39,168696,168697],{"class":41,"line":665},[39,168698,3458],{"emptyLinePlaceholder":1145},[39,168700,168701,168703,168705,168707,168709,168711],{"class":41,"line":671},[39,168702,31470],{"class":56},[39,168704,167545],{"class":45},[39,168706,146],{"class":56},[39,168708,13491],{"class":45},[39,168710,1898],{"class":56},[39,168712,31552],{"class":45},[19,168714,168715,168716,101963,168718,168720],{},"这个写法使用 ",[36,168717,167477],{},[36,168719,167592],{}," 接收原函数的所有参数。",[14,168722,168724],{"id":168723},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,168726,124237],{},[1171,168728,168729,168732,168735],{},[1174,168730,168731],{},"给定一组学生数据。",[1174,168733,168734],{},"封装函数，根据传入规则筛选学生。",[1174,168736,168737],{},"筛选及格、优秀、未成年学生。",[19,168739,11091],{},[29,168741,168743],{"className":31,"code":168742,"language":33,"meta":34,"style":34},"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",[36,168744,168745,168753,168781,168809,168837,168841,168845,168849,168859,168867,168877,168884,168889,168895,168899,168903,168927,168950,168973,168977,168984,168991],{"__ignoreMap":34},[39,168746,168747,168749,168751],{"class":41,"line":42},[39,168748,160661],{"class":45},[39,168750,50],{"class":49},[39,168752,56501],{"class":45},[39,168754,168755,168757,168759,168761,168763,168765,168767,168769,168771,168773,168775,168777,168779],{"class":41,"line":74},[39,168756,149330],{"class":45},[39,168758,63733],{"class":1319},[39,168760,52491],{"class":45},[39,168762,150833],{"class":1319},[39,168764,13491],{"class":45},[39,168766,70178],{"class":1319},[39,168768,52491],{"class":45},[39,168770,1849],{"class":56},[39,168772,13491],{"class":45},[39,168774,152417],{"class":1319},[39,168776,52491],{"class":45},[39,168778,2187],{"class":56},[39,168780,5987],{"class":45},[39,168782,168783,168785,168787,168789,168791,168793,168795,168797,168799,168801,168803,168805,168807],{"class":41,"line":99},[39,168784,149330],{"class":45},[39,168786,63733],{"class":1319},[39,168788,52491],{"class":45},[39,168790,151881],{"class":1319},[39,168792,13491],{"class":45},[39,168794,70178],{"class":1319},[39,168796,52491],{"class":45},[39,168798,1825],{"class":56},[39,168800,13491],{"class":45},[39,168802,152417],{"class":1319},[39,168804,52491],{"class":45},[39,168806,2009],{"class":56},[39,168808,5987],{"class":45},[39,168810,168811,168813,168815,168817,168819,168821,168823,168825,168827,168829,168831,168833,168835],{"class":41,"line":106},[39,168812,149330],{"class":45},[39,168814,63733],{"class":1319},[39,168816,52491],{"class":45},[39,168818,160676],{"class":1319},[39,168820,13491],{"class":45},[39,168822,70178],{"class":1319},[39,168824,52491],{"class":45},[39,168826,1874],{"class":56},[39,168828,13491],{"class":45},[39,168830,152417],{"class":1319},[39,168832,52491],{"class":45},[39,168834,2080],{"class":56},[39,168836,5987],{"class":45},[39,168838,168839],{"class":41,"line":112},[39,168840,34301],{"class":45},[39,168842,168843],{"class":41,"line":118},[39,168844,3458],{"emptyLinePlaceholder":1145},[39,168846,168847],{"class":41,"line":413},[39,168848,3458],{"emptyLinePlaceholder":1145},[39,168850,168851,168853,168856],{"class":41,"line":419},[39,168852,33002],{"class":49},[39,168854,168855],{"class":3021}," filter_students",[39,168857,168858],{"class":45},"(students, condition):\n",[39,168860,168861,168863,168865],{"class":41,"line":425},[39,168862,162168],{"class":45},[39,168864,50],{"class":49},[39,168866,52892],{"class":45},[39,168868,168869,168871,168873,168875],{"class":41,"line":443},[39,168870,4259],{"class":49},[39,168872,153082],{"class":45},[39,168874,27100],{"class":49},[39,168876,153087],{"class":45},[39,168878,168879,168881],{"class":41,"line":449},[39,168880,3555],{"class":49},[39,168882,168883],{"class":45}," condition(student):\n",[39,168885,168886],{"class":41,"line":455},[39,168887,168888],{"class":45},"            result.append(student)\n",[39,168890,168891,168893],{"class":41,"line":461},[39,168892,5148],{"class":49},[39,168894,168650],{"class":45},[39,168896,168897],{"class":41,"line":475},[39,168898,3458],{"emptyLinePlaceholder":1145},[39,168900,168901],{"class":41,"line":665},[39,168902,3458],{"emptyLinePlaceholder":1145},[39,168904,168905,168907,168909,168912,168914,168917,168919,168921,168923,168925],{"class":41,"line":671},[39,168906,166646],{"class":45},[39,168908,50],{"class":49},[39,168910,168911],{"class":45}," filter_students(students, ",[39,168913,167831],{"class":49},[39,168915,168916],{"class":45}," s: s[",[39,168918,152417],{"class":1319},[39,168920,5501],{"class":45},[39,168922,2768],{"class":49},[39,168924,158782],{"class":56},[39,168926,209],{"class":45},[39,168928,168929,168932,168934,168936,168938,168940,168942,168944,168946,168948],{"class":41,"line":684},[39,168930,168931],{"class":45},"excellent ",[39,168933,50],{"class":49},[39,168935,168911],{"class":45},[39,168937,167831],{"class":49},[39,168939,168916],{"class":45},[39,168941,152417],{"class":1319},[39,168943,5501],{"class":45},[39,168945,2768],{"class":49},[39,168947,158733],{"class":56},[39,168949,209],{"class":45},[39,168951,168952,168955,168957,168959,168961,168963,168965,168967,168969,168971],{"class":41,"line":2732},[39,168953,168954],{"class":45},"under_age ",[39,168956,50],{"class":49},[39,168958,168911],{"class":45},[39,168960,167831],{"class":49},[39,168962,168916],{"class":45},[39,168964,70178],{"class":1319},[39,168966,5501],{"class":45},[39,168968,2108],{"class":49},[39,168970,157230],{"class":56},[39,168972,209],{"class":45},[39,168974,168975],{"class":41,"line":2737},[39,168976,3458],{"emptyLinePlaceholder":1145},[39,168978,168979,168981],{"class":41,"line":2751},[39,168980,31470],{"class":56},[39,168982,168983],{"class":45},"(passed)\n",[39,168985,168986,168988],{"class":41,"line":2756},[39,168987,31470],{"class":56},[39,168989,168990],{"class":45},"(excellent)\n",[39,168992,168993,168995],{"class":41,"line":2785},[39,168994,31470],{"class":56},[39,168996,168997],{"class":45},"(under_age)\n",[14,168999,169001],{"id":169000},"_715-易错点","7.15 易错点",[1171,169003,169004,169007,169015,169020,169031],{},[1174,169005,169006],{},"默认参数不要写可变对象。",[1174,169008,169009,169011,169012,169014],{},[36,169010,167477],{}," 是元组，",[36,169013,167592],{}," 是字典。",[1174,169016,169017,169019],{},[36,169018,167831],{}," 只适合简单表达式。",[1174,169021,169022,101963,169024,169026,169027,169030],{},[36,169023,75098],{},[36,169025,81105],{}," 的结果是迭代器，常用 ",[36,169028,169029],{},"list()"," 转换查看。",[1174,169032,169033],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169035,169037],{"id":169036},"_716-本章练习","7.16 本章练习",[1171,169039,169040,169047,169053,169058,169063],{},[1174,169041,169042,169043,169046],{},"写函数 ",[36,169044,169045],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[1174,169048,169042,169049,169052],{},[36,169050,169051],{},"print_user(**kwargs)","，输出用户所有字段。",[1174,169054,105311,169055,169057],{},[36,169056,167831],{}," 对学生列表按年龄排序。",[1174,169059,105311,169060,169062],{},[36,169061,81105],{}," 找出成绩不及格的学生。",[1174,169064,169065],{},"写一个装饰器，统计函数执行前后的提示信息。",[1133,169067,169068],{},"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":34,"searchDepth":74,"depth":74,"links":169070},[169071,169072,169073,169074,169075,169076,169080,169081,169082,169083,169088,169089,169090,169091,169092,169093],{"id":166929,"depth":74,"text":166930},{"id":167043,"depth":74,"text":167044},{"id":167132,"depth":74,"text":167133},{"id":167194,"depth":74,"text":167195},{"id":167340,"depth":74,"text":167341},{"id":167467,"depth":74,"text":167468,"children":169077},[169078,169079],{"id":167471,"depth":99,"text":167472},{"id":167586,"depth":99,"text":167587},{"id":167667,"depth":74,"text":167668},{"id":167825,"depth":74,"text":167826},{"id":167993,"depth":74,"text":167994},{"id":168075,"depth":74,"text":168076,"children":169084},[169085,169086,169087],{"id":168079,"depth":99,"text":168080},{"id":168150,"depth":99,"text":168151},{"id":168227,"depth":99,"text":168228},{"id":168352,"depth":74,"text":168353},{"id":168442,"depth":74,"text":168443},{"id":168573,"depth":74,"text":168574},{"id":168723,"depth":74,"text":168724},{"id":169000,"depth":74,"text":169001},{"id":169036,"depth":74,"text":169037},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166921,"description":1142},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169100,"title":169101,"body":169102,"description":1142,"extension":1143,"meta":171621,"navigation":1145,"path":171622,"seo":171623,"stem":171624,"__hash__":171625},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169103,"toc":171596},[169104,169107,169111,169114,169117,169148,169152,169156,169159,169186,169190,169193,169244,169247,169262,169265,169300,169304,169306,169330,169333,169393,169397,169401,169404,169461,169464,169484,169488,169491,169554,169558,169561,169617,169624,169648,169652,169655,169718,169722,169727,169778,169781,169785,169790,169857,169860,169942,169946,169951,170002,170005,170009,170012,170015,170023,170026,170072,170075,170121,170125,170131,170175,170178,170224,170227,170267,170270,170331,170335,170338,170428,170431,170573,170576,170643,170647,170650,170653,170794,170797,170875,170878,171054,171058,171060,171071,171073,171272,171276,171520,171524,171558,171562,171593],[10,169105,169101],{"id":169106},"_8-文件操作",[14,169108,169110],{"id":169109},"_81-文件操作的意义","8.1 文件操作的意义",[19,169112,169113],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169115,169116],{},"常见文件类型：",[1171,169118,169119,169125,169131,169137,169143],{},[1174,169120,169121,169124],{},[36,169122,169123],{},".txt","：普通文本。",[1174,169126,169127,169130],{},[36,169128,169129],{},".csv","：表格文本。",[1174,169132,169133,169136],{},[36,169134,169135],{},".json","：结构化数据。",[1174,169138,169139,169142],{},[36,169140,169141],{},".log","：日志文件。",[1174,169144,169145,169147],{},[36,169146,147297],{},"：Python 源代码。",[14,169149,169151],{"id":169150},"_82-路径","8.2 路径",[1188,169153,169155],{"id":169154},"_821-相对路径","8.2.1 相对路径",[19,169157,169158],{},"相对当前运行目录：",[29,169160,169162],{"className":31,"code":169161,"language":33,"meta":34,"style":34},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[36,169163,169164],{"__ignoreMap":34},[39,169165,169166,169168,169170,169172,169174,169176,169178,169180,169182,169184],{"class":41,"line":42},[39,169167,87969],{"class":56},[39,169169,1221],{"class":45},[39,169171,147741],{"class":1319},[39,169173,13491],{"class":45},[39,169175,147746],{"class":1319},[39,169177,13491],{"class":45},[39,169179,147751],{"class":254},[39,169181,50],{"class":49},[39,169183,147756],{"class":1319},[39,169185,209],{"class":45},[1188,169187,169189],{"id":169188},"_822-绝对路径","8.2.2 绝对路径",[19,169191,169192],{},"从根目录或盘符开始：",[29,169194,169196],{"className":31,"code":169195,"language":33,"meta":34,"style":34},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[36,169197,169198,169221],{"__ignoreMap":34},[39,169199,169200,169202,169204,169207,169209,169211,169213,169215,169217,169219],{"class":41,"line":42},[39,169201,87969],{"class":56},[39,169203,1221],{"class":45},[39,169205,169206],{"class":1319},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[39,169208,13491],{"class":45},[39,169210,147746],{"class":1319},[39,169212,13491],{"class":45},[39,169214,147751],{"class":254},[39,169216,50],{"class":49},[39,169218,147756],{"class":1319},[39,169220,209],{"class":45},[39,169222,169223,169225,169227,169230,169232,169234,169236,169238,169240,169242],{"class":41,"line":74},[39,169224,87969],{"class":56},[39,169226,1221],{"class":45},[39,169228,169229],{"class":1319},"\"D:\u002Fdata\u002Fdata.txt\"",[39,169231,13491],{"class":45},[39,169233,147746],{"class":1319},[39,169235,13491],{"class":45},[39,169237,147751],{"class":254},[39,169239,50],{"class":49},[39,169241,147756],{"class":1319},[39,169243,209],{"class":45},[19,169245,169246],{},"Windows 路径建议写成：",[29,169248,169250],{"className":31,"code":169249,"language":33,"meta":34,"style":34},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[36,169251,169252],{"__ignoreMap":34},[39,169253,169254,169257,169259],{"class":41,"line":42},[39,169255,169256],{"class":45},"path ",[39,169258,50],{"class":49},[39,169260,169261],{"class":1319}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169263,169264],{},"或原始字符串：",[29,169266,169268],{"className":31,"code":169267,"language":33,"meta":34,"style":34},"path = r\"D:\\data\\data.txt\"\n",[36,169269,169270],{"__ignoreMap":34},[39,169271,169272,169274,169276,169278,169280,169283,169286,169289,169291,169293,169295,169298],{"class":41,"line":42},[39,169273,169256],{"class":45},[39,169275,50],{"class":49},[39,169277,18177],{"class":49},[39,169279,1462],{"class":1319},[39,169281,169282],{"class":49031},"D:",[39,169284,169285],{"class":56},"\\d",[39,169287,169288],{"class":49031},"ata",[39,169290,169285],{"class":56},[39,169292,169288],{"class":49031},[39,169294,1758],{"class":56},[39,169296,169297],{"class":49031},"txt",[39,169299,26190],{"class":1319},[14,169301,169303],{"id":169302},"_83-open函数","8.3 open函数",[19,169305,6238],{},[29,169307,169309],{"className":31,"code":169308,"language":33,"meta":34,"style":34},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[36,169310,169311],{"__ignoreMap":34},[39,169312,169313,169315,169317,169319,169322,169324,169326,169328],{"class":41,"line":42},[39,169314,46409],{"class":254},[39,169316,14620],{"class":49},[39,169318,147736],{"class":56},[39,169320,169321],{"class":45},"(文件路径, 打开模式, ",[39,169323,147751],{"class":254},[39,169325,50],{"class":49},[39,169327,147756],{"class":1319},[39,169329,209],{"class":45},[19,169331,169332],{},"常见模式：",[1352,169334,169335,169344],{},[1355,169336,169337],{},[1358,169338,169339,169342],{},[1361,169340,169341],{},"模式",[1361,169343,26926],{},[1398,169345,169346,169355,169364,169373,169383],{},[1358,169347,169348,169352],{},[1403,169349,169350],{},[36,169351,1869],{},[1403,169353,169354],{},"只读，文件不存在会报错",[1358,169356,169357,169361],{},[1403,169358,169359],{},[36,169360,1993],{},[1403,169362,169363],{},"只写，文件不存在会创建，存在会清空",[1358,169365,169366,169370],{},[1403,169367,169368],{},[36,169369,46],{},[1403,169371,169372],{},"追加，文件不存在会创建",[1358,169374,169375,169380],{},[1403,169376,169377],{},[36,169378,169379],{},"rb",[1403,169381,169382],{},"二进制只读",[1358,169384,169385,169390],{},[1403,169386,169387],{},[36,169388,169389],{},"wb",[1403,169391,169392],{},"二进制只写",[14,169394,169396],{"id":169395},"_84-读取文件","8.4 读取文件",[1188,169398,169400],{"id":169399},"_841-read","8.4.1 read",[19,169402,169403],{},"一次读取全部内容：",[29,169405,169407],{"className":31,"code":169406,"language":33,"meta":34,"style":34},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[36,169408,169409,169435,169447,169454],{"__ignoreMap":34},[39,169410,169411,169413,169415,169417,169419,169421,169423,169425,169427,169429,169431,169433],{"class":41,"line":42},[39,169412,46409],{"class":254},[39,169414,14620],{"class":49},[39,169416,147736],{"class":56},[39,169418,1221],{"class":45},[39,169420,147741],{"class":1319},[39,169422,13491],{"class":45},[39,169424,147746],{"class":1319},[39,169426,13491],{"class":45},[39,169428,147751],{"class":254},[39,169430,50],{"class":49},[39,169432,147756],{"class":1319},[39,169434,209],{"class":45},[39,169436,169437,169440,169442,169444],{"class":41,"line":74},[39,169438,169439],{"class":45},"content ",[39,169441,50],{"class":49},[39,169443,149098],{"class":254},[39,169445,169446],{"class":45},".read()\n",[39,169448,169449,169451],{"class":41,"line":99},[39,169450,31470],{"class":56},[39,169452,169453],{"class":45},"(content)\n",[39,169455,169456,169458],{"class":41,"line":106},[39,169457,46409],{"class":254},[39,169459,169460],{"class":45},".close()\n",[19,169462,169463],{},"可以指定读取字符数：",[29,169465,169467],{"className":31,"code":169466,"language":33,"meta":34,"style":34},"content = file.read(10)\n",[36,169468,169469],{"__ignoreMap":34},[39,169470,169471,169473,169475,169477,169480,169482],{"class":41,"line":42},[39,169472,169439],{"class":45},[39,169474,50],{"class":49},[39,169476,149098],{"class":254},[39,169478,169479],{"class":45},".read(",[39,169481,146],{"class":56},[39,169483,209],{"class":45},[1188,169485,169487],{"id":169486},"_842-readline","8.4.2 readline",[19,169489,169490],{},"一次读取一行：",[29,169492,169494],{"className":31,"code":169493,"language":33,"meta":34,"style":34},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[36,169495,169496,169522,169526,169537,169544,169548],{"__ignoreMap":34},[39,169497,169498,169500,169502,169504,169506,169508,169510,169512,169514,169516,169518,169520],{"class":41,"line":42},[39,169499,46409],{"class":254},[39,169501,14620],{"class":49},[39,169503,147736],{"class":56},[39,169505,1221],{"class":45},[39,169507,147741],{"class":1319},[39,169509,13491],{"class":45},[39,169511,147746],{"class":1319},[39,169513,13491],{"class":45},[39,169515,147751],{"class":254},[39,169517,50],{"class":49},[39,169519,147756],{"class":1319},[39,169521,209],{"class":45},[39,169523,169524],{"class":41,"line":74},[39,169525,3458],{"emptyLinePlaceholder":1145},[39,169527,169528,169530,169532,169534],{"class":41,"line":99},[39,169529,148197],{"class":45},[39,169531,50],{"class":49},[39,169533,149098],{"class":254},[39,169535,169536],{"class":45},".readline()\n",[39,169538,169539,169541],{"class":41,"line":106},[39,169540,31470],{"class":56},[39,169542,169543],{"class":45},"(line)\n",[39,169545,169546],{"class":41,"line":112},[39,169547,3458],{"emptyLinePlaceholder":1145},[39,169549,169550,169552],{"class":41,"line":118},[39,169551,46409],{"class":254},[39,169553,169460],{"class":45},[1188,169555,169557],{"id":169556},"_843-readlines","8.4.3 readlines",[19,169559,169560],{},"读取所有行，返回列表：",[29,169562,169564],{"className":31,"code":169563,"language":33,"meta":34,"style":34},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[36,169565,169566,169592,169604,169611],{"__ignoreMap":34},[39,169567,169568,169570,169572,169574,169576,169578,169580,169582,169584,169586,169588,169590],{"class":41,"line":42},[39,169569,46409],{"class":254},[39,169571,14620],{"class":49},[39,169573,147736],{"class":56},[39,169575,1221],{"class":45},[39,169577,147741],{"class":1319},[39,169579,13491],{"class":45},[39,169581,147746],{"class":1319},[39,169583,13491],{"class":45},[39,169585,147751],{"class":254},[39,169587,50],{"class":49},[39,169589,147756],{"class":1319},[39,169591,209],{"class":45},[39,169593,169594,169597,169599,169601],{"class":41,"line":74},[39,169595,169596],{"class":45},"lines ",[39,169598,50],{"class":49},[39,169600,149098],{"class":254},[39,169602,169603],{"class":45},".readlines()\n",[39,169605,169606,169608],{"class":41,"line":99},[39,169607,31470],{"class":56},[39,169609,169610],{"class":45},"(lines)\n",[39,169612,169613,169615],{"class":41,"line":106},[39,169614,46409],{"class":254},[39,169616,169460],{"class":45},[19,169618,169619,169620,169623],{},"每一行通常带有换行符，可以用 ",[36,169621,169622],{},"strip()"," 去掉：",[29,169625,169627],{"className":31,"code":169626,"language":33,"meta":34,"style":34},"for line in lines:\n    print(line.strip())\n",[36,169628,169629,169641],{"__ignoreMap":34},[39,169630,169631,169633,169636,169638],{"class":41,"line":42},[39,169632,4083],{"class":49},[39,169634,169635],{"class":45}," line ",[39,169637,27100],{"class":49},[39,169639,169640],{"class":45}," lines:\n",[39,169642,169643,169645],{"class":41,"line":74},[39,169644,32354],{"class":56},[39,169646,169647],{"class":45},"(line.strip())\n",[1188,169649,169651],{"id":169650},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,169653,169654],{},"推荐读取大文件时使用：",[29,169656,169658],{"className":31,"code":169657,"language":33,"meta":34,"style":34},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[36,169659,169660,169686,169690,169702,169708,169712],{"__ignoreMap":34},[39,169661,169662,169664,169666,169668,169670,169672,169674,169676,169678,169680,169682,169684],{"class":41,"line":42},[39,169663,46409],{"class":254},[39,169665,14620],{"class":49},[39,169667,147736],{"class":56},[39,169669,1221],{"class":45},[39,169671,147741],{"class":1319},[39,169673,13491],{"class":45},[39,169675,147746],{"class":1319},[39,169677,13491],{"class":45},[39,169679,147751],{"class":254},[39,169681,50],{"class":49},[39,169683,147756],{"class":1319},[39,169685,209],{"class":45},[39,169687,169688],{"class":41,"line":74},[39,169689,3458],{"emptyLinePlaceholder":1145},[39,169691,169692,169694,169696,169698,169700],{"class":41,"line":99},[39,169693,4083],{"class":49},[39,169695,169635],{"class":45},[39,169697,27100],{"class":49},[39,169699,149098],{"class":254},[39,169701,4797],{"class":45},[39,169703,169704,169706],{"class":41,"line":106},[39,169705,32354],{"class":56},[39,169707,169647],{"class":45},[39,169709,169710],{"class":41,"line":112},[39,169711,3458],{"emptyLinePlaceholder":1145},[39,169713,169714,169716],{"class":41,"line":118},[39,169715,46409],{"class":254},[39,169717,169460],{"class":45},[14,169719,169721],{"id":169720},"_85-with语句","8.5 with语句",[19,169723,169724,169726],{},[36,169725,108778],{}," 会自动关闭文件，推荐使用。",[29,169728,169730],{"className":31,"code":169729,"language":33,"meta":34,"style":34},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[36,169731,169732,169762,169772],{"__ignoreMap":34},[39,169733,169734,169736,169738,169740,169742,169744,169746,169748,169750,169752,169754,169756,169758,169760],{"class":41,"line":42},[39,169735,108778],{"class":49},[39,169737,147736],{"class":56},[39,169739,1221],{"class":45},[39,169741,147741],{"class":1319},[39,169743,13491],{"class":45},[39,169745,147746],{"class":1319},[39,169747,13491],{"class":45},[39,169749,147751],{"class":254},[39,169751,50],{"class":49},[39,169753,147756],{"class":1319},[39,169755,14770],{"class":45},[39,169757,32438],{"class":49},[39,169759,149098],{"class":254},[39,169761,4797],{"class":45},[39,169763,169764,169766,169768,169770],{"class":41,"line":74},[39,169765,147768],{"class":45},[39,169767,50],{"class":49},[39,169769,149098],{"class":254},[39,169771,169446],{"class":45},[39,169773,169774,169776],{"class":41,"line":99},[39,169775,32354],{"class":56},[39,169777,169453],{"class":45},[19,169779,169780],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169782,169784],{"id":169783},"_86-写入文件","8.6 写入文件",[19,169786,169787,169789],{},[36,169788,1993],{}," 模式会清空原文件。",[29,169791,169793],{"className":31,"code":169792,"language":33,"meta":34,"style":34},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[36,169794,169795,169825,169842],{"__ignoreMap":34},[39,169796,169797,169799,169801,169803,169805,169807,169809,169811,169813,169815,169817,169819,169821,169823],{"class":41,"line":42},[39,169798,108778],{"class":49},[39,169800,147736],{"class":56},[39,169802,1221],{"class":45},[39,169804,147741],{"class":1319},[39,169806,13491],{"class":45},[39,169808,152921],{"class":1319},[39,169810,13491],{"class":45},[39,169812,147751],{"class":254},[39,169814,50],{"class":49},[39,169816,147756],{"class":1319},[39,169818,14770],{"class":45},[39,169820,32438],{"class":49},[39,169822,149098],{"class":254},[39,169824,4797],{"class":45},[39,169826,169827,169830,169833,169836,169838,169840],{"class":41,"line":74},[39,169828,169829],{"class":254},"    file",[39,169831,169832],{"class":45},".write(",[39,169834,169835],{"class":1319},"\"hello",[39,169837,157470],{"class":56},[39,169839,1462],{"class":1319},[39,169841,209],{"class":45},[39,169843,169844,169846,169848,169851,169853,169855],{"class":41,"line":99},[39,169845,169829],{"class":254},[39,169847,169832],{"class":45},[39,169849,169850],{"class":1319},"\"python",[39,169852,157470],{"class":56},[39,169854,1462],{"class":1319},[39,169856,209],{"class":45},[19,169858,169859],{},"写入多行：",[29,169861,169863],{"className":31,"code":169862,"language":33,"meta":34,"style":34},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[36,169864,169865,169900,169904,169935],{"__ignoreMap":34},[39,169866,169867,169869,169871,169873,169876,169878,169880,169882,169885,169887,169889,169891,169894,169896,169898],{"class":41,"line":42},[39,169868,169596],{"class":45},[39,169870,50],{"class":49},[39,169872,53280],{"class":45},[39,169874,169875],{"class":1319},"\"小明,18",[39,169877,157470],{"class":56},[39,169879,1462],{"class":1319},[39,169881,13491],{"class":45},[39,169883,169884],{"class":1319},"\"小红,17",[39,169886,157470],{"class":56},[39,169888,1462],{"class":1319},[39,169890,13491],{"class":45},[39,169892,169893],{"class":1319},"\"小刚,19",[39,169895,157470],{"class":56},[39,169897,1462],{"class":1319},[39,169899,34301],{"class":45},[39,169901,169902],{"class":41,"line":74},[39,169903,3458],{"emptyLinePlaceholder":1145},[39,169905,169906,169908,169910,169912,169915,169917,169919,169921,169923,169925,169927,169929,169931,169933],{"class":41,"line":99},[39,169907,108778],{"class":49},[39,169909,147736],{"class":56},[39,169911,1221],{"class":45},[39,169913,169914],{"class":1319},"\"students.txt\"",[39,169916,13491],{"class":45},[39,169918,152921],{"class":1319},[39,169920,13491],{"class":45},[39,169922,147751],{"class":254},[39,169924,50],{"class":49},[39,169926,147756],{"class":1319},[39,169928,14770],{"class":45},[39,169930,32438],{"class":49},[39,169932,149098],{"class":254},[39,169934,4797],{"class":45},[39,169936,169937,169939],{"class":41,"line":106},[39,169938,169829],{"class":254},[39,169940,169941],{"class":45},".writelines(lines)\n",[14,169943,169945],{"id":169944},"_87-追加文件","8.7 追加文件",[19,169947,169948,169950],{},[36,169949,46],{}," 模式不会清空原内容，而是在末尾追加。",[29,169952,169954],{"className":31,"code":169953,"language":33,"meta":34,"style":34},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[36,169955,169956,169987],{"__ignoreMap":34},[39,169957,169958,169960,169962,169964,169967,169969,169971,169973,169975,169977,169979,169981,169983,169985],{"class":41,"line":42},[39,169959,108778],{"class":49},[39,169961,147736],{"class":56},[39,169963,1221],{"class":45},[39,169965,169966],{"class":1319},"\"log.txt\"",[39,169968,13491],{"class":45},[39,169970,166270],{"class":1319},[39,169972,13491],{"class":45},[39,169974,147751],{"class":254},[39,169976,50],{"class":49},[39,169978,147756],{"class":1319},[39,169980,14770],{"class":45},[39,169982,32438],{"class":49},[39,169984,149098],{"class":254},[39,169986,4797],{"class":45},[39,169988,169989,169991,169993,169996,169998,170000],{"class":41,"line":74},[39,169990,169829],{"class":254},[39,169992,169832],{"class":45},[39,169994,169995],{"class":1319},"\"程序启动",[39,169997,157470],{"class":56},[39,169999,1462],{"class":1319},[39,170001,209],{"class":45},[19,170003,170004],{},"日志类文件常用追加模式。",[14,170006,170008],{"id":170007},"_88-文件编码","8.8 文件编码",[19,170010,170011],{},"编码决定文字如何保存为字节。",[19,170013,170014],{},"常见编码：",[1171,170016,170017,170020],{},[1174,170018,170019],{},"UTF-8：推荐。",[1174,170021,170022],{},"GBK：部分 Windows 中文文件常见。",[19,170024,170025],{},"读取文件乱码时，可以尝试：",[29,170027,170029],{"className":31,"code":170028,"language":33,"meta":34,"style":34},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[36,170030,170031,170062],{"__ignoreMap":34},[39,170032,170033,170035,170037,170039,170041,170043,170045,170047,170049,170051,170054,170056,170058,170060],{"class":41,"line":42},[39,170034,108778],{"class":49},[39,170036,147736],{"class":56},[39,170038,1221],{"class":45},[39,170040,147741],{"class":1319},[39,170042,13491],{"class":45},[39,170044,147746],{"class":1319},[39,170046,13491],{"class":45},[39,170048,147751],{"class":254},[39,170050,50],{"class":49},[39,170052,170053],{"class":1319},"\"gbk\"",[39,170055,14770],{"class":45},[39,170057,32438],{"class":49},[39,170059,149098],{"class":254},[39,170061,4797],{"class":45},[39,170063,170064,170066,170068,170070],{"class":41,"line":74},[39,170065,147768],{"class":45},[39,170067,50],{"class":49},[39,170069,149098],{"class":254},[39,170071,169446],{"class":45},[19,170073,170074],{},"写文件时建议统一 UTF-8：",[29,170076,170078],{"className":31,"code":170077,"language":33,"meta":34,"style":34},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[36,170079,170080,170110],{"__ignoreMap":34},[39,170081,170082,170084,170086,170088,170090,170092,170094,170096,170098,170100,170102,170104,170106,170108],{"class":41,"line":42},[39,170083,108778],{"class":49},[39,170085,147736],{"class":56},[39,170087,1221],{"class":45},[39,170089,147741],{"class":1319},[39,170091,13491],{"class":45},[39,170093,152921],{"class":1319},[39,170095,13491],{"class":45},[39,170097,147751],{"class":254},[39,170099,50],{"class":49},[39,170101,147756],{"class":1319},[39,170103,14770],{"class":45},[39,170105,32438],{"class":49},[39,170107,149098],{"class":254},[39,170109,4797],{"class":45},[39,170111,170112,170114,170116,170119],{"class":41,"line":74},[39,170113,169829],{"class":254},[39,170115,169832],{"class":45},[39,170117,170118],{"class":1319},"\"中文内容\"",[39,170120,209],{"class":45},[14,170122,170124],{"id":170123},"_89-pathlib","8.9 pathlib",[19,170126,170127,170130],{},[36,170128,170129],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[29,170132,170134],{"className":31,"code":170133,"language":33,"meta":34,"style":34},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[36,170135,170136,170146,170150,170168],{"__ignoreMap":34},[39,170137,170138,170140,170142,170144],{"class":41,"line":42},[39,170139,31792],{"class":49},[39,170141,109256],{"class":45},[39,170143,31447],{"class":49},[39,170145,109261],{"class":45},[39,170147,170148],{"class":41,"line":74},[39,170149,3458],{"emptyLinePlaceholder":1145},[39,170151,170152,170154,170156,170158,170161,170163,170165],{"class":41,"line":99},[39,170153,169256],{"class":45},[39,170155,50],{"class":49},[39,170157,109490],{"class":45},[39,170159,170160],{"class":1319},"\"data\"",[39,170162,14770],{"class":45},[39,170164,1784],{"class":49},[39,170166,170167],{"class":1319}," \"students.txt\"\n",[39,170169,170170,170172],{"class":41,"line":106},[39,170171,31470],{"class":56},[39,170173,170174],{"class":45},"(path)\n",[19,170176,170177],{},"创建目录：",[29,170179,170181],{"className":31,"code":170180,"language":33,"meta":34,"style":34},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[36,170182,170183,170193,170197,170210],{"__ignoreMap":34},[39,170184,170185,170187,170189,170191],{"class":41,"line":42},[39,170186,31792],{"class":49},[39,170188,109256],{"class":45},[39,170190,31447],{"class":49},[39,170192,109261],{"class":45},[39,170194,170195],{"class":41,"line":74},[39,170196,3458],{"emptyLinePlaceholder":1145},[39,170198,170199,170202,170204,170206,170208],{"class":41,"line":99},[39,170200,170201],{"class":45},"data_dir ",[39,170203,50],{"class":49},[39,170205,109490],{"class":45},[39,170207,170160],{"class":1319},[39,170209,209],{"class":45},[39,170211,170212,170215,170218,170220,170222],{"class":41,"line":106},[39,170213,170214],{"class":45},"data_dir.mkdir(",[39,170216,170217],{"class":254},"exist_ok",[39,170219,50],{"class":49},[39,170221,32531],{"class":56},[39,170223,209],{"class":45},[19,170225,170226],{},"判断文件是否存在：",[29,170228,170230],{"className":31,"code":170229,"language":33,"meta":34,"style":34},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[36,170231,170232,170245,170249,170256],{"__ignoreMap":34},[39,170233,170234,170236,170238,170240,170243],{"class":41,"line":42},[39,170235,169256],{"class":45},[39,170237,50],{"class":49},[39,170239,109490],{"class":45},[39,170241,170242],{"class":1319},"\"data\u002Fstudents.txt\"",[39,170244,209],{"class":45},[39,170246,170247],{"class":41,"line":74},[39,170248,3458],{"emptyLinePlaceholder":1145},[39,170250,170251,170253],{"class":41,"line":99},[39,170252,2596],{"class":49},[39,170254,170255],{"class":45}," path.exists():\n",[39,170257,170258,170260,170262,170265],{"class":41,"line":106},[39,170259,32354],{"class":56},[39,170261,1221],{"class":45},[39,170263,170264],{"class":1319},"\"文件存在\"",[39,170266,209],{"class":45},[19,170268,170269],{},"读写文本：",[29,170271,170273],{"className":31,"code":170272,"language":33,"meta":34,"style":34},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[36,170274,170275,170287,170291,170308,170325],{"__ignoreMap":34},[39,170276,170277,170279,170281,170283,170285],{"class":41,"line":42},[39,170278,169256],{"class":45},[39,170280,50],{"class":49},[39,170282,109490],{"class":45},[39,170284,147741],{"class":1319},[39,170286,209],{"class":45},[39,170288,170289],{"class":41,"line":74},[39,170290,3458],{"emptyLinePlaceholder":1145},[39,170292,170293,170296,170298,170300,170302,170304,170306],{"class":41,"line":99},[39,170294,170295],{"class":45},"path.write_text(",[39,170297,146821],{"class":1319},[39,170299,13491],{"class":45},[39,170301,147751],{"class":254},[39,170303,50],{"class":49},[39,170305,147756],{"class":1319},[39,170307,209],{"class":45},[39,170309,170310,170312,170314,170317,170319,170321,170323],{"class":41,"line":106},[39,170311,169439],{"class":45},[39,170313,50],{"class":49},[39,170315,170316],{"class":45}," path.read_text(",[39,170318,147751],{"class":254},[39,170320,50],{"class":49},[39,170322,147756],{"class":1319},[39,170324,209],{"class":45},[39,170326,170327,170329],{"class":41,"line":112},[39,170328,31470],{"class":56},[39,170330,169453],{"class":45},[14,170332,170334],{"id":170333},"_810-json文件","8.10 JSON文件",[19,170336,170337],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[29,170339,170341],{"className":31,"code":170340,"language":33,"meta":34,"style":34},"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",[36,170342,170343,170349,170353,170361,170371,170381,170389,170393,170397,170422],{"__ignoreMap":34},[39,170344,170345,170347],{"class":41,"line":42},[39,170346,31447],{"class":49},[39,170348,148036],{"class":45},[39,170350,170351],{"class":41,"line":74},[39,170352,3458],{"emptyLinePlaceholder":1145},[39,170354,170355,170357,170359],{"class":41,"line":99},[39,170356,150426],{"class":45},[39,170358,50],{"class":49},[39,170360,16628],{"class":45},[39,170362,170363,170365,170367,170369],{"class":41,"line":106},[39,170364,147965],{"class":1319},[39,170366,52491],{"class":45},[39,170368,150833],{"class":1319},[39,170370,32521],{"class":45},[39,170372,170373,170375,170377,170379],{"class":41,"line":112},[39,170374,165482],{"class":1319},[39,170376,52491],{"class":45},[39,170378,1849],{"class":56},[39,170380,32521],{"class":45},[39,170382,170383,170385,170387],{"class":41,"line":118},[39,170384,165493],{"class":1319},[39,170386,52491],{"class":45},[39,170388,165498],{"class":56},[39,170390,170391],{"class":41,"line":413},[39,170392,2630],{"class":45},[39,170394,170395],{"class":41,"line":419},[39,170396,3458],{"emptyLinePlaceholder":1145},[39,170398,170399,170401,170403,170406,170408,170410,170412,170414,170416,170418,170420],{"class":41,"line":425},[39,170400,157389],{"class":45},[39,170402,50],{"class":49},[39,170404,170405],{"class":45}," json.dumps(student, ",[39,170407,148082],{"class":254},[39,170409,50],{"class":49},[39,170411,35042],{"class":56},[39,170413,13491],{"class":45},[39,170415,152957],{"class":254},[39,170417,50],{"class":49},[39,170419,63],{"class":56},[39,170421,209],{"class":45},[39,170423,170424,170426],{"class":41,"line":443},[39,170425,31470],{"class":56},[39,170427,165016],{"class":45},[19,170429,170430],{},"写入 JSON 文件：",[29,170432,170434],{"className":31,"code":170433,"language":33,"meta":34,"style":34},"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",[36,170435,170436,170442,170446,170454,170482,170510,170514,170518,170548],{"__ignoreMap":34},[39,170437,170438,170440],{"class":41,"line":42},[39,170439,31447],{"class":49},[39,170441,148036],{"class":45},[39,170443,170444],{"class":41,"line":74},[39,170445,3458],{"emptyLinePlaceholder":1145},[39,170447,170448,170450,170452],{"class":41,"line":99},[39,170449,160661],{"class":45},[39,170451,50],{"class":49},[39,170453,56501],{"class":45},[39,170455,170456,170458,170460,170462,170464,170466,170468,170470,170472,170474,170476,170478,170480],{"class":41,"line":106},[39,170457,149330],{"class":45},[39,170459,63733],{"class":1319},[39,170461,52491],{"class":45},[39,170463,150833],{"class":1319},[39,170465,13491],{"class":45},[39,170467,70178],{"class":1319},[39,170469,52491],{"class":45},[39,170471,1849],{"class":56},[39,170473,13491],{"class":45},[39,170475,152417],{"class":1319},[39,170477,52491],{"class":45},[39,170479,2187],{"class":56},[39,170481,5987],{"class":45},[39,170483,170484,170486,170488,170490,170492,170494,170496,170498,170500,170502,170504,170506,170508],{"class":41,"line":112},[39,170485,149330],{"class":45},[39,170487,63733],{"class":1319},[39,170489,52491],{"class":45},[39,170491,151881],{"class":1319},[39,170493,13491],{"class":45},[39,170495,70178],{"class":1319},[39,170497,52491],{"class":45},[39,170499,1825],{"class":56},[39,170501,13491],{"class":45},[39,170503,152417],{"class":1319},[39,170505,52491],{"class":45},[39,170507,2009],{"class":56},[39,170509,5987],{"class":45},[39,170511,170512],{"class":41,"line":118},[39,170513,34301],{"class":45},[39,170515,170516],{"class":41,"line":413},[39,170517,3458],{"emptyLinePlaceholder":1145},[39,170519,170520,170522,170524,170526,170528,170530,170532,170534,170536,170538,170540,170542,170544,170546],{"class":41,"line":419},[39,170521,108778],{"class":49},[39,170523,147736],{"class":56},[39,170525,1221],{"class":45},[39,170527,152776],{"class":1319},[39,170529,13491],{"class":45},[39,170531,152921],{"class":1319},[39,170533,13491],{"class":45},[39,170535,147751],{"class":254},[39,170537,50],{"class":49},[39,170539,147756],{"class":1319},[39,170541,14770],{"class":45},[39,170543,32438],{"class":49},[39,170545,149098],{"class":254},[39,170547,4797],{"class":45},[39,170549,170550,170553,170555,170557,170559,170561,170563,170565,170567,170569,170571],{"class":41,"line":425},[39,170551,170552],{"class":45},"    json.dump(students, ",[39,170554,46409],{"class":254},[39,170556,13491],{"class":45},[39,170558,148082],{"class":254},[39,170560,50],{"class":49},[39,170562,35042],{"class":56},[39,170564,13491],{"class":45},[39,170566,152957],{"class":254},[39,170568,50],{"class":49},[39,170570,63],{"class":56},[39,170572,209],{"class":45},[19,170574,170575],{},"读取 JSON 文件：",[29,170577,170579],{"className":31,"code":170578,"language":33,"meta":34,"style":34},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[36,170580,170581,170587,170591,170621,170633,170637],{"__ignoreMap":34},[39,170582,170583,170585],{"class":41,"line":42},[39,170584,31447],{"class":49},[39,170586,148036],{"class":45},[39,170588,170589],{"class":41,"line":74},[39,170590,3458],{"emptyLinePlaceholder":1145},[39,170592,170593,170595,170597,170599,170601,170603,170605,170607,170609,170611,170613,170615,170617,170619],{"class":41,"line":99},[39,170594,108778],{"class":49},[39,170596,147736],{"class":56},[39,170598,1221],{"class":45},[39,170600,152776],{"class":1319},[39,170602,13491],{"class":45},[39,170604,147746],{"class":1319},[39,170606,13491],{"class":45},[39,170608,147751],{"class":254},[39,170610,50],{"class":49},[39,170612,147756],{"class":1319},[39,170614,14770],{"class":45},[39,170616,32438],{"class":49},[39,170618,149098],{"class":254},[39,170620,4797],{"class":45},[39,170622,170623,170625,170627,170629,170631],{"class":41,"line":106},[39,170624,153982],{"class":45},[39,170626,50],{"class":49},[39,170628,149109],{"class":45},[39,170630,46409],{"class":254},[39,170632,209],{"class":45},[39,170634,170635],{"class":41,"line":112},[39,170636,3458],{"emptyLinePlaceholder":1145},[39,170638,170639,170641],{"class":41,"line":118},[39,170640,31470],{"class":56},[39,170642,165940],{"class":45},[14,170644,170646],{"id":170645},"_811-csv文件","8.11 CSV文件",[19,170648,170649],{},"CSV 是逗号分隔值，常用于表格数据。",[19,170651,170652],{},"写入 CSV：",[29,170654,170656],{"className":31,"code":170655,"language":33,"meta":34,"style":34},"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",[36,170657,170658,170665,170669,170677,170695,170711,170727,170731,170735,170775,170789],{"__ignoreMap":34},[39,170659,170660,170662],{"class":41,"line":42},[39,170661,31447],{"class":49},[39,170663,170664],{"class":45}," csv\n",[39,170666,170667],{"class":41,"line":74},[39,170668,3458],{"emptyLinePlaceholder":1145},[39,170670,170671,170673,170675],{"class":41,"line":99},[39,170672,160661],{"class":45},[39,170674,50],{"class":49},[39,170676,56501],{"class":45},[39,170678,170679,170682,170684,170686,170688,170690,170693],{"class":41,"line":106},[39,170680,170681],{"class":45},"    [",[39,170683,74153],{"class":1319},[39,170685,13491],{"class":45},[39,170687,74186],{"class":1319},[39,170689,13491],{"class":45},[39,170691,170692],{"class":1319},"\"成绩\"",[39,170694,88890],{"class":45},[39,170696,170697,170699,170701,170703,170705,170707,170709],{"class":41,"line":112},[39,170698,170681],{"class":45},[39,170700,150833],{"class":1319},[39,170702,13491],{"class":45},[39,170704,1849],{"class":56},[39,170706,13491],{"class":45},[39,170708,2187],{"class":56},[39,170710,88890],{"class":45},[39,170712,170713,170715,170717,170719,170721,170723,170725],{"class":41,"line":118},[39,170714,170681],{"class":45},[39,170716,151881],{"class":1319},[39,170718,13491],{"class":45},[39,170720,1825],{"class":56},[39,170722,13491],{"class":45},[39,170724,2009],{"class":56},[39,170726,88890],{"class":45},[39,170728,170729],{"class":41,"line":413},[39,170730,34301],{"class":45},[39,170732,170733],{"class":41,"line":419},[39,170734,3458],{"emptyLinePlaceholder":1145},[39,170736,170737,170739,170741,170743,170746,170748,170750,170752,170754,170756,170758,170760,170763,170765,170767,170769,170771,170773],{"class":41,"line":425},[39,170738,108778],{"class":49},[39,170740,147736],{"class":56},[39,170742,1221],{"class":45},[39,170744,170745],{"class":1319},"\"students.csv\"",[39,170747,13491],{"class":45},[39,170749,152921],{"class":1319},[39,170751,13491],{"class":45},[39,170753,147751],{"class":254},[39,170755,50],{"class":49},[39,170757,147756],{"class":1319},[39,170759,13491],{"class":45},[39,170761,170762],{"class":254},"newline",[39,170764,50],{"class":49},[39,170766,8708],{"class":1319},[39,170768,14770],{"class":45},[39,170770,32438],{"class":49},[39,170772,149098],{"class":254},[39,170774,4797],{"class":45},[39,170776,170777,170780,170782,170785,170787],{"class":41,"line":443},[39,170778,170779],{"class":45},"    writer ",[39,170781,50],{"class":49},[39,170783,170784],{"class":45}," csv.writer(",[39,170786,46409],{"class":254},[39,170788,209],{"class":45},[39,170790,170791],{"class":41,"line":449},[39,170792,170793],{"class":45},"    writer.writerows(students)\n",[19,170795,170796],{},"读取 CSV：",[29,170798,170800],{"className":31,"code":170799,"language":33,"meta":34,"style":34},"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",[36,170801,170802,170808,170812,170842,170856,170868],{"__ignoreMap":34},[39,170803,170804,170806],{"class":41,"line":42},[39,170805,31447],{"class":49},[39,170807,170664],{"class":45},[39,170809,170810],{"class":41,"line":74},[39,170811,3458],{"emptyLinePlaceholder":1145},[39,170813,170814,170816,170818,170820,170822,170824,170826,170828,170830,170832,170834,170836,170838,170840],{"class":41,"line":99},[39,170815,108778],{"class":49},[39,170817,147736],{"class":56},[39,170819,1221],{"class":45},[39,170821,170745],{"class":1319},[39,170823,13491],{"class":45},[39,170825,147746],{"class":1319},[39,170827,13491],{"class":45},[39,170829,147751],{"class":254},[39,170831,50],{"class":49},[39,170833,147756],{"class":1319},[39,170835,14770],{"class":45},[39,170837,32438],{"class":49},[39,170839,149098],{"class":254},[39,170841,4797],{"class":45},[39,170843,170844,170847,170849,170852,170854],{"class":41,"line":106},[39,170845,170846],{"class":45},"    reader ",[39,170848,50],{"class":49},[39,170850,170851],{"class":45}," csv.reader(",[39,170853,46409],{"class":254},[39,170855,209],{"class":45},[39,170857,170858,170860,170863,170865],{"class":41,"line":112},[39,170859,4259],{"class":49},[39,170861,170862],{"class":45}," row ",[39,170864,27100],{"class":49},[39,170866,170867],{"class":45}," reader:\n",[39,170869,170870,170872],{"class":41,"line":118},[39,170871,33506],{"class":56},[39,170873,170874],{"class":45},"(row)\n",[19,170876,170877],{},"使用字典写入：",[29,170879,170881],{"className":31,"code":170880,"language":33,"meta":34,"style":34},"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",[36,170882,170883,170889,170893,170901,170929,170957,170961,170965,171003,171024,171045,171050],{"__ignoreMap":34},[39,170884,170885,170887],{"class":41,"line":42},[39,170886,31447],{"class":49},[39,170888,170664],{"class":45},[39,170890,170891],{"class":41,"line":74},[39,170892,3458],{"emptyLinePlaceholder":1145},[39,170894,170895,170897,170899],{"class":41,"line":99},[39,170896,160661],{"class":45},[39,170898,50],{"class":49},[39,170900,56501],{"class":45},[39,170902,170903,170905,170907,170909,170911,170913,170915,170917,170919,170921,170923,170925,170927],{"class":41,"line":106},[39,170904,149330],{"class":45},[39,170906,63733],{"class":1319},[39,170908,52491],{"class":45},[39,170910,150833],{"class":1319},[39,170912,13491],{"class":45},[39,170914,70178],{"class":1319},[39,170916,52491],{"class":45},[39,170918,1849],{"class":56},[39,170920,13491],{"class":45},[39,170922,152417],{"class":1319},[39,170924,52491],{"class":45},[39,170926,2187],{"class":56},[39,170928,5987],{"class":45},[39,170930,170931,170933,170935,170937,170939,170941,170943,170945,170947,170949,170951,170953,170955],{"class":41,"line":112},[39,170932,149330],{"class":45},[39,170934,63733],{"class":1319},[39,170936,52491],{"class":45},[39,170938,151881],{"class":1319},[39,170940,13491],{"class":45},[39,170942,70178],{"class":1319},[39,170944,52491],{"class":45},[39,170946,1825],{"class":56},[39,170948,13491],{"class":45},[39,170950,152417],{"class":1319},[39,170952,52491],{"class":45},[39,170954,2009],{"class":56},[39,170956,5987],{"class":45},[39,170958,170959],{"class":41,"line":118},[39,170960,34301],{"class":45},[39,170962,170963],{"class":41,"line":413},[39,170964,3458],{"emptyLinePlaceholder":1145},[39,170966,170967,170969,170971,170973,170975,170977,170979,170981,170983,170985,170987,170989,170991,170993,170995,170997,170999,171001],{"class":41,"line":419},[39,170968,108778],{"class":49},[39,170970,147736],{"class":56},[39,170972,1221],{"class":45},[39,170974,170745],{"class":1319},[39,170976,13491],{"class":45},[39,170978,152921],{"class":1319},[39,170980,13491],{"class":45},[39,170982,147751],{"class":254},[39,170984,50],{"class":49},[39,170986,147756],{"class":1319},[39,170988,13491],{"class":45},[39,170990,170762],{"class":254},[39,170992,50],{"class":49},[39,170994,8708],{"class":1319},[39,170996,14770],{"class":45},[39,170998,32438],{"class":49},[39,171000,149098],{"class":254},[39,171002,4797],{"class":45},[39,171004,171005,171008,171010,171012,171014,171016,171018,171020,171022],{"class":41,"line":425},[39,171006,171007],{"class":45},"    fieldnames ",[39,171009,50],{"class":49},[39,171011,53280],{"class":45},[39,171013,63733],{"class":1319},[39,171015,13491],{"class":45},[39,171017,70178],{"class":1319},[39,171019,13491],{"class":45},[39,171021,152417],{"class":1319},[39,171023,34301],{"class":45},[39,171025,171026,171028,171030,171033,171035,171037,171040,171042],{"class":41,"line":443},[39,171027,170779],{"class":45},[39,171029,50],{"class":49},[39,171031,171032],{"class":45}," csv.DictWriter(",[39,171034,46409],{"class":254},[39,171036,13491],{"class":45},[39,171038,171039],{"class":254},"fieldnames",[39,171041,50],{"class":49},[39,171043,171044],{"class":45},"fieldnames)\n",[39,171046,171047],{"class":41,"line":449},[39,171048,171049],{"class":45},"    writer.writeheader()\n",[39,171051,171052],{"class":41,"line":455},[39,171053,170793],{"class":45},[14,171055,171057],{"id":171056},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171059,124237],{},[1171,171061,171062,171065,171068],{},[1174,171063,171064],{},"读取文本文件。",[1174,171066,171067],{},"统计每个单词出现次数。",[1174,171069,171070],{},"输出出现次数最多的前 10 个单词。",[19,171072,11091],{},[29,171074,171076],{"className":31,"code":171075,"language":33,"meta":34,"style":34},"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",[36,171077,171078,171088,171092,171105,171121,171125,171135,171144,171148,171160,171180,171189,171193,171211,171215,171245,171249,171265],{"__ignoreMap":34},[39,171079,171080,171082,171084,171086],{"class":41,"line":42},[39,171081,31792],{"class":49},[39,171083,109256],{"class":45},[39,171085,31447],{"class":49},[39,171087,109261],{"class":45},[39,171089,171090],{"class":41,"line":74},[39,171091,3458],{"emptyLinePlaceholder":1145},[39,171093,171094,171096,171098,171100,171103],{"class":41,"line":99},[39,171095,169256],{"class":45},[39,171097,50],{"class":49},[39,171099,109490],{"class":45},[39,171101,171102],{"class":1319},"\"article.txt\"",[39,171104,209],{"class":45},[39,171106,171107,171109,171111,171113,171115,171117,171119],{"class":41,"line":106},[39,171108,169439],{"class":45},[39,171110,50],{"class":49},[39,171112,170316],{"class":45},[39,171114,147751],{"class":254},[39,171116,50],{"class":49},[39,171118,147756],{"class":1319},[39,171120,209],{"class":45},[39,171122,171123],{"class":41,"line":112},[39,171124,3458],{"emptyLinePlaceholder":1145},[39,171126,171127,171130,171132],{"class":41,"line":118},[39,171128,171129],{"class":45},"words ",[39,171131,50],{"class":49},[39,171133,171134],{"class":45}," content.lower().split()\n",[39,171136,171137,171140,171142],{"class":41,"line":413},[39,171138,171139],{"class":45},"counter ",[39,171141,50],{"class":49},[39,171143,88922],{"class":45},[39,171145,171146],{"class":41,"line":419},[39,171147,3458],{"emptyLinePlaceholder":1145},[39,171149,171150,171152,171155,171157],{"class":41,"line":425},[39,171151,4083],{"class":49},[39,171153,171154],{"class":45}," word ",[39,171156,27100],{"class":49},[39,171158,171159],{"class":45}," words:\n",[39,171161,171162,171165,171167,171170,171173,171175,171178],{"class":41,"line":443},[39,171163,171164],{"class":45},"    word ",[39,171166,50],{"class":49},[39,171168,171169],{"class":45}," word.strip(",[39,171171,171172],{"class":1319},"\".,!?;:",[39,171174,157440],{"class":56},[39,171176,171177],{"class":1319},"'()[]\"",[39,171179,209],{"class":45},[39,171181,171182,171184,171186],{"class":41,"line":449},[39,171183,4159],{"class":49},[39,171185,39985],{"class":49},[39,171187,171188],{"class":45}," word:\n",[39,171190,171191],{"class":41,"line":455},[39,171192,149457],{"class":49},[39,171194,171195,171198,171200,171203,171205,171207,171209],{"class":41,"line":461},[39,171196,171197],{"class":45},"    counter[word] ",[39,171199,50],{"class":49},[39,171201,171202],{"class":45}," counter.get(word, ",[39,171204,260],{"class":56},[39,171206,14770],{"class":45},[39,171208,1682],{"class":49},[39,171210,56753],{"class":56},[39,171212,171213],{"class":41,"line":475},[39,171214,3458],{"emptyLinePlaceholder":1145},[39,171216,171217,171220,171222,171224,171227,171229,171231,171233,171235,171237,171239,171241,171243],{"class":41,"line":665},[39,171218,171219],{"class":45},"items ",[39,171221,50],{"class":49},[39,171223,164549],{"class":56},[39,171225,171226],{"class":45},"(counter.items(), ",[39,171228,154891],{"class":254},[39,171230,154894],{"class":49},[39,171232,154897],{"class":45},[39,171234,57],{"class":56},[39,171236,113147],{"class":45},[39,171238,164473],{"class":254},[39,171240,50],{"class":49},[39,171242,32531],{"class":56},[39,171244,209],{"class":45},[39,171246,171247],{"class":41,"line":671},[39,171248,3458],{"emptyLinePlaceholder":1145},[39,171250,171251,171253,171256,171258,171261,171263],{"class":41,"line":684},[39,171252,4083],{"class":49},[39,171254,171255],{"class":45}," word, count ",[39,171257,27100],{"class":49},[39,171259,171260],{"class":45}," items[:",[39,171262,146],{"class":56},[39,171264,166700],{"class":45},[39,171266,171267,171269],{"class":41,"line":2732},[39,171268,32354],{"class":56},[39,171270,171271],{"class":45},"(word, count)\n",[14,171273,171275],{"id":171274},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[29,171277,171279],{"className":31,"code":171278,"language":33,"meta":34,"style":34},"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",[36,171280,171281,171287,171297,171301,171313,171317,171321,171329,171339,171345,171349,171379,171389,171393,171397,171405,171435,171459,171463,171467,171475,171504,171509],{"__ignoreMap":34},[39,171282,171283,171285],{"class":41,"line":42},[39,171284,31447],{"class":49},[39,171286,148036],{"class":45},[39,171288,171289,171291,171293,171295],{"class":41,"line":74},[39,171290,31792],{"class":49},[39,171292,109256],{"class":45},[39,171294,31447],{"class":49},[39,171296,109261],{"class":45},[39,171298,171299],{"class":41,"line":99},[39,171300,3458],{"emptyLinePlaceholder":1145},[39,171302,171303,171305,171307,171309,171311],{"class":41,"line":106},[39,171304,152769],{"class":56},[39,171306,14620],{"class":49},[39,171308,109490],{"class":45},[39,171310,152776],{"class":1319},[39,171312,209],{"class":45},[39,171314,171315],{"class":41,"line":112},[39,171316,3458],{"emptyLinePlaceholder":1145},[39,171318,171319],{"class":41,"line":118},[39,171320,3458],{"emptyLinePlaceholder":1145},[39,171322,171323,171325,171327],{"class":41,"line":413},[39,171324,33002],{"class":49},[39,171326,152793],{"class":3021},[39,171328,33008],{"class":45},[39,171330,171331,171333,171335,171337],{"class":41,"line":419},[39,171332,4159],{"class":49},[39,171334,39985],{"class":49},[39,171336,152804],{"class":56},[39,171338,152807],{"class":45},[39,171340,171341,171343],{"class":41,"line":425},[39,171342,15808],{"class":49},[39,171344,52892],{"class":45},[39,171346,171347],{"class":41,"line":443},[39,171348,3458],{"emptyLinePlaceholder":1145},[39,171350,171351,171353,171355,171357,171359,171361,171363,171365,171367,171369,171371,171373,171375,171377],{"class":41,"line":449},[39,171352,35233],{"class":49},[39,171354,147736],{"class":56},[39,171356,1221],{"class":45},[39,171358,152769],{"class":56},[39,171360,13491],{"class":45},[39,171362,147746],{"class":1319},[39,171364,13491],{"class":45},[39,171366,147751],{"class":254},[39,171368,50],{"class":49},[39,171370,147756],{"class":1319},[39,171372,14770],{"class":45},[39,171374,32438],{"class":49},[39,171376,149098],{"class":254},[39,171378,4797],{"class":45},[39,171380,171381,171383,171385,171387],{"class":41,"line":455},[39,171382,15808],{"class":49},[39,171384,149109],{"class":45},[39,171386,46409],{"class":254},[39,171388,209],{"class":45},[39,171390,171391],{"class":41,"line":461},[39,171392,3458],{"emptyLinePlaceholder":1145},[39,171394,171395],{"class":41,"line":475},[39,171396,3458],{"emptyLinePlaceholder":1145},[39,171398,171399,171401,171403],{"class":41,"line":665},[39,171400,33002],{"class":49},[39,171402,152903],{"class":3021},[39,171404,152906],{"class":45},[39,171406,171407,171409,171411,171413,171415,171417,171419,171421,171423,171425,171427,171429,171431,171433],{"class":41,"line":671},[39,171408,35233],{"class":49},[39,171410,147736],{"class":56},[39,171412,1221],{"class":45},[39,171414,152769],{"class":56},[39,171416,13491],{"class":45},[39,171418,152921],{"class":1319},[39,171420,13491],{"class":45},[39,171422,147751],{"class":254},[39,171424,50],{"class":49},[39,171426,147756],{"class":1319},[39,171428,14770],{"class":45},[39,171430,32438],{"class":49},[39,171432,149098],{"class":254},[39,171434,4797],{"class":45},[39,171436,171437,171439,171441,171443,171445,171447,171449,171451,171453,171455,171457],{"class":41,"line":684},[39,171438,152942],{"class":45},[39,171440,46409],{"class":254},[39,171442,13491],{"class":45},[39,171444,148082],{"class":254},[39,171446,50],{"class":49},[39,171448,35042],{"class":56},[39,171450,13491],{"class":45},[39,171452,152957],{"class":254},[39,171454,50],{"class":49},[39,171456,63],{"class":56},[39,171458,209],{"class":45},[39,171460,171461],{"class":41,"line":2732},[39,171462,3458],{"emptyLinePlaceholder":1145},[39,171464,171465],{"class":41,"line":2737},[39,171466,3458],{"emptyLinePlaceholder":1145},[39,171468,171469,171471,171473],{"class":41,"line":2751},[39,171470,160661],{"class":45},[39,171472,50],{"class":49},[39,171474,153987],{"class":45},[39,171476,171477,171480,171482,171484,171486,171488,171490,171492,171494,171496,171498,171500,171502],{"class":41,"line":2756},[39,171478,171479],{"class":45},"students.append({",[39,171481,63733],{"class":1319},[39,171483,52491],{"class":45},[39,171485,150833],{"class":1319},[39,171487,13491],{"class":45},[39,171489,70178],{"class":1319},[39,171491,52491],{"class":45},[39,171493,1849],{"class":56},[39,171495,13491],{"class":45},[39,171497,152417],{"class":1319},[39,171499,52491],{"class":45},[39,171501,2187],{"class":56},[39,171503,166097],{"class":45},[39,171505,171506],{"class":41,"line":2785},[39,171507,171508],{"class":45},"save_students(students)\n",[39,171510,171511,171513,171515,171518],{"class":41,"line":2790},[39,171512,31470],{"class":56},[39,171514,1221],{"class":45},[39,171516,171517],{"class":1319},"\"保存成功\"",[39,171519,209],{"class":45},[14,171521,171523],{"id":171522},"_814-易错点","8.14 易错点",[1171,171525,171526,171530,171536,171541,171548,171555],{},[1174,171527,171528,169789],{},[36,171529,1993],{},[1174,171531,171532,171533,29442],{},"读写中文要指定 ",[36,171534,171535],{},"encoding=\"utf-8\"",[1174,171537,171538,171539,29442],{},"打开文件后要关闭，推荐使用 ",[36,171540,108778],{},[1174,171542,171543,171544,171547],{},"读取大文件不要直接 ",[36,171545,171546],{},"read()"," 全部内容。",[1174,171549,171550,171551,171554],{},"Windows 写 CSV 时建议加 ",[36,171552,171553],{},"newline=\"\"","，避免空行。",[1174,171556,171557],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171559,171561],{"id":171560},"_815-本章练习","8.15 本章练习",[1171,171563,171564,171571,171576,171579,171582],{},[1174,171565,171566,171567,171570],{},"写入一个 ",[36,171568,171569],{},"students.txt","，每行保存一个学生姓名。",[1174,171572,105300,171573,171575],{},[36,171574,171569],{}," 并输出所有学生。",[1174,171577,171578],{},"把学生列表保存为 JSON 文件。",[1174,171580,171581],{},"从 JSON 文件读取学生数据，计算平均分。",[1174,171583,171584,171585,171588,171589,171592],{},"写一个日志函数 ",[36,171586,171587],{},"write_log(message)","，每次调用向 ",[36,171590,171591],{},"app.log"," 追加一行。",[1133,171594,171595],{},"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":34,"searchDepth":74,"depth":74,"links":171597},[171598,171599,171603,171604,171610,171611,171612,171613,171614,171615,171616,171617,171618,171619,171620],{"id":169109,"depth":74,"text":169110},{"id":169150,"depth":74,"text":169151,"children":171600},[171601,171602],{"id":169154,"depth":99,"text":169155},{"id":169188,"depth":99,"text":169189},{"id":169302,"depth":74,"text":169303},{"id":169395,"depth":74,"text":169396,"children":171605},[171606,171607,171608,171609],{"id":169399,"depth":99,"text":169400},{"id":169486,"depth":99,"text":169487},{"id":169556,"depth":99,"text":169557},{"id":169650,"depth":99,"text":169651},{"id":169720,"depth":74,"text":169721},{"id":169783,"depth":74,"text":169784},{"id":169944,"depth":74,"text":169945},{"id":170007,"depth":74,"text":170008},{"id":170123,"depth":74,"text":170124},{"id":170333,"depth":74,"text":170334},{"id":170645,"depth":74,"text":170646},{"id":171056,"depth":74,"text":171057},{"id":171274,"depth":74,"text":171275},{"id":171522,"depth":74,"text":171523},{"id":171560,"depth":74,"text":171561},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169101,"description":1142},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171627,"title":171628,"body":171629,"description":1142,"extension":1143,"meta":173815,"navigation":1145,"path":173816,"seo":173817,"stem":173818,"__hash__":173819},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171630,"toc":173782},[171631,171634,171638,171641,171644,171736,171738,171757,171762,171766,171769,171772,171801,171808,171811,171815,171818,171847,171849,171901,171907,171960,171964,172062,172065,172132,172136,172193,172195,172201,172205,172210,172216,172307,172312,172316,172319,172397,172400,172438,172442,172560,172563,172567,172570,172615,172618,172622,172627,172633,172683,172686,172717,172721,172725,172755,172759,172794,172798,172833,172873,172877,172893,172896,172900,172904,172983,172987,173028,173032,173087,173091,173125,173129,173159,173168,173175,173181,173238,173241,173249,173252,173256,173263,173266,173272,173275,173292,173297,173301,173307,173320,173323,173360,173363,173374,173377,173391,173394,173408,173412,173419,173452,173455,173457,173463,173466,173470,173472,173478,173483,173656,173660,173723,173727,173751,173755,173779],[10,171632,171628],{"id":171633},"_9-异常模块与包",[14,171635,171637],{"id":171636},"_91-什么是异常","9.1 什么是异常",[19,171639,171640],{},"异常是程序运行过程中出现的错误。",[19,171642,171643],{},"常见异常：",[1352,171645,171646,171655],{},[1355,171647,171648],{},[1358,171649,171650,171653],{},[1361,171651,171652],{},"异常",[1361,171654,26926],{},[1398,171656,171657,171667,171677,171686,171696,171706,171716,171726],{},[1358,171658,171659,171664],{},[1403,171660,171661],{},[36,171662,171663],{},"NameError",[1403,171665,171666],{},"使用了未定义变量",[1358,171668,171669,171674],{},[1403,171670,171671],{},[36,171672,171673],{},"TypeError",[1403,171675,171676],{},"类型不匹配",[1358,171678,171679,171683],{},[1403,171680,171681],{},[36,171682,155779],{},[1403,171684,171685],{},"值不合法",[1358,171687,171688,171693],{},[1403,171689,171690],{},[36,171691,171692],{},"IndexError",[1403,171694,171695],{},"列表索引越界",[1358,171697,171698,171703],{},[1403,171699,171700],{},[36,171701,171702],{},"KeyError",[1403,171704,171705],{},"字典 key 不存在",[1358,171707,171708,171713],{},[1403,171709,171710],{},[36,171711,171712],{},"FileNotFoundError",[1403,171714,171715],{},"文件不存在",[1358,171717,171718,171723],{},[1403,171719,171720],{},[36,171721,171722],{},"ZeroDivisionError",[1403,171724,171725],{},"除数为 0",[1358,171727,171728,171733],{},[1403,171729,171730],{},[36,171731,171732],{},"ImportError",[1403,171734,171735],{},"导入失败",[19,171737,16191],{},[29,171739,171741],{"className":31,"code":171740,"language":33,"meta":34,"style":34},"num = int(\"abc\")\n",[36,171742,171743],{"__ignoreMap":34},[39,171744,171745,171747,171749,171751,171753,171755],{"class":41,"line":42},[39,171746,156732],{"class":45},[39,171748,50],{"class":49},[39,171750,3440],{"class":56},[39,171752,1221],{"class":45},[39,171754,156825],{"class":1319},[39,171756,209],{"class":45},[19,171758,171759,171760,29442],{},"会触发 ",[36,171761,155779],{},[14,171763,171765],{"id":171764},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,171767,171768],{},"如果不处理异常，程序会直接终止。",[19,171770,171771],{},"例如用户输入年龄：",[29,171773,171775],{"className":31,"code":171774,"language":33,"meta":34,"style":34},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[36,171776,171777,171795],{"__ignoreMap":34},[39,171778,171779,171781,171783,171785,171787,171789,171791,171793],{"class":41,"line":42},[39,171780,147491],{"class":45},[39,171782,50],{"class":49},[39,171784,3440],{"class":56},[39,171786,1221],{"class":45},[39,171788,54875],{"class":56},[39,171790,1221],{"class":45},[39,171792,153339],{"class":1319},[39,171794,31552],{"class":45},[39,171796,171797,171799],{"class":41,"line":74},[39,171798,31470],{"class":56},[39,171800,156706],{"class":45},[19,171802,171803,171804,171807],{},"用户输入 ",[36,171805,171806],{},"abc","，程序就会报错退出。",[19,171809,171810],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171812,171814],{"id":171813},"_93-try-except","9.3 try except",[19,171816,171817],{},"基础语法：",[29,171819,171821],{"className":31,"code":171820,"language":33,"meta":34,"style":34},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[36,171822,171823,171830,171835,171842],{"__ignoreMap":34},[39,171824,171825,171828],{"class":41,"line":42},[39,171826,171827],{"class":49},"try",[39,171829,4797],{"class":45},[39,171831,171832],{"class":41,"line":74},[39,171833,171834],{"class":45},"    可能出错的代码\n",[39,171836,171837,171840],{"class":41,"line":99},[39,171838,171839],{"class":49},"except",[39,171841,4797],{"class":45},[39,171843,171844],{"class":41,"line":106},[39,171845,171846],{"class":45},"    出错后的处理代码\n",[19,171848,16191],{},[29,171850,171852],{"className":31,"code":171851,"language":33,"meta":34,"style":34},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[36,171853,171854,171860,171878,171884,171890],{"__ignoreMap":34},[39,171855,171856,171858],{"class":41,"line":42},[39,171857,171827],{"class":49},[39,171859,4797],{"class":45},[39,171861,171862,171864,171866,171868,171870,171872,171874,171876],{"class":41,"line":74},[39,171863,153331],{"class":45},[39,171865,50],{"class":49},[39,171867,3440],{"class":56},[39,171869,1221],{"class":45},[39,171871,54875],{"class":56},[39,171873,1221],{"class":45},[39,171875,153339],{"class":1319},[39,171877,31552],{"class":45},[39,171879,171880,171882],{"class":41,"line":99},[39,171881,32354],{"class":56},[39,171883,156706],{"class":45},[39,171885,171886,171888],{"class":41,"line":106},[39,171887,171839],{"class":49},[39,171889,4797],{"class":45},[39,171891,171892,171894,171896,171899],{"class":41,"line":112},[39,171893,32354],{"class":56},[39,171895,1221],{"class":45},[39,171897,171898],{"class":1319},"\"年龄必须是数字\"",[39,171900,209],{"class":45},[19,171902,171903,171904,171906],{},"不建议裸写 ",[36,171905,171839],{},"，最好指定异常类型。",[29,171908,171910],{"className":31,"code":171909,"language":33,"meta":34,"style":34},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[36,171911,171912,171918,171936,171942,171950],{"__ignoreMap":34},[39,171913,171914,171916],{"class":41,"line":42},[39,171915,171827],{"class":49},[39,171917,4797],{"class":45},[39,171919,171920,171922,171924,171926,171928,171930,171932,171934],{"class":41,"line":74},[39,171921,153331],{"class":45},[39,171923,50],{"class":49},[39,171925,3440],{"class":56},[39,171927,1221],{"class":45},[39,171929,54875],{"class":56},[39,171931,1221],{"class":45},[39,171933,153339],{"class":1319},[39,171935,31552],{"class":45},[39,171937,171938,171940],{"class":41,"line":99},[39,171939,32354],{"class":56},[39,171941,156706],{"class":45},[39,171943,171944,171946,171948],{"class":41,"line":106},[39,171945,171839],{"class":49},[39,171947,153171],{"class":56},[39,171949,4797],{"class":45},[39,171951,171952,171954,171956,171958],{"class":41,"line":112},[39,171953,32354],{"class":56},[39,171955,1221],{"class":45},[39,171957,171898],{"class":1319},[39,171959,209],{"class":45},[14,171961,171963],{"id":171962},"_94-捕获多个异常","9.4 捕获多个异常",[29,171965,171967],{"className":31,"code":171966,"language":33,"meta":34,"style":34},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[36,171968,171969,171975,171996,172016,172023,172031,172042,172051],{"__ignoreMap":34},[39,171970,171971,171973],{"class":41,"line":42},[39,171972,171827],{"class":49},[39,171974,4797],{"class":45},[39,171976,171977,171980,171982,171984,171986,171988,171990,171992,171994],{"class":41,"line":74},[39,171978,171979],{"class":45},"    nums ",[39,171981,50],{"class":49},[39,171983,53280],{"class":45},[39,171985,57],{"class":56},[39,171987,13491],{"class":45},[39,171989,63],{"class":56},[39,171991,13491],{"class":45},[39,171993,68],{"class":56},[39,171995,34301],{"class":45},[39,171997,171998,172001,172003,172005,172007,172009,172011,172014],{"class":41,"line":99},[39,171999,172000],{"class":45},"    index ",[39,172002,50],{"class":49},[39,172004,3440],{"class":56},[39,172006,1221],{"class":45},[39,172008,54875],{"class":56},[39,172010,1221],{"class":45},[39,172012,172013],{"class":1319},"\"请输入索引:\"",[39,172015,31552],{"class":45},[39,172017,172018,172020],{"class":41,"line":106},[39,172019,32354],{"class":56},[39,172021,172022],{"class":45},"(nums[index])\n",[39,172024,172025,172027,172029],{"class":41,"line":112},[39,172026,171839],{"class":49},[39,172028,153171],{"class":56},[39,172030,4797],{"class":45},[39,172032,172033,172035,172037,172040],{"class":41,"line":118},[39,172034,32354],{"class":56},[39,172036,1221],{"class":45},[39,172038,172039],{"class":1319},"\"索引必须是整数\"",[39,172041,209],{"class":45},[39,172043,172044,172046,172049],{"class":41,"line":413},[39,172045,171839],{"class":49},[39,172047,172048],{"class":56}," IndexError",[39,172050,4797],{"class":45},[39,172052,172053,172055,172057,172060],{"class":41,"line":419},[39,172054,32354],{"class":56},[39,172056,1221],{"class":45},[39,172058,172059],{"class":1319},"\"索引越界\"",[39,172061,209],{"class":45},[19,172063,172064],{},"多个异常使用相同处理逻辑：",[29,172066,172068],{"className":31,"code":172067,"language":33,"meta":34,"style":34},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[36,172069,172070,172076,172094,172107,172121],{"__ignoreMap":34},[39,172071,172072,172074],{"class":41,"line":42},[39,172073,171827],{"class":49},[39,172075,4797],{"class":45},[39,172077,172078,172080,172082,172084,172086,172088,172090,172092],{"class":41,"line":74},[39,172079,46648],{"class":45},[39,172081,50],{"class":49},[39,172083,3440],{"class":56},[39,172085,1221],{"class":45},[39,172087,54875],{"class":56},[39,172089,1221],{"class":45},[39,172091,156741],{"class":1319},[39,172093,31552],{"class":45},[39,172095,172096,172098,172100,172102,172104],{"class":41,"line":99},[39,172097,32354],{"class":56},[39,172099,1221],{"class":45},[39,172101,146],{"class":56},[39,172103,156991],{"class":49},[39,172105,172106],{"class":45}," num)\n",[39,172108,172109,172111,172113,172115,172117,172119],{"class":41,"line":106},[39,172110,171839],{"class":49},[39,172112,2716],{"class":45},[39,172114,155779],{"class":56},[39,172116,13491],{"class":45},[39,172118,171722],{"class":56},[39,172120,31841],{"class":45},[39,172122,172123,172125,172127,172130],{"class":41,"line":112},[39,172124,32354],{"class":56},[39,172126,1221],{"class":45},[39,172128,172129],{"class":1319},"\"输入不合法\"",[39,172131,209],{"class":45},[14,172133,172135],{"id":172134},"_95-获取异常信息","9.5 获取异常信息",[29,172137,172139],{"className":31,"code":172138,"language":33,"meta":34,"style":34},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[36,172140,172141,172147,172161,172172],{"__ignoreMap":34},[39,172142,172143,172145],{"class":41,"line":42},[39,172144,171827],{"class":49},[39,172146,4797],{"class":45},[39,172148,172149,172151,172153,172155,172157,172159],{"class":41,"line":74},[39,172150,46648],{"class":45},[39,172152,50],{"class":49},[39,172154,3440],{"class":56},[39,172156,1221],{"class":45},[39,172158,156825],{"class":1319},[39,172160,209],{"class":45},[39,172162,172163,172165,172167,172169],{"class":41,"line":99},[39,172164,171839],{"class":49},[39,172166,153171],{"class":56},[39,172168,65658],{"class":49},[39,172170,172171],{"class":45}," e:\n",[39,172173,172174,172176,172178,172180,172183,172185,172187,172189,172191],{"class":41,"line":106},[39,172175,32354],{"class":56},[39,172177,1221],{"class":45},[39,172179,1270],{"class":49},[39,172181,172182],{"class":1319},"\"出错了:",[39,172184,2094],{"class":56},[39,172186,1290],{"class":45},[39,172188,2144],{"class":56},[39,172190,1462],{"class":1319},[39,172192,209],{"class":45},[19,172194,147402],{},[29,172196,172199],{"className":172197,"code":172198,"language":6244,"meta":34},[6242],"出错了:invalid literal for int() with base 10: 'abc'\n",[36,172200,172198],{"__ignoreMap":34},[14,172202,172204],{"id":172203},"_96-else和finally","9.6 else和finally",[19,172206,172207,172209],{},[36,172208,2759],{},"：没有异常时执行。",[19,172211,172212,172215],{},[36,172213,172214],{},"finally","：无论是否异常都会执行。",[29,172217,172219],{"className":31,"code":172218,"language":33,"meta":34,"style":34},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[36,172220,172221,172227,172245,172253,172263,172269,172290,172296],{"__ignoreMap":34},[39,172222,172223,172225],{"class":41,"line":42},[39,172224,171827],{"class":49},[39,172226,4797],{"class":45},[39,172228,172229,172231,172233,172235,172237,172239,172241,172243],{"class":41,"line":74},[39,172230,46648],{"class":45},[39,172232,50],{"class":49},[39,172234,3440],{"class":56},[39,172236,1221],{"class":45},[39,172238,54875],{"class":56},[39,172240,1221],{"class":45},[39,172242,156741],{"class":1319},[39,172244,31552],{"class":45},[39,172246,172247,172249,172251],{"class":41,"line":99},[39,172248,171839],{"class":49},[39,172250,153171],{"class":56},[39,172252,4797],{"class":45},[39,172254,172255,172257,172259,172261],{"class":41,"line":106},[39,172256,32354],{"class":56},[39,172258,1221],{"class":45},[39,172260,154159],{"class":1319},[39,172262,209],{"class":45},[39,172264,172265,172267],{"class":41,"line":112},[39,172266,2759],{"class":49},[39,172268,4797],{"class":45},[39,172270,172271,172273,172275,172277,172280,172282,172284,172286,172288],{"class":41,"line":118},[39,172272,32354],{"class":56},[39,172274,1221],{"class":45},[39,172276,1270],{"class":49},[39,172278,172279],{"class":1319},"\"输入正确:",[39,172281,2094],{"class":56},[39,172283,2723],{"class":45},[39,172285,2144],{"class":56},[39,172287,1462],{"class":1319},[39,172289,209],{"class":45},[39,172291,172292,172294],{"class":41,"line":413},[39,172293,172214],{"class":49},[39,172295,4797],{"class":45},[39,172297,172298,172300,172302,172305],{"class":41,"line":419},[39,172299,32354],{"class":56},[39,172301,1221],{"class":45},[39,172303,172304],{"class":1319},"\"程序结束\"",[39,172306,209],{"class":45},[19,172308,172309,172311],{},[36,172310,172214],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172313,172315],{"id":172314},"_97-抛出异常","9.7 抛出异常",[19,172317,172318],{},"程序可以主动抛出异常。",[29,172320,172322],{"className":31,"code":172321,"language":33,"meta":34,"style":34},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[36,172323,172324,172333,172345,172358,172378,172382,172386],{"__ignoreMap":34},[39,172325,172326,172328,172331],{"class":41,"line":42},[39,172327,33002],{"class":49},[39,172329,172330],{"class":3021}," set_age",[39,172332,162360],{"class":45},[39,172334,172335,172337,172339,172341,172343],{"class":41,"line":74},[39,172336,4159],{"class":49},[39,172338,16763],{"class":45},[39,172340,2108],{"class":49},[39,172342,5151],{"class":56},[39,172344,4797],{"class":45},[39,172346,172347,172349,172351,172353,172356],{"class":41,"line":99},[39,172348,104377],{"class":49},[39,172350,153171],{"class":56},[39,172352,1221],{"class":45},[39,172354,172355],{"class":1319},"\"年龄不能为负数\"",[39,172357,209],{"class":45},[39,172359,172360,172362,172364,172366,172368,172370,172372,172374,172376],{"class":41,"line":106},[39,172361,32354],{"class":56},[39,172363,1221],{"class":45},[39,172365,1270],{"class":49},[39,172367,162928],{"class":1319},[39,172369,2094],{"class":56},[39,172371,71275],{"class":45},[39,172373,2144],{"class":56},[39,172375,1462],{"class":1319},[39,172377,209],{"class":45},[39,172379,172380],{"class":41,"line":112},[39,172381,3458],{"emptyLinePlaceholder":1145},[39,172383,172384],{"class":41,"line":118},[39,172385,3458],{"emptyLinePlaceholder":1145},[39,172387,172388,172391,172393,172395],{"class":41,"line":413},[39,172389,172390],{"class":45},"set_age(",[39,172392,1732],{"class":49},[39,172394,57],{"class":56},[39,172396,209],{"class":45},[19,172398,172399],{},"调用者可以捕获：",[29,172401,172403],{"className":31,"code":172402,"language":33,"meta":34,"style":34},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[36,172404,172405,172411,172422,172432],{"__ignoreMap":34},[39,172406,172407,172409],{"class":41,"line":42},[39,172408,171827],{"class":49},[39,172410,4797],{"class":45},[39,172412,172413,172416,172418,172420],{"class":41,"line":74},[39,172414,172415],{"class":45},"    set_age(",[39,172417,1732],{"class":49},[39,172419,57],{"class":56},[39,172421,209],{"class":45},[39,172423,172424,172426,172428,172430],{"class":41,"line":99},[39,172425,171839],{"class":49},[39,172427,153171],{"class":56},[39,172429,65658],{"class":49},[39,172431,172171],{"class":45},[39,172433,172434,172436],{"class":41,"line":106},[39,172435,32354],{"class":56},[39,172437,68053],{"class":45},[14,172439,172441],{"id":172440},"_98-自定义异常","9.8 自定义异常",[29,172443,172445],{"className":31,"code":172444,"language":33,"meta":34,"style":34},"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",[36,172446,172447,172461,172465,172469,172473,172481,172491,172502,172512,172516,172520,172526,172543,172554],{"__ignoreMap":34},[39,172448,172449,172451,172454,172456,172459],{"class":41,"line":42},[39,172450,15750],{"class":49},[39,172452,172453],{"class":3021}," BalanceNotEnoughError",[39,172455,1221],{"class":45},[39,172457,172458],{"class":56},"Exception",[39,172460,31841],{"class":45},[39,172462,172463],{"class":41,"line":74},[39,172464,150482],{"class":49},[39,172466,172467],{"class":41,"line":99},[39,172468,3458],{"emptyLinePlaceholder":1145},[39,172470,172471],{"class":41,"line":106},[39,172472,3458],{"emptyLinePlaceholder":1145},[39,172474,172475,172477,172479],{"class":41,"line":112},[39,172476,33002],{"class":49},[39,172478,151131],{"class":3021},[39,172480,163757],{"class":45},[39,172482,172483,172485,172487,172489],{"class":41,"line":118},[39,172484,4159],{"class":49},[39,172486,151087],{"class":45},[39,172488,2158],{"class":49},[39,172490,163534],{"class":45},[39,172492,172493,172495,172498,172500],{"class":41,"line":413},[39,172494,104377],{"class":49},[39,172496,172497],{"class":45}," BalanceNotEnoughError(",[39,172499,151182],{"class":1319},[39,172501,209],{"class":45},[39,172503,172504,172506,172508,172510],{"class":41,"line":419},[39,172505,5148],{"class":49},[39,172507,163764],{"class":45},[39,172509,1732],{"class":49},[39,172511,151120],{"class":45},[39,172513,172514],{"class":41,"line":425},[39,172515,3458],{"emptyLinePlaceholder":1145},[39,172517,172518],{"class":41,"line":443},[39,172519,3458],{"emptyLinePlaceholder":1145},[39,172521,172522,172524],{"class":41,"line":449},[39,172523,171827],{"class":49},[39,172525,4797],{"class":45},[39,172527,172528,172530,172532,172535,172537,172539,172541],{"class":41,"line":455},[39,172529,163435],{"class":45},[39,172531,50],{"class":49},[39,172533,172534],{"class":45}," withdraw(",[39,172536,1519],{"class":56},[39,172538,13491],{"class":45},[39,172540,2780],{"class":56},[39,172542,209],{"class":45},[39,172544,172545,172547,172550,172552],{"class":41,"line":461},[39,172546,171839],{"class":49},[39,172548,172549],{"class":45}," BalanceNotEnoughError ",[39,172551,32438],{"class":49},[39,172553,172171],{"class":45},[39,172555,172556,172558],{"class":41,"line":475},[39,172557,32354],{"class":56},[39,172559,68053],{"class":45},[19,172561,172562],{},"入门阶段大多数情况使用内置异常即可。",[14,172564,172566],{"id":172565},"_99-traceback","9.9 traceback",[19,172568,172569],{},"调试时可以输出完整异常堆栈。",[29,172571,172573],{"className":31,"code":172572,"language":33,"meta":34,"style":34},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[36,172574,172575,172582,172586,172592,172602,172610],{"__ignoreMap":34},[39,172576,172577,172579],{"class":41,"line":42},[39,172578,31447],{"class":49},[39,172580,172581],{"class":45}," traceback\n",[39,172583,172584],{"class":41,"line":74},[39,172585,3458],{"emptyLinePlaceholder":1145},[39,172587,172588,172590],{"class":41,"line":99},[39,172589,171827],{"class":49},[39,172591,4797],{"class":45},[39,172593,172594,172596,172598,172600],{"class":41,"line":106},[39,172595,3043],{"class":56},[39,172597,1221],{"class":45},[39,172599,156825],{"class":1319},[39,172601,209],{"class":45},[39,172603,172604,172606,172608],{"class":41,"line":112},[39,172605,171839],{"class":49},[39,172607,153171],{"class":56},[39,172609,4797],{"class":45},[39,172611,172612],{"class":41,"line":118},[39,172613,172614],{"class":45},"    traceback.print_exc()\n",[19,172616,172617],{},"日志系统中常把异常堆栈记录到文件。",[14,172619,172621],{"id":172620},"_910-什么是模块","9.10 什么是模块",[19,172623,172624,172625,126928],{},"模块就是一个 ",[36,172626,147297],{},[19,172628,172629,172630,25675],{},"例如创建 ",[36,172631,172632],{},"my_math.py",[29,172634,172636],{"className":31,"code":172635,"language":33,"meta":34,"style":34},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[36,172637,172638,172646,172656,172660,172664,172673],{"__ignoreMap":34},[39,172639,172640,172642,172644],{"class":41,"line":42},[39,172641,33002],{"class":49},[39,172643,6266],{"class":3021},[39,172645,152038],{"class":45},[39,172647,172648,172650,172652,172654],{"class":41,"line":74},[39,172649,5148],{"class":49},[39,172651,11925],{"class":45},[39,172653,1682],{"class":49},[39,172655,152049],{"class":45},[39,172657,172658],{"class":41,"line":99},[39,172659,3458],{"emptyLinePlaceholder":1145},[39,172661,172662],{"class":41,"line":106},[39,172663,3458],{"emptyLinePlaceholder":1145},[39,172665,172666,172668,172671],{"class":41,"line":112},[39,172667,33002],{"class":49},[39,172669,172670],{"class":3021}," sub",[39,172672,152038],{"class":45},[39,172674,172675,172677,172679,172681],{"class":41,"line":118},[39,172676,5148],{"class":49},[39,172678,11925],{"class":45},[39,172680,1732],{"class":49},[39,172682,152049],{"class":45},[19,172684,172685],{},"在另一个文件中导入：",[29,172687,172689],{"className":31,"code":172688,"language":33,"meta":34,"style":34},"import my_math\n\nprint(my_math.add(1, 2))\n",[36,172690,172691,172698,172702],{"__ignoreMap":34},[39,172692,172693,172695],{"class":41,"line":42},[39,172694,31447],{"class":49},[39,172696,172697],{"class":45}," my_math\n",[39,172699,172700],{"class":41,"line":74},[39,172701,3458],{"emptyLinePlaceholder":1145},[39,172703,172704,172706,172709,172711,172713,172715],{"class":41,"line":99},[39,172705,31470],{"class":56},[39,172707,172708],{"class":45},"(my_math.add(",[39,172710,57],{"class":56},[39,172712,13491],{"class":45},[39,172714,63],{"class":56},[39,172716,31552],{"class":45},[14,172718,172720],{"id":172719},"_911-import导入","9.11 import导入",[1188,172722,172724],{"id":172723},"_9111-导入模块","9.11.1 导入模块",[29,172726,172728],{"className":31,"code":172727,"language":33,"meta":34,"style":34},"import random\n\nprint(random.randint(1, 10))\n",[36,172729,172730,172736,172740],{"__ignoreMap":34},[39,172731,172732,172734],{"class":41,"line":42},[39,172733,31447],{"class":49},[39,172735,46383],{"class":45},[39,172737,172738],{"class":41,"line":74},[39,172739,3458],{"emptyLinePlaceholder":1145},[39,172741,172742,172744,172747,172749,172751,172753],{"class":41,"line":99},[39,172743,31470],{"class":56},[39,172745,172746],{"class":45},"(random.randint(",[39,172748,57],{"class":56},[39,172750,13491],{"class":45},[39,172752,146],{"class":56},[39,172754,31552],{"class":45},[1188,172756,172758],{"id":172757},"_9112-导入指定内容","9.11.2 导入指定内容",[29,172760,172762],{"className":31,"code":172761,"language":33,"meta":34,"style":34},"from random import randint\n\nprint(randint(1, 10))\n",[36,172763,172764,172775,172779],{"__ignoreMap":34},[39,172765,172766,172768,172770,172772],{"class":41,"line":42},[39,172767,31792],{"class":49},[39,172769,58850],{"class":45},[39,172771,31447],{"class":49},[39,172773,172774],{"class":45}," randint\n",[39,172776,172777],{"class":41,"line":74},[39,172778,3458],{"emptyLinePlaceholder":1145},[39,172780,172781,172783,172786,172788,172790,172792],{"class":41,"line":99},[39,172782,31470],{"class":56},[39,172784,172785],{"class":45},"(randint(",[39,172787,57],{"class":56},[39,172789,13491],{"class":45},[39,172791,146],{"class":56},[39,172793,31552],{"class":45},[1188,172795,172797],{"id":172796},"_9113-起别名","9.11.3 起别名",[29,172799,172801],{"className":31,"code":172800,"language":33,"meta":34,"style":34},"import random as rd\n\nprint(rd.randint(1, 10))\n",[36,172802,172803,172814,172818],{"__ignoreMap":34},[39,172804,172805,172807,172809,172811],{"class":41,"line":42},[39,172806,31447],{"class":49},[39,172808,58850],{"class":45},[39,172810,32438],{"class":49},[39,172812,172813],{"class":45}," rd\n",[39,172815,172816],{"class":41,"line":74},[39,172817,3458],{"emptyLinePlaceholder":1145},[39,172819,172820,172822,172825,172827,172829,172831],{"class":41,"line":99},[39,172821,31470],{"class":56},[39,172823,172824],{"class":45},"(rd.randint(",[39,172826,57],{"class":56},[39,172828,13491],{"class":45},[39,172830,146],{"class":56},[39,172832,31552],{"class":45},[29,172834,172836],{"className":31,"code":172835,"language":33,"meta":34,"style":34},"from random import randint as rint\n\nprint(rint(1, 10))\n",[36,172837,172838,172854,172858],{"__ignoreMap":34},[39,172839,172840,172842,172844,172846,172849,172851],{"class":41,"line":42},[39,172841,31792],{"class":49},[39,172843,58850],{"class":45},[39,172845,31447],{"class":49},[39,172847,172848],{"class":45}," randint ",[39,172850,32438],{"class":49},[39,172852,172853],{"class":45}," rint\n",[39,172855,172856],{"class":41,"line":74},[39,172857,3458],{"emptyLinePlaceholder":1145},[39,172859,172860,172862,172865,172867,172869,172871],{"class":41,"line":99},[39,172861,31470],{"class":56},[39,172863,172864],{"class":45},"(rint(",[39,172866,57],{"class":56},[39,172868,13491],{"class":45},[39,172870,146],{"class":56},[39,172872,31552],{"class":45},[1188,172874,172876],{"id":172875},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[29,172878,172880],{"className":31,"code":172879,"language":33,"meta":34,"style":34},"from random import *\n",[36,172881,172882],{"__ignoreMap":34},[39,172883,172884,172886,172888,172890],{"class":41,"line":42},[39,172885,31792],{"class":49},[39,172887,58850],{"class":45},[39,172889,31447],{"class":49},[39,172891,172892],{"class":49}," *\n",[19,172894,172895],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172897,172899],{"id":172898},"_912-常用内置模块","9.12 常用内置模块",[1188,172901,172903],{"id":172902},"_9121-random","9.12.1 random",[29,172905,172907],{"className":31,"code":172906,"language":33,"meta":34,"style":34},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[36,172908,172909,172915,172919,172933,172952],{"__ignoreMap":34},[39,172910,172911,172913],{"class":41,"line":42},[39,172912,31447],{"class":49},[39,172914,46383],{"class":45},[39,172916,172917],{"class":41,"line":74},[39,172918,3458],{"emptyLinePlaceholder":1145},[39,172920,172921,172923,172925,172927,172929,172931],{"class":41,"line":99},[39,172922,31470],{"class":56},[39,172924,172746],{"class":45},[39,172926,57],{"class":56},[39,172928,13491],{"class":45},[39,172930,146],{"class":56},[39,172932,31552],{"class":45},[39,172934,172935,172937,172940,172942,172944,172946,172948,172950],{"class":41,"line":106},[39,172936,31470],{"class":56},[39,172938,172939],{"class":45},"(random.choice([",[39,172941,150833],{"class":1319},[39,172943,13491],{"class":45},[39,172945,151881],{"class":1319},[39,172947,13491],{"class":45},[39,172949,160676],{"class":1319},[39,172951,34198],{"class":45},[39,172953,172954,172956,172959,172961,172963,172965,172967,172969,172971,172973,172975,172977,172979,172981],{"class":41,"line":112},[39,172955,31470],{"class":56},[39,172957,172958],{"class":45},"(random.sample([",[39,172960,57],{"class":56},[39,172962,13491],{"class":45},[39,172964,63],{"class":56},[39,172966,13491],{"class":45},[39,172968,68],{"class":56},[39,172970,13491],{"class":45},[39,172972,84],{"class":56},[39,172974,13491],{"class":45},[39,172976,89],{"class":56},[39,172978,113147],{"class":45},[39,172980,63],{"class":56},[39,172982,31552],{"class":45},[1188,172984,172986],{"id":172985},"_9122-time","9.12.2 time",[29,172988,172990],{"className":31,"code":172989,"language":33,"meta":34,"style":34},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[36,172991,172992,172998,173002,173009,173017],{"__ignoreMap":34},[39,172993,172994,172996],{"class":41,"line":42},[39,172995,31447],{"class":49},[39,172997,32884],{"class":45},[39,172999,173000],{"class":41,"line":74},[39,173001,3458],{"emptyLinePlaceholder":1145},[39,173003,173004,173006],{"class":41,"line":99},[39,173005,31470],{"class":56},[39,173007,173008],{"class":45},"(time.time())\n",[39,173010,173011,173013,173015],{"class":41,"line":106},[39,173012,96121],{"class":45},[39,173014,57],{"class":56},[39,173016,209],{"class":45},[39,173018,173019,173021,173023,173026],{"class":41,"line":112},[39,173020,31470],{"class":56},[39,173022,1221],{"class":45},[39,173024,173025],{"class":1319},"\"1秒后执行\"",[39,173027,209],{"class":45},[1188,173029,173031],{"id":173030},"_9123-datetime","9.12.3 datetime",[29,173033,173035],{"className":31,"code":173034,"language":33,"meta":34,"style":34},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[36,173036,173037,173049,173053,173063,173070],{"__ignoreMap":34},[39,173038,173039,173041,173044,173046],{"class":41,"line":42},[39,173040,31792],{"class":49},[39,173042,173043],{"class":45}," datetime ",[39,173045,31447],{"class":49},[39,173047,173048],{"class":45}," datetime\n",[39,173050,173051],{"class":41,"line":74},[39,173052,3458],{"emptyLinePlaceholder":1145},[39,173054,173055,173058,173060],{"class":41,"line":99},[39,173056,173057],{"class":45},"now ",[39,173059,50],{"class":49},[39,173061,173062],{"class":45}," datetime.now()\n",[39,173064,173065,173067],{"class":41,"line":106},[39,173066,31470],{"class":56},[39,173068,173069],{"class":45},"(now)\n",[39,173071,173072,173074,173077,173080,173082,173085],{"class":41,"line":112},[39,173073,31470],{"class":56},[39,173075,173076],{"class":45},"(now.strftime(",[39,173078,173079],{"class":1319},"\"%Y-%m-",[39,173081,157636],{"class":56},[39,173083,173084],{"class":1319}," %H:%M:%S\"",[39,173086,31552],{"class":45},[1188,173088,173090],{"id":173089},"_9124-os","9.12.4 os",[29,173092,173094],{"className":31,"code":173093,"language":33,"meta":34,"style":34},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[36,173095,173096,173102,173106,173113],{"__ignoreMap":34},[39,173097,173098,173100],{"class":41,"line":42},[39,173099,31447],{"class":49},[39,173101,46360],{"class":45},[39,173103,173104],{"class":41,"line":74},[39,173105,3458],{"emptyLinePlaceholder":1145},[39,173107,173108,173110],{"class":41,"line":99},[39,173109,31470],{"class":56},[39,173111,173112],{"class":45},"(os.getcwd())\n",[39,173114,173115,173117,173120,173123],{"class":41,"line":106},[39,173116,31470],{"class":56},[39,173118,173119],{"class":45},"(os.listdir(",[39,173121,173122],{"class":1319},"\".\"",[39,173124,31552],{"class":45},[1188,173126,173128],{"id":173127},"_9125-sys","9.12.5 sys",[29,173130,173132],{"className":31,"code":173131,"language":33,"meta":34,"style":34},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[36,173133,173134,173141,173145,173152],{"__ignoreMap":34},[39,173135,173136,173138],{"class":41,"line":42},[39,173137,31447],{"class":49},[39,173139,173140],{"class":45}," sys\n",[39,173142,173143],{"class":41,"line":74},[39,173144,3458],{"emptyLinePlaceholder":1145},[39,173146,173147,173149],{"class":41,"line":99},[39,173148,31470],{"class":56},[39,173150,173151],{"class":45},"(sys.version)\n",[39,173153,173154,173156],{"class":41,"line":106},[39,173155,31470],{"class":56},[39,173157,173158],{"class":45},"(sys.path)\n",[14,173160,173162,173163,173165,173166,1462],{"id":173161},"_913-if-name-main","9.13 if ",[304,173164,80864],{}," == \"",[304,173167,103003],{},[19,173169,173170,173171,173174],{},"模块被直接运行和被导入时，",[36,173172,173173],{},"__name__"," 的值不同。",[19,173176,173177,173178,25675],{},"创建 ",[36,173179,173180],{},"my_module.py",[29,173182,173184],{"className":31,"code":173183,"language":33,"meta":34,"style":34},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[36,173185,173186,173194,173204,173208,173212,173224],{"__ignoreMap":34},[39,173187,173188,173190,173192],{"class":41,"line":42},[39,173189,33002],{"class":49},[39,173191,6266],{"class":3021},[39,173193,152038],{"class":45},[39,173195,173196,173198,173200,173202],{"class":41,"line":74},[39,173197,5148],{"class":49},[39,173199,11925],{"class":45},[39,173201,1682],{"class":49},[39,173203,152049],{"class":45},[39,173205,173206],{"class":41,"line":99},[39,173207,3458],{"emptyLinePlaceholder":1145},[39,173209,173210],{"class":41,"line":106},[39,173211,3458],{"emptyLinePlaceholder":1145},[39,173213,173214,173216,173218,173220,173222],{"class":41,"line":112},[39,173215,2596],{"class":49},[39,173217,32275],{"class":56},[39,173219,102504],{"class":49},[39,173221,102507],{"class":1319},[39,173223,4797],{"class":45},[39,173225,173226,173228,173230,173232,173234,173236],{"class":41,"line":118},[39,173227,32354],{"class":56},[39,173229,167545],{"class":45},[39,173231,57],{"class":56},[39,173233,13491],{"class":45},[39,173235,63],{"class":56},[39,173237,31552],{"class":45},[19,173239,173240],{},"作用：",[1171,173242,173243,173246],{},[1174,173244,173245],{},"直接运行该文件时，执行测试代码。",[1174,173247,173248],{},"被其他文件导入时，不执行测试代码。",[19,173250,173251],{},"这是写模块时很常用的习惯。",[14,173253,173255],{"id":173254},"_914-包","9.14 包",[19,173257,173258,173259,173262],{},"包是包含 ",[36,173260,173261],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173264,173265],{},"目录结构：",[29,173267,173270],{"className":173268,"code":173269,"language":6244,"meta":34},[6242],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[36,173271,173269],{"__ignoreMap":34},[19,173273,173274],{},"导入：",[29,173276,173278],{"className":31,"code":173277,"language":33,"meta":34,"style":34},"from utils.file_utils import read_file\n",[36,173279,173280],{"__ignoreMap":34},[39,173281,173282,173284,173287,173289],{"class":41,"line":42},[39,173283,31792],{"class":49},[39,173285,173286],{"class":45}," utils.file_utils ",[39,173288,31447],{"class":49},[39,173290,173291],{"class":45}," read_file\n",[19,173293,173294,173296],{},[36,173295,173261],{}," 可以为空，也可以写包初始化逻辑。",[14,173298,173300],{"id":173299},"_915-第三方包","9.15 第三方包",[19,173302,173303,173304,173306],{},"第三方包通过 ",[36,173305,24887],{}," 安装。",[29,173308,173310],{"className":24878,"code":173309,"language":24880,"meta":34,"style":34},"pip install requests\n",[36,173311,173312],{"__ignoreMap":34},[39,173313,173314,173316,173318],{"class":41,"line":42},[39,173315,24887],{"class":3021},[39,173317,24890],{"class":1319},[39,173319,147043],{"class":1319},[19,173321,173322],{},"使用：",[29,173324,173326],{"className":31,"code":173325,"language":33,"meta":34,"style":34},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[36,173327,173328,173334,173338,173353],{"__ignoreMap":34},[39,173329,173330,173332],{"class":41,"line":42},[39,173331,31447],{"class":49},[39,173333,147043],{"class":45},[39,173335,173336],{"class":41,"line":74},[39,173337,3458],{"emptyLinePlaceholder":1145},[39,173339,173340,173343,173345,173348,173351],{"class":41,"line":99},[39,173341,173342],{"class":45},"response ",[39,173344,50],{"class":49},[39,173346,173347],{"class":45}," requests.get(",[39,173349,173350],{"class":1319},"\"https:\u002F\u002Fwww.example.com\"",[39,173352,209],{"class":45},[39,173354,173355,173357],{"class":41,"line":106},[39,173356,31470],{"class":56},[39,173358,173359],{"class":45},"(response.status_code)\n",[19,173361,173362],{},"查看已安装包：",[29,173364,173366],{"className":24878,"code":173365,"language":24880,"meta":34,"style":34},"pip list\n",[36,173367,173368],{"__ignoreMap":34},[39,173369,173370,173372],{"class":41,"line":42},[39,173371,24887],{"class":3021},[39,173373,119900],{"class":1319},[19,173375,173376],{},"导出项目依赖：",[29,173378,173379],{"className":24878,"code":147238,"language":24880,"meta":34,"style":34},[36,173380,173381],{"__ignoreMap":34},[39,173382,173383,173385,173387,173389],{"class":41,"line":42},[39,173384,24887],{"class":3021},[39,173386,147247],{"class":1319},[39,173388,27279],{"class":49},[39,173390,147252],{"class":1319},[19,173392,173393],{},"安装项目依赖：",[29,173395,173396],{"className":24878,"code":147258,"language":24880,"meta":34,"style":34},[36,173397,173398],{"__ignoreMap":34},[39,173399,173400,173402,173404,173406],{"class":41,"line":42},[39,173401,24887],{"class":3021},[39,173403,24890],{"class":1319},[39,173405,120584],{"class":56},[39,173407,147252],{"class":1319},[14,173409,173411],{"id":173410},"_916-模块搜索路径","9.16 模块搜索路径",[19,173413,173414,173415,173418],{},"Python 导入模块时会在 ",[36,173416,173417],{},"sys.path"," 中查找。",[29,173420,173422],{"className":31,"code":173421,"language":33,"meta":34,"style":34},"import sys\n\nfor path in sys.path:\n    print(path)\n",[36,173423,173424,173430,173434,173446],{"__ignoreMap":34},[39,173425,173426,173428],{"class":41,"line":42},[39,173427,31447],{"class":49},[39,173429,173140],{"class":45},[39,173431,173432],{"class":41,"line":74},[39,173433,3458],{"emptyLinePlaceholder":1145},[39,173435,173436,173438,173441,173443],{"class":41,"line":99},[39,173437,4083],{"class":49},[39,173439,173440],{"class":45}," path ",[39,173442,27100],{"class":49},[39,173444,173445],{"class":45}," sys.path:\n",[39,173447,173448,173450],{"class":41,"line":106},[39,173449,32354],{"class":56},[39,173451,170174],{"class":45},[19,173453,173454],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173456,158568],{},[29,173458,173461],{"className":173459,"code":173460,"language":6244,"meta":34},[6242],"random.py\njson.py\ntime.py\n",[36,173462,173460],{"__ignoreMap":34},[19,173464,173465],{},"这些文件名可能导致导入异常。",[14,173467,173469],{"id":173468},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173471,173265],{},[29,173473,173476],{"className":173474,"code":173475,"language":6244,"meta":34},[6242],"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",[36,173477,173475],{"__ignoreMap":34},[19,173479,173480,25675],{},[36,173481,173482],{},"utils\u002Ffile_utils.py",[29,173484,173486],{"className":31,"code":173485,"language":33,"meta":34,"style":34},"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",[36,173487,173488,173494,173504,173508,173512,173522,173532,173540,173546,173550,173577,173587,173591,173595,173605,173631],{"__ignoreMap":34},[39,173489,173490,173492],{"class":41,"line":42},[39,173491,31447],{"class":49},[39,173493,148036],{"class":45},[39,173495,173496,173498,173500,173502],{"class":41,"line":74},[39,173497,31792],{"class":49},[39,173499,109256],{"class":45},[39,173501,31447],{"class":49},[39,173503,109261],{"class":45},[39,173505,173506],{"class":41,"line":99},[39,173507,3458],{"emptyLinePlaceholder":1145},[39,173509,173510],{"class":41,"line":106},[39,173511,3458],{"emptyLinePlaceholder":1145},[39,173513,173514,173516,173519],{"class":41,"line":112},[39,173515,33002],{"class":49},[39,173517,173518],{"class":3021}," read_json",[39,173520,173521],{"class":45},"(path):\n",[39,173523,173524,173527,173529],{"class":41,"line":118},[39,173525,173526],{"class":45},"    path ",[39,173528,50],{"class":49},[39,173530,173531],{"class":45}," Path(path)\n",[39,173533,173534,173536,173538],{"class":41,"line":413},[39,173535,4159],{"class":49},[39,173537,39985],{"class":49},[39,173539,170255],{"class":45},[39,173541,173542,173544],{"class":41,"line":419},[39,173543,15808],{"class":49},[39,173545,52892],{"class":45},[39,173547,173548],{"class":41,"line":425},[39,173549,3458],{"emptyLinePlaceholder":1145},[39,173551,173552,173554,173556,173559,173561,173563,173565,173567,173569,173571,173573,173575],{"class":41,"line":443},[39,173553,35233],{"class":49},[39,173555,147736],{"class":56},[39,173557,173558],{"class":45},"(path, ",[39,173560,147746],{"class":1319},[39,173562,13491],{"class":45},[39,173564,147751],{"class":254},[39,173566,50],{"class":49},[39,173568,147756],{"class":1319},[39,173570,14770],{"class":45},[39,173572,32438],{"class":49},[39,173574,149098],{"class":254},[39,173576,4797],{"class":45},[39,173578,173579,173581,173583,173585],{"class":41,"line":449},[39,173580,15808],{"class":49},[39,173582,149109],{"class":45},[39,173584,46409],{"class":254},[39,173586,209],{"class":45},[39,173588,173589],{"class":41,"line":455},[39,173590,3458],{"emptyLinePlaceholder":1145},[39,173592,173593],{"class":41,"line":461},[39,173594,3458],{"emptyLinePlaceholder":1145},[39,173596,173597,173599,173602],{"class":41,"line":475},[39,173598,33002],{"class":49},[39,173600,173601],{"class":3021}," write_json",[39,173603,173604],{"class":45},"(path, data):\n",[39,173606,173607,173609,173611,173613,173615,173617,173619,173621,173623,173625,173627,173629],{"class":41,"line":665},[39,173608,35233],{"class":49},[39,173610,147736],{"class":56},[39,173612,173558],{"class":45},[39,173614,152921],{"class":1319},[39,173616,13491],{"class":45},[39,173618,147751],{"class":254},[39,173620,50],{"class":49},[39,173622,147756],{"class":1319},[39,173624,14770],{"class":45},[39,173626,32438],{"class":49},[39,173628,149098],{"class":254},[39,173630,4797],{"class":45},[39,173632,173633,173636,173638,173640,173642,173644,173646,173648,173650,173652,173654],{"class":41,"line":671},[39,173634,173635],{"class":45},"        json.dump(data, ",[39,173637,46409],{"class":254},[39,173639,13491],{"class":45},[39,173641,148082],{"class":254},[39,173643,50],{"class":49},[39,173645,35042],{"class":56},[39,173647,13491],{"class":45},[39,173649,152957],{"class":254},[39,173651,50],{"class":49},[39,173653,63],{"class":56},[39,173655,209],{"class":45},[19,173657,173658,25675],{},[36,173659,155552],{},[29,173661,173663],{"className":31,"code":173662,"language":33,"meta":34,"style":34},"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",[36,173664,173665,173676,173680,173693,173713],{"__ignoreMap":34},[39,173666,173667,173669,173671,173673],{"class":41,"line":42},[39,173668,31792],{"class":49},[39,173670,173286],{"class":45},[39,173672,31447],{"class":49},[39,173674,173675],{"class":45}," read_json, write_json\n",[39,173677,173678],{"class":41,"line":74},[39,173679,3458],{"emptyLinePlaceholder":1145},[39,173681,173682,173684,173686,173689,173691],{"class":41,"line":99},[39,173683,160661],{"class":45},[39,173685,50],{"class":49},[39,173687,173688],{"class":45}," read_json(",[39,173690,152776],{"class":1319},[39,173692,209],{"class":45},[39,173694,173695,173697,173699,173701,173703,173705,173707,173709,173711],{"class":41,"line":106},[39,173696,171479],{"class":45},[39,173698,63733],{"class":1319},[39,173700,52491],{"class":45},[39,173702,150833],{"class":1319},[39,173704,13491],{"class":45},[39,173706,152417],{"class":1319},[39,173708,52491],{"class":45},[39,173710,2187],{"class":56},[39,173712,166097],{"class":45},[39,173714,173715,173718,173720],{"class":41,"line":112},[39,173716,173717],{"class":45},"write_json(",[39,173719,152776],{"class":1319},[39,173721,173722],{"class":45},", students)\n",[14,173724,173726],{"id":173725},"_918-易错点","9.18 易错点",[1171,173728,173729,173732,173737,173742,173745,173748],{},[1174,173730,173731],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[1174,173733,173734,173735,29442],{},"能指定异常类型就不要裸写 ",[36,173736,171839],{},[1174,173738,173739,173741],{},[36,173740,172214],{}," 无论是否出错都会执行。",[1174,173743,173744],{},"模块文件名不要和标准库重名。",[1174,173746,173747],{},"导入自己写的模块时，要注意运行目录。",[1174,173749,173750],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,173752,173754],{"id":173753},"_919-本章练习","9.19 本章练习",[1171,173756,173757,173760,173763,173769,173776],{},[1174,173758,173759],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[1174,173761,173762],{},"写函数读取文件，如果文件不存在则返回空字符串。",[1174,173764,173177,173765,173768],{},[36,173766,173767],{},"math_utils.py","，实现加减乘除函数并导入使用。",[1174,173770,173771,173772,173775],{},"创建一个 ",[36,173773,173774],{},"utils"," 包，把 JSON 读写函数放进去。",[1174,173777,173778],{},"写一个程序，捕获除零异常和输入格式异常。",[1133,173780,173781],{},"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":34,"searchDepth":74,"depth":74,"links":173783},[173784,173785,173786,173787,173788,173789,173790,173791,173792,173793,173794,173800,173807,173809,173810,173811,173812,173813,173814],{"id":171636,"depth":74,"text":171637},{"id":171764,"depth":74,"text":171765},{"id":171813,"depth":74,"text":171814},{"id":171962,"depth":74,"text":171963},{"id":172134,"depth":74,"text":172135},{"id":172203,"depth":74,"text":172204},{"id":172314,"depth":74,"text":172315},{"id":172440,"depth":74,"text":172441},{"id":172565,"depth":74,"text":172566},{"id":172620,"depth":74,"text":172621},{"id":172719,"depth":74,"text":172720,"children":173795},[173796,173797,173798,173799],{"id":172723,"depth":99,"text":172724},{"id":172757,"depth":99,"text":172758},{"id":172796,"depth":99,"text":172797},{"id":172875,"depth":99,"text":172876},{"id":172898,"depth":74,"text":172899,"children":173801},[173802,173803,173804,173805,173806],{"id":172902,"depth":99,"text":172903},{"id":172985,"depth":99,"text":172986},{"id":173030,"depth":99,"text":173031},{"id":173089,"depth":99,"text":173090},{"id":173127,"depth":99,"text":173128},{"id":173161,"depth":74,"text":173808},"9.13 if name == \"main\"",{"id":173254,"depth":74,"text":173255},{"id":173299,"depth":74,"text":173300},{"id":173410,"depth":74,"text":173411},{"id":173468,"depth":74,"text":173469},{"id":173725,"depth":74,"text":173726},{"id":173753,"depth":74,"text":173754},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171628,"description":1142},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173821,"title":173822,"body":173823,"description":173986,"extension":1143,"meta":173987,"navigation":1145,"path":173988,"seo":173989,"stem":173990,"__hash__":173991},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173824,"toc":173981},[173825,173828,173831,173834,173845,173847,173921,173924,173927,173930,173933,173936,173939,173942,173945,173948,173951],[10,173826,173822],{"id":173827},"python教程",[19,173829,173830],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173832,173833],{},"建议学习环境：",[1171,173835,173836,173839,173842],{},[1174,173837,173838],{},"Python 版本：Python 3.10 及以上。",[1174,173840,173841],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[1174,173843,173844],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173846,118023],{"id":118023},[1171,173848,173849,173855,173861,173867,173873,173879,173885,173891,173897,173903,173909,173915],{},[1174,173850,173851],{},[46,173852,173854],{"href":173853},".\u002Fch1-Python","Python环境与第一个程序",[1174,173856,173857],{},[46,173858,173860],{"href":173859},".\u002Fch2","基础语法、变量与字符串",[1174,173862,173863],{},[46,173864,173866],{"href":173865},".\u002Fch3","判断语句",[1174,173868,173869],{},[46,173870,173872],{"href":173871},".\u002Fch4","循环语句",[1174,173874,173875],{},[46,173876,173878],{"href":173877},".\u002Fch5","函数基础",[1174,173880,173881],{},[46,173882,173884],{"href":173883},".\u002Fch6","数据容器",[1174,173886,173887],{},[46,173888,173890],{"href":173889},".\u002Fch7","函数进阶",[1174,173892,173893],{},[46,173894,173896],{"href":173895},".\u002Fch8","文件操作",[1174,173898,173899],{},[46,173900,173902],{"href":173901},".\u002Fch9","异常、模块与包",[1174,173904,173905],{},[46,173906,173908],{"href":173907},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[1174,173910,173911],{},[46,173912,173914],{"href":173913},".\u002Fch11","面向对象基础",[1174,173916,173917],{},[46,173918,173920],{"href":173919},".\u002Fch12","综合案例与复习路线",[14,173922,173923],{"id":173923},"学习路线",[19,173925,173926],{},"第一阶段：能运行程序。",[19,173928,173929],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173931,173932],{},"第二阶段：能组织数据。",[19,173934,173935],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173937,173938],{},"第三阶段：能封装逻辑。",[19,173940,173941],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173943,173944],{},"第四阶段：能做小项目。",[19,173946,173947],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173949,173950],{"id":173950},"参考资料",[1171,173952,173953,173960,173967,173974],{},[1174,173954,173955,173956],{},"黑马程序员 Python 入门教程推荐：",[46,173957,173958],{"href":173958,"rel":173959},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24921],[1174,173961,173962,173963],{},"Python 官方中文教程：",[46,173964,173965],{"href":173965,"rel":173966},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24921],[1174,173968,173969,173970],{},"Python 标准库文档：",[46,173971,173972],{"href":173972,"rel":173973},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24921],[1174,173975,173976,173977],{},"pyecharts 文档：",[46,173978,173979],{"href":173979,"rel":173980},"https:\u002F\u002Fpyecharts.org\u002F",[24921],{"title":34,"searchDepth":74,"depth":74,"links":173982},[173983,173984,173985],{"id":118023,"depth":74,"text":118023},{"id":173923,"depth":74,"text":173923},{"id":173950,"depth":74,"text":173950},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":24434},"\u002Fwiki\u002F2024-10-10-python",{"title":173822,"description":173986},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331445694]